/*******************************************
*
* Program koji racuna obim trouga na osnovu
* unetih koordinata u koordinatnom sistemu
*
*******************************************/
#include <stdio.h>
#include <math.h>
main () {
/***********************************************
*
* x1, x2 i x3 su koordinate na X osi za tri tacke
* y1, y2 i y3 su koordinate na Y osi za tri tacke
* a, b i c su stranice trougle
* O je obim trougla
*
************************************************/
double x1, x2, x3, y1, y2, y3, a, b, c, O;
/****************************************
*
* again je pomocna promenljiva koja sluzi za vracanje programa na pocetak
* ako korinsik hoce da ponovi program
*
*****************************************/
char again = 'y';
/*****************************************
*
* Prvo unosenje koordinata tacaka!
* Kasnije sledi provera da li se neke tacke poklapaju
*
*******************************************/
printf("**Program za racunanje obima trougla pomocu koordinata**\n");
while(again=='y') {
/****************************************
*
* Unos prve tacke
*
*****************************************/
printf("\nUnesite koordinate prve tacke: ");
scanf("%lf", &x1);
scanf("%lf", &y1);
/****************************************
*
* Unos druge tacke
*
*****************************************/
printf("\nUnesite koordinate druge tacke: ");
scanf("%lf", &x2);
scanf("%lf", &y2);
/****************************************
*
* Unos trece tacke
*
*****************************************/
printf("\nUnesite koordinate trece tacke: ");
scanf("%lf", &x3);
scanf("%lf", &y3);
/******************************************
*
* Racunanje duzine stranice pomocu koordinata
* dve tacke u koordinatnom sistemu!
*
*******************************************/
a = sqrt(pow((x1-x2), 2)+pow((y1-y2), 2));
b = sqrt(pow((x2-x3), 2)+pow((y2-y3), 2));
c = sqrt(pow((x1-x3), 2)+pow((y1-y3), 2));
/*************************************************
*
* Provera da li je bar jedna od stranica trugla jednaka nuli
* Ako jeste to znaci da se neke koordinate poklapaju
* U tom slucaju trazi se od korisnika da ponovo unese koordinate
* krajnjih tacaka stranice koja je jedanaka nuli
*
***************************************************/
while (a==0 || b==0 || c==0) {
/*********************************************************
*
* Ako je stranica a jednaka nuli, prva i druga tacka se poklapaju
*
**********************************************************/
while (a==0) {
printf("\nKoorinate prve i druge tacke se poklapaju!\n");
/****************************************
*
* Unos prve tacke
*
*****************************************/
printf("\nUnesite koordinate prve tacke: ");
scanf("%lf", &x1);
scanf("%lf", &y1);
/****************************************
*
* Unos druge tacke
*
*****************************************/
printf("\nUnesite koordinate druge tacke: ");
scanf("%lf", &x2);
scanf("%lf", &y2);
a = sqrt(pow((x1-x2), 2)+pow((y1-y2), 2));
}
/*******************************************************
*
* Ako je stranica b jednaka nuli, druga i treca tacka se poklapaju
*
********************************************************/
while (b==0) {
printf("\nKoorinate druge i trece tacke se poklapaju!\n");
/****************************************
*
* Unos druge tacke
*
*****************************************/
printf("\nUnesite koordinate druge tacke: ");
scanf("%lf", &x2);
scanf("%lf", &y2);
/****************************************
*
* Unos trece tacke
*
*****************************************/
printf("\nUnesite koordinate trece tacke: ");
scanf("%lf", &x3);
scanf("%lf", &y3);
b = sqrt(pow((x2-x3), 2)+pow((y2-y3), 2));
}
/******************************************************
*
* Ako je stranica c jednaka nuli, prva i treca tacka se poklapaju
*
********************************************************/
while (c==0) {
printf("\nKoorinate prve i trece tacke se poklapaju!\n");
/****************************************
*
* Unos prve tacke
*
*****************************************/
printf("\nUnesite koordinate prve tacke: ");
scanf("%lf", &x1);
scanf("%lf", &y1);
/****************************************
*
* Unos trece tacke
*
*****************************************/
printf("\nUnesite koordinate trece tacke: ");
scanf("%lf", &x3);
scanf("%lf", &y3);
c = sqrt(pow((x1-x3), 2)+pow((y1-y3), 2));
}
/*****************************************************
*
* Ponovno racunanje stranica je neophodno jer
* moze da se desi da se na primer prva i treca koordinara
* poklapaju, odnosno da je stranica c jednaka nulu.
* Kada korinsik ponovo unese koordinate prve i treca tacke
* moze da se desi da se jedan od njih dve poklopi sa dugom.
* Zbog toga se ponovo racunaju stranice,
* da bi se obezbedila veca sigurnost!
*
*********************************************************/
a = sqrt(pow((x1-x2), 2)+pow((y1-y2), 2));
b = sqrt(pow((x2-x3), 2)+pow((y2-y3), 2));
c = sqrt(pow((x1-x3), 2)+pow((y1-y3), 2));
}
/************************************************
*
* Ispis duzine stranica i obima trougla
*
*************************************************/
O = a+b+c;
printf("\n\nStranica a je %.2f!\n", a
);
printf("\nStranica b je %.2f!\n", b
);
printf("\nStranica c je %.2f!\n", c
);
printf("\n Obim trougla je %.2f\n\n\n", O
);
/****************************************************
*
* Provera da li korinsik zeli da ponovo izvrsi program
*
*****************************************************/
scanf("%c", &again); /*ovo je neophodno zbog entera iz bafera tastature */
printf("\n\nDa li zelite da ponovite program? (y/n) ");
scanf("%c", &again);
while (again!='y' && again!='n') {
scanf("%c", &again); /*ovo je neophodno zbog entera iz bafera tastature */
printf("\nUnesite vrenost 'y' za DA ili 'n' za NE!\n");
printf("Da li zelite da ponovite program? (y/n) ");
scanf("%c", &again);
}
}
/****************************************************
*
* Kraj programa
*
*****************************************************/
printf("\nKRAJ PROGRAMA\n\n\n");
}