Program na zajęcia //całki // C

0

Cześć
Mam mały problem z programem do obliczania wartości całki, jest to dosyć prosty program dla początkujących i nie jego funkcje są problemem.
Problemem jest założenie które narzuca nam wykładowca otóż Xp(przedział początkowy) musi być mniejszy od końcowego, a gdy nie jest program ma zapytać co dalej robić czy powtórzyć pętlę czy zakończyć program.
Niestety nie wiem jak wrócić na początek funkcji tak aby się nie wykonała.

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

double f(double x)
{
       cos(x);
       
}
int main (int agrc,char* agrv[])
{
    double Xp, Xk, dx, i, Xi, polecalkowite;
    double N; 
    do
   {
    
    printf ("Wprowadz wartosc poczatkowa\n");
    scanf ("%lf",& Xp);
    printf ("Wprowadz wprowadz wartosc koncowa\n");
    scanf ("%lf",& Xk);
    printf ("Podaj ilosc przedzialow\n");
    scanf ("%lf",&  N);
    
    if() /* tutaj musi się znajdować funkcja */
   
              
    dx=(Xk-Xp)/N;
    printf ("Szerokosc jednostkowego przedziału całkowania %.2lf\n", dx);
    
   for (i=0; i<=N;Xi=Xp+((i/N)*(Xk-Xp)))
   {
        i++;
        printf("Połozenie kolejnych punktow przedzialu Xi w <Xp,Xk>              %.2lf\n", Xi);
       
        }
   
    
}while (getchar());

    system ("pause");
}

Z góry dziękuje za pomoc
Ps. Program nie jest ukończony jeżeli chodzi o fukcje obliczania całki

0

Może użyj continue? Wtedy reszta pętli się nie wykona i rozpocznie się nowy obieg.

0

tylko w jaki sposób miałbym to napisać nie czuje tego :(

0

Jeśli wartość jest nieprawidłowa to spytaj użytkownika co chce robić. Możesz wyświetlić jakieś menu w stylu: "1 - koniec | 2 - powtorz" i wtedy jeśli wpisze 2 robisz continue.

0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double f(double x)
{
       cos(x);
       
}
int main (int agrc,char* agrv[])
{
    double Xp, Xk, dx, i, Xi, polecalkowite;
    double N;
    double t,n;  
    do
   {
    
    printf ("Wprowadz wartosc poczatkowa\n");
    scanf ("%lf",& Xp);
    printf ("Wprowadz wprowadz wartosc koncowa\n");
    scanf ("%lf",& Xk);
    printf ("Podaj ilosc przedzialow\n");
    scanf ("%lf",&  N);
    
    if(Xp>Xk)
    {
    printf ("Niewlasciwy przedzial calkowania\n Chcesz powtorzyc wcisnij t\n jezeli nie wcisnij n\n");
    scanf ("%lf", & t && n);
    }
    else if (t)
    continue;
    else if (n)
    return 0;
    else 
    printf ("Bledny wybor");
    return 0;
              
    dx=(Xk-Xp)/N;
    printf ("Szerokosc jednostkowego przedziału całkowania %.2lf\n", dx);
    
   for (i=0; i<=N;Xi=Xp+((i/N)*(Xk-Xp)))
   {
        i++;
        printf("Połozenie kolejnych punktow przedzialu Xi w <Xp,Xk>              %.2lf\n", Xi);
       
        }
   
    
}while (getchar());

    system ("pause");
}

działa źle proszę pomóż :)

0

Coś takiego może:

 
if(Xp>Xk)
{
    printf("... 1 - KONIEC | 2 - POWTORZ\n");
    int wybor;
    scanf("%d", &wybor);  
     
    if(wybor == 1)      break;
    else if(wybor == 2) continue;
}

Nie jest to zabezpieczone przed podaniem błędnej wartości dla wyboru (innej niż 1 lub 2).

0
if(Xp>Xk)
    {
             
    printf ("Niewlasciwy przedzial calkowania\n  1-powtorz\n  2- koniec\n");
    scanf ("%d", & wybor);
    }
    if (wybor == 1) continue;
    
    else if (wybor == 2){ break; return 0;}
    else 
    {
    printf ("Zacznijmy wszystko od poczatku\n");
    system ("pause");
    continue;
}

bardzo dziękuję
pozdrawiam Michał :)

0

Twój kod przecież nie działa. Pewnie chodziło ci o takie coś:

if(Xp>Xk)
{
    int wybor;
    printf ("Niewlasciwy przedzial calkowania\n  2 - koniec\n  inny - powtorz\n");
    scanf ("%d", &wybor);

    if (wybor == 2) break;
    else { printf("Zacznijmy wszystko od poczatku\n"); continue; }
}
 

Źle posługujesz się klamrami. Poza tym w linijce

 {break; return 0;} 

część kodu za słowem break; się nie wykona.
I po co ten system("pause");

0

się pospieszyłem mało tego, pętla za 2 razem zapamietuje wybór i jak wybrałem za 1 razem tak będzie powtarzać ehh...

0

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

double f(double x)
{
cos(x);
}
int main (int agrc,char* agrv[])
{

double Xp, Xk, i, dx, Xi, polecalkowite, polejednostkowe;
double N;
int wybor;
do

{
printf ("Wprowadz wartosc poczatkowa\n");
scanf ("%lf",& Xp);
printf ("Wprowadz wprowadz wartosc koncowa\n");
scanf ("%lf",& Xk);
printf ("Podaj ilosc przedzialow\n");
scanf ("%lf",& N);
if (Xp<Xk) goto koniec;
if(Xp>Xk)
{
printf ("Niewlasciwy przedzial calkowania\n 1-powtorz\n 2- koniec\n");
scanf ("%d", & wybor);
}

if (wybor == 1) continue;
if (wybor == 2){ break; return 0;}
koniec:
dx=(Xk-Xp)/N;
printf ("Szerokosc jednostkowego przedziału calkowania\t%.2lf\n", dx);

for (i=0; i<=N;Xi=Xp+((i/N)*(Xk-Xp)))
{
    i++;
    printf("Polozenie kolejnych punktow przedzialu Xi w <Xp,Xk>\t%.2lf\n", Xi);
}
polejednostkowe+=Xi*dx;
printf("Pole jednego przedzialu wynosi\t%.2lf\n", polejednostkowe);


polecalkowite=i*polejednostkowe;
printf ("Pole calki wynosi %.2lf\n", polecalkowite);

printf ("Jezeli chcesz powtorzyc obliczenia wcisnij 1 jezeli nie wcisnij 2\n");
scanf ("%d",& wybor);
if (wybor == 1) continue;
if (wybor == 2) { break; return 0;}                                                                                                                                                                                                                      
                                            
                         

}while (getchar());
}


No trochę poprawiłem mój program i działa tak jak chcę, prawie. Z jednym wyjątkiem sumuje wartości z 1 pętli do 2 pętli i tak dalej i tak dalej
Jesteś w stanie pomóc, proszę :)
(te kolorowanie jakoś mi kod zmienia tu i uwdzie :P)

0
do 
{
    polejednostkowe = 0;
0

nie działa niestety
@/edit
już działa przepraszam moja nieuwaga :)
dziękuje i pozdrawiam

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