Wzór Gaussa: bledny wynik obliczania pola

0

...prawo gassa do obliczania pola powierzchni ... nie jestem informatykiem programowanie to takie małe hobby ...
wynik jaki wychodzi jest błędny a raczej abstrakcyjny... choć wzór dobry może ktoś widzi tu błąd i może mi pomóc
wzór Gaussa 1/2 P = x[i]*(y[i+1]-y[i-1]) ...Udostępniam KOD programu

Z góry dziekii // Tomasz

{
	float x[16],y[16],p,pole;
	int d,i;

printf("Podaj ilosc wierzcholkow wielokata (3-15) ");
scanf("%d",&d);
printf("\n");
printf("Wprowadz wspolrzedne wierzcholkow\n\n");
for (i=1;i<=d;i++)
	{
	printf("Wspolrzedna X %d = ",i);
	scanf("%d",&x[i]);
	printf("Wspolrzedna Y %d = ",i);
	scanf("%d",&y[i]);
	printf("\n");
	}
y[0] = y[d];
y[d+1] = y[1];
p=0
for (i=1;i<=d;i++)
	{
	p=p+x[i]*(y[i+1]-y[i-1]);
	}
if (p<0) 
	{
	p=-p;
	}
pole=p/2;
printf("Pole powierzchni wynosi = %d",pole);
0

Pytanie pomocnicze: jakie wartości bierzesz z tablicy y[], a jakie powinieneś brać dla najmniejszego i największego i?

0
mnbvcX napisał(a)

Pytanie pomocnicze: jakie wartości bierzesz z tablicy y[], a jakie powinieneś brać dla najmniejszego i największego i?

jezeli chodzi o tą czesc kodu
"for (i=1;i<=d;i++)
{
printf("Wspolrzedna X %d = ",i);
scanf("%d",&x[i]);
printf("Wspolrzedna Y %d = ",i);
scanf("%d",&y[i]);"

czy musi być od Zera ? czy moze byc od 1

"for (i=0; i<=d-1; i++)
{
printf("Wspolrzedna X %d = ",i+1);
scanf("%d",&x[i]);
printf("Wspolrzedna Y %d = ",i+1);
scanf("%d",&y[i]);"

Nastepnie pytanie bo jezeli jest od zera to

    y[-1]=y[d-1];
y[d]=y[0];

... Lecz błąd wydaje mi sie przy samym przypisywaniu pod X[i] i Y[i] ale programistą nie jestem ... Proszę jeszcze raz o naprowadzenie moich myśli bądź pomoc ... :)

0

Chodzi mi o:

for (i=1;i<=d;i++)
        {
        p=p+x[i]*(y[i+1]-y[i-1]);
        }

A teraz wyobraź sobie, co będzie z tablicą y[], jeśli i=1 lub i=d...

0
mnbvcX napisał(a)

Chodzi mi o:

for (i=1;i<=d;i++)
        {
        p=p+x[i]*(y[i+1]-y[i-1]);
        }

A teraz wyobraź sobie, co będzie z tablicą y[], jeśli i=1 lub i=d...

chodzi o to że np dla Y[i-1] przy i 1 bedzie Y[0] a czy takie przypisanie jak :

y[0] = y[d];
y[d+1] = y[1];

nie wystarczy ?

0

Tak można, tylko że jak będzie d=15, to wtedy będziesz pisał po nieswojej pamięci (będziesz pisał po indeksie numer 16, który nie istnieje). Będzie trzeba wtedy zwiększyć rozmiary tablic.

0
mnbvcX napisał(a)

Tak można, tylko że jak będzie d=15, to wtedy będziesz pisał po nieswojej pamięci (będziesz pisał po indeksie numer 16, który nie istnieje). Będzie trzeba wtedy zwiększyć rozmiary tablic.

no tak dlatego dałem taki ogranicznik "Podaj ilosc wierzcholkow wielokata (3-15)" który chce rozwinąć... ale póki coo nie działa mi to tak jak powinno co jeszcze moze byc źle... ?

0

Got it!

scanf("%d",&x[i]);

scanf - C++ Reference
Jeszcze raz użyj do floata %d, to.... znowu będzie trzeba tygodnia by zauważyć błąd :D

0
mnbvcX napisał(a)

Got it!

scanf("%d",&x[i]);

scanf - C++ Reference

Jeszcze raz użyj do floata %d, to.... znowu będzie trzeba tygodnia by zauważyć błąd :D

...haha no fakt :PP :)

0

Program mimo wszystko nadal nie chce mi zadziałać, czy ktoś może sprawdzić u siebie co jest nie tak i dać jakąś podpowiedź.... ?

Z góry dzięki za pomoc...

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