algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Shaw-Trauba - Implementacja w C/C++
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 08 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

show_c.c:
//Algorytm Show-Trauba
//www.algorytm.org
//Tomasz Lubinski (c)2001

#include <stdio.h>
#include <conio.h>
#include <math.h>


int n,p,q,stopien;
float a[100];
float x,wynik;



float s(int j)           //funkcja pomocnicza s(j)
{
return (n-j)%q;
}

float r(int j)           //funkcja pomocnicza r(j)
{
if (j%q==0)
return q;
else
return 0;
}

float T(int i, int j, float x)
{
if (x==0)                     //by mozna bylo obliczyc pochodna w punkcie x=0
return a[j];
else
if (j==-1)
return a[n-i-1]*pow(x,s(i+1));
else
if (i==j)
return a[n]*pow(x,s(0));
else
return T(i-1, j-1, x)+T(i-1, j, x)*pow(x,r(i-j));
}

float pochodna(int stopien, float punkt)
{
if (punkt==0) return T(n,stopien,punkt); else return T(n,stopien,punkt)/pow(punkt,stopien%q);
}

main()
{
int i;
clrscr();
printf("Algorytm Show-Trauba - obliczanie pochodnych znormalizowanych wielomianu\nPodaj stopien wielomianu\n");
scanf("%d", &n);
if (n>100)
{printf("Za duzy stopien wielomianu"); getche(); return(1); }

printf("\nPodaj teraz kolejne wspolczynniki wielomianu.\nZaczynij od tego z najwieksza potega.\n");
for(i=n; i>=0; i--)
 {printf("a%d ", i);
  scanf("%e", &a[i]);}

printf("Podaj punkt x\n");
scanf("%e", &x);

printf("Podaj wartosc parametru p\n");
scanf("%d",&p);
q=(n+1)/p;
if (p*q!=n+1)
{printf("Zla wartosc parametru p (musi byc on dzielnikiem n+1)"); getche(); return(1);}

printf("Podaj stopien znormalizowanej pochodnej do obliczenia\n");
scanf("%d",&stopien);
if (stopien>n)
{printf("Stopien pochodnej nie moze byc wiekszy od stopnia wielomianu"); getche(); return(1);}
if (stopien<1)
{printf("Stopien pochodnej nie moze byc mniejszy od 1"); getche(); return(1);}


wynik=pochodna(stopien,x);
printf("\nZnormalizowana pochodna %d stopnia w punkcie %f ma wartosc %f",stopien,x,wynik);
getche();
return(0);
}
Dodaj komentarz