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
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*/
}