Funkcje w jezyku c.

0

Witam mam do napisania program o treści

Wczytaj współrzędne 4 punktów (x,y) i wypisz pola wszystkich możliwych trójkątów zbudowanych na tych punktach. Zastosuj funkcję obliczającą pole trójkąta.

Jako iż dopiero raczkuje z programowaniem nie moge sobie poradzić z nim, nie wiem co robie nie tak, z materiałów znalezionych w internecie ciężko jest mi ogarnąć jak robić funkcje, czy mógłby ktoś wytknąć mi mój błąd i naprowadzić na poprawne rozwiązanie? Z góry Dziękuje.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include<time.h>
                float pole (float x1,float y1,float x2,float y2,float x3,float y3)
                             {
                float pole,pl;
                pl= (x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);
                            if            (pl>0)          {pole=pl/2;}
                            else                          {pole=(pl*-1)/2;}
                 return pole;
                              }

int main (void)
{
int ty[4],tx[4];
int x,yi,k,l=0,m,n,o,p,r;
float a,b,c,d,e,f,x1,x2,mx,x3,y1,y2,y3,tz[100];

              for(k=0;k<4;k++){
                                      printf("Podaj x i y\n");
                                      scanf("%d%d",&tx[k],&ty[k]);
                                      }
tz[0]=pole(tx[0],ty[0],tx[1],ty[1],tx[2],ty[2]);
tz[1]=pole(tx[0],ty[0],tx[1],ty[1],tx[3],ty[3]);
tz[2]=pole(tx[0],ty[0],tx[3],ty[3],tx[2],ty[2]);
tz[3]=pole(tx[3],ty[3],tx[1],ty[1],tx[2],ty[2]);
mx=tz[0];
                 while(l<4){
	                       if(tz[l]>mx){mx=tz[l];}
                                l++;
                               }
printf("%f\n",mx);
                              for(k=0;k<4;k++)
                             {
                             printf("%d  %d\n",ty[k],tx[k]);
                             }
}
0

Po co Ci tyle zmiennych nie lepiej tablice stworzyć? int main (void) -> int main () reszta wygląda dobrze

0

Zmienne to juz mam w "szablonie" staram sie powoli przechodzic na tablice. Niestety wyskakują mi totalne bzdury w wyniki, tzn ze najwieksze pole jest rowne -0 i wszystkie pola sa rowne 0

0

polecam wzór

pole=sqrt(p*(p-a)(p-b)(p-c))

gdzie p - to połowa obwodu
a,b,c - długości boków

0
macmacmac napisał(a):

int main (void) -> int main () reszta wygląda dobrze

int main(void) też wygląda dobrze:

5.1.2.2.1 Program startup
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char argv[]) { / ... */ }
or equivalent; or in some other implementation-defined manner.

źródło: ISO/IEC 9899:TC3 WG14/N1256

0

Udało mi sie rozwiazac problem, powstawiałem wiecej nawiasów oraz pozamienialem wartosci int na float, temat zamkniety, dziekuje wszystkim za uwage:)

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