[czyste C] pomoc przy przerobce programu -calki okreslone

0

Witam. Chcialem sie zapytac czy ktos by mi pomogl przy przerobieniu programu ktory mam napisany w czystym C na zmienych goto na petle while? :) wiem ze to jest moze banalne ale ja komplenie nie umie C i stad ta prosba :) Program sluzy do obliczania calek okreslonych, najpierw sie wybiera funkcje... potem przedzial A,B calkowania i na koncu ma sie wybierac metode calkowania ale to jest jeszcze nie zrobione bo mam tylko jedna :( bylbym ogromnie wdzieczny gdyby ktos mi pomogl (czyt. przerobil) ten program na ta petle while +dopisac z 2 mietody calkowania :D Z gory dzieki za odpowiedz...

0

eh... widze ze nikt mi nie pomoze :( qrde,,, a potrzebuje ten program na sobote na zaliczenie ;(

0

Po pierwsze mówi się ANSI C, po drugie ile masz linijek tego kodu?

0

dzieki za odpowiedz i ewentualna pomoc :) nizej zamieszczam program ktory mam... wiem ze jest on napisany gorzej niz zle i dlatego trzeba go przepisac zeby wygladal jak program w C :) no i pasowaloby dopisac (tak jak juz pisalem) menu wyboru metody calkowania + 2 metody... i na koncu zeby byl pozliwy wybor zakonczenia programu lub powrotu do poczatq...

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/* funkcja f()
zmienne:
l  - wybor funkcji
x  - argument funkcji
y  - wartosc funkcji
*/
double f(int l, double x)
{
 double y;
 switch(l)
 {
    case 1: y=1;break;
    case 2: y=x;break;
    case 3: y=x*x;break;
    case 4: y=sin(x);break;
    case 5: y=cos(x);break;
    case 6: y=pow(M_E,x);break;     /* M_E  to liczba e zdefiniowna w C*/
    case 7: y=log10(x);break;
    default: printf("Blad 1!\n");exit(1); /* jesli zadne z powyzszych nie zostanie 
                                                          wybrane to wtedy wykona to linie*/
 }
 return y;
}
/* funkcja main()
zmienne:
a   - poczatek przedzialu calkowania
b   - koniec przedzialu calkowania
i   - argument funkcji podcalkowej
n   - ilosc przedzialow pod funkja
h   - szerokosc przedzialu
l   - wybor funkcji
cal - wartosc calki
ii  - mianownik ulamka, patrz regula Simpsona.
nn  - licznik
*/
main()
{
 int ii,nn,l;
 double a=0,b=0,i,n=1,h=0,cal=0;
 printf("Wybierz funkcje:\n");
 printf(" 1. y=1\n 2. y=x\n 3. y=x^2\n 4. y=sin(x)\n 5. y=cos(x)\n 6. y=e^x\n 7. y=log(x)\n");
 printf("-> ");
 scanf("%d",&l);
 cc:
 printf("Podaj a: ");
 scanf("%lf",&a);
 if(l==7 && a<=0)
 {
   printf("a musi byc wieksze od zera\n");
   goto cc;
 }
 dd:
 printf("Podaj b: ");
 scanf("%lf",&b);
 if(a>b)
 {
   printf("b musi byc wieksze od a\n");
   goto dd;
 }
 aa:          /*etykieta "goto" */
 printf("Podaj ilosc przedzialow: ");
 scanf("%lf",&n);
 if(n<=0)
 {
   printf("Ilosc przedzialow musi byc wieksza od zera");
   goto aa;  
 }
 else
   h=((b-a)/n); 
 ii=1;
 nn=0;
 for(i=a;i<=b;i+=h) /* petla funkcja for(jaka zmienna; warunek; zmiana w 
                               kazdym kroku) wykonuje sie dopuki warunek jest 
                               prawdziwy*/
 {
   bb:
   cal+=((f(l,i)*ii)/3); /* z reguly Simpsona 1/3*f + 4/3*f + 2/3*f ... */  
   switch(ii)  /*funkcja "przelacznik" jesli ii=1 to wykonuje 1 linie jesli ii=2 to 
                     druga ii=4 to trzecia czyli przypisanie ii=4 ...*/
   {
     case 1: ii=4;break;
     case 2: ii=4;break;
     case 4: ii=2;break;
     default: printf("Blad 2!\n");exit(1);
   }  
   nn++; /* nn++ to to samo co nn=nn+1*/
   if(nn==n)
   ii=1; 
   
 }
 if(ii!=1) /* "!=" to znak "rozne od" */
   goto bb;
 cal*=h;    /* cal=cal*h  */
 printf("%lf\n",cal);  /* wypisanie calki*/    
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1