Problem z programem obliczającym pole powierzchni

0

Witam wszystkich serdecznie!

Mam problem z osiągnięciem ostatecznej formy programu, nad którym pracuję podczas nauki języka C/C++. Polecenie brzmi następująco:

**Napisz program, który oblicza pole powierzchni ograniczonej wykresem funkcji wielomianowej f(x) = ax^3 + bx^2 + cx + d oraz osią OX w zakresie między xp i xk. Zastosuj metodę trapezów, która opiera się na podziale wyznaczanego obszaru na trapezy i zsumowaniu pól trapezów. Liczbę trapezów, początek i koniec przedziału (xp, xk) podaje użytkownik. Współczynniki wielomianu a, b, c, d są podane również przez użytkownika i zapisane w tablicy. **

Dodam, że wiem, że takiego typu zadania rozwiązuje się poprzez użycie całek, ale muszę ominąć ten sposób i zastosować inny! Tak samo nie mogę korzystać z własnych funkcji w programie!

Niżej przedstawiam Wam napisany przeze mnie kod - nie widzę tu żadnego błędu, a program i tak nie potrafi dobrze obliczyć pola powierzchni.

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


int main()
{
	float xp, xk, h, a, b, ile_trapezow, b_pom, suma = 0, pole = 0;
	int i;
	int wsp[4];
	printf("Program obliczajacy pole powierzchni ograniczonej wykresem funkcji f(x) = ax^3+bx^2+cx+d\n");
	printf("oraz osia OX w zakresie miedzy xp i xk (podanym przez uzytkownika).\n\n\n");
	printf("Podaj kolejno wspolczynniki a, b, c, d podanej wyzej funkcji wielomianowej:\n");
	for(i=0; i<4; i++)
	{
		scanf("%d", &wsp[i]);
	}
	system("cls");
	printf("Podaj poczatek przedzialu xp: "); 
	scanf("%f", &xp);
	printf("Podaj koniec przedzialu xk: ");
	scanf("%f", &xk);
	system("cls");
	printf("Podaj, na ile trapezow chcesz podzielic obszar ograniczony (im wiecej, tym dokladniejszy wynik): ");
	scanf("%f", &ile_trapezow);
	
	
	h = (xk-xp)/ile_trapezow;
	a = wsp[0]*pow(xp,3) + wsp[1]*pow(xp,2) + wsp[2]*xp + wsp[3];

	for(i=1; i<=ile_trapezow; i++)
	{
		pole = 0;
		b = wsp[0]*(a+(h*i))*(a+(h*i))*(a+(h*i)) + wsp[1]*(a+(h*i))*(a+(h*i)) + wsp[2]*(a+(h*i)) + wsp[3];
		pole = (a+b)*h*0.5;
		printf("Pole %d = %d\n", i, pole);
		suma = suma + pole;
		a = b;
	}
	printf("\n\nPole wynosi %.1f", suma);
}
0

Dobra, poradziłem sobie sam z tym problemem - brałem całą długość podstawy dolnej trapezu, zamiast pojedynczego punktu. Gdyby ktoś chciał na przyszłość, umieszczam prawidłowy kod poniżej.

  #include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float xp, xk, h, a, b, ile_trapezow, b_pom, suma = 0, pole = 0;
    int i;
    int wsp[4];
    printf("Program obliczajacy pole powierzchni ograniczonej wykresem funkcji f(x) = ax^3+bx^2+cx+d\n");
    printf("oraz osia OX w zakresie miedzy xp i xk (podanym przez uzytkownika).\n\n\n");
    printf("Podaj kolejno wspolczynniki a, b, c, d podanej wyzej funkcji wielomianowej:\n");
    for(i=0; i<4; i++)
    {
        scanf("%d", &wsp[i]);
    }
    system("cls");
    printf("Podaj poczatek przedzialu xp: "); 
    scanf("%f", &xp);
    printf("Podaj koniec przedzialu xk: ");
    scanf("%f", &xk);
    system("cls");
    printf("Podaj, na ile trapezow chcesz podzielic obszar ograniczony (im wiecej, tym dokladniejszy wynik): ");
    scanf("%f", &ile_trapezow);
 
    h = (xk-xp)/ile_trapezow;
    a = wsp[0]*pow(xp,3) + wsp[1]*pow(xp,2) + wsp[2]*xp + wsp[3];
 
    for(i=1; i<=ile_trapezow; i++)
    {
        pole = 0;
        b = wsp[0]*(xp+(h*i))*(xp+(h*i))*(xp+(h*i)) + wsp[1]*(xp+(h*i))*(xp+(h*i)) + wsp[2]*(xp+(h*i)) + wsp[3];
        pole = (a+b)*h*0.5;
        printf("Pole %d = %d\n", i, pole);
        suma = suma + pole;
        a = b;
    }
    printf("\n\nPole wynosi %.1f", suma);
}

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