Skocz do zawartości




Zdjęcie

Problem z programem


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

Katalogi.pl

Katalogi.pl
  • Bywalec
Tekst alternatywny

#1 leparkour38

leparkour38

    Newbie

  • Members
  • Pip
  • 4 postów

Napisano 05 maj 2016 - 21:00

Witam. MIalem oto takie zadanie : 
Policzenie wartości funkcji we wszystkich punktach podziału na n części przedziału [a,b]. Funkcja f dana jest w postaci rozwinięcia w szereg potęgowy i w postaci wzoru analitycznego. Obliczanie sumy szeregu wykonać mam z dokładnością e (epsilon). Algorytm obliczenia sumy szeregu ma być w oddzielnej funkcji. Uzupełnij funkcję obliczającą sumę szeregu tak, by: 
1. sumowanych było co najwyżej M wyrazów szeregu 
2. funkcji main znana była dodatkowo liczba sumowanych wyrazów szeregu.
 
OTO PODANY SZEREG :
(1-x)^1/3
Oraz funkcja 1- (1/3)x - (1*2)x^2/(3*6) - (1*2*5)x^3/(3*6*9) - (1*2*5*8)x^4/(3*6*9*12)- .......
 
Oto program:
 
#include<stdio.h>
#include<math.h>
 
 
 
double szereg(double x,double ilosc_elementow,double dokl,double*k,int*licz)
{
    double wynik=0, p;
    double s,z,m,n,w,poprzednia;
    *licz=0;
    int i=0;
     z=1;
    s=0;
    w=3;
    m=1;
    n=1;
 
 
    do
    {
 
 
        wynik=wynik+z;
 
 
        z=z*((m*n)/w)*x;
        n=n+1;
        w=w+3;
        if(n==2) {
                poprzednia=s;
             wynik=wynik+z;
 
 
        z=z*((m*n)/w)*x;
        n=n+3;
        w=w+3;
        }
        p=fabs(z);
 
    i++;
    }while(p>=dokl&&i<ilosc_elementow);
 
    if(i>=ilosc_elementow) *k=1;
    else *k=0;
 
    *licz=i;
    return wynik;
 
}
 
 
int main()
{
 
    double y,x,a,b,krok,dx,max,dokl=0,k=0,sanus=0;
    int licz=0;
    char u='x';
    const char *tak="TAK";
    do
    {
        //początek przedziału
        printf("Podaj poczatek przedzialu : ");
        scanf("%lf",&a);
 
        //koniec przedziału
        printf("\nPodaj koniec przedzialu : ");
        scanf("%lf",&b);
 
        if(a>=b || fabs(a) > 1 || fabs(b) >1) printf("\nBledne dane, podaj zakres przedzialu jeszcze raz\n");
    }while(a>=b);
 
        //ilość kroków
    do
    {
        printf("\nPodaj na ile czesci podzielic przedzial  : ");
        scanf("%lf",&krok);
        if(krok<=0) printf("Bledne dane podaj dane jeszcze raz");
    }while(krok<=0);
    dx=(b-a)/krok;
 
        //dokladnosc
    do
    {
        printf("\nPodaj dokladnosc funkcji z zakresu (x miejsc po przecinku): ");
        scanf("%lf",&dokl);
        printf("\nDokladnosc wynosi %g\n",dokl);
        if(dokl<0||dokl>1) printf("Podaj dane jeszcze raz\n");
    }while(dokl<=0||dokl>=1);
 
 
        //liczba elemntów szeregu
    do
    {
        printf("\nPodaj maksymalna ilosc elementow szeregu : ");
        scanf("%lf",&max);
    }while(max<0);
 
 
        //wypisywanie
    x=a;
    printf("\nDANE : a=%-5.4lf \t b=%-5.4lf \t dx=%-5.4lf \t dokladnosc = %-5g \t max liczba el. szer. = %g\n",a,b,dx,dokl,max);
    printf("---------------------------------------------------------------------------------------------------------------\n");
    printf("|%8c \t|Wynik z fukcji:| %8    Wynik ze wzoru    |  Czy osiagnieto dokladnosc \t| Zsumowanych wyrazow:|\n",u);
    printf("---------------------------------------------------------------------------------------------------------------\n");
    while(x<b+0.1*dx)
    {
        y=szereg(x,max,dokl,&k,&licz);
        double l=1./3.;
        sanus=pow(1-x, l);
        if(k==1) tak="NIE";
        else tak="TAK";
        printf("|%3.4lf \t| %10.7lf\t|      %10.7lf     \t| \t%10.7s\t        |\t     %3d      |\n",x,y,sanus,tak,licz);
        x=x+dx;
    }
    printf("---------------------------------------------------------------------------------------------------------------\n");
    printf("\nTAK - dokladność została osiagnieta\nNIE- dokladnosc nie zostala osiagnieta\n" );
}
 
 
Mógłby ktos na niego spojrzeć ? Dokładnośc epsilon jest raczej złaa i nie wiem czy dobrze zrobiona fuknkcja co najwzyej M wyrazow.
 
Z góry dzieki

 





Similar Topics Collapse

  Temat Forum Autor Podsumowanie Ostatni post


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych


Inne serwisy: IFD, BrandSpy