// PTxy1.cpp // Obliczenie pola trojkąta ze wspolrzednych punktow // Dolaczenie bibliotek jezyka C #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <math.h> #include <dos.h> #define clrscr() system("cls") #define NL putchar('\n') // Funkcje - deklaracje void witaj(); // nagłowek programu, pytanie czy uruchomić pomoc lub wyjść z programu void pomoc(); // momoc - szkic, wzory void dane(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3); // wprowadzenie danych double area(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3); // obl. pola z dx, dy double area1(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3); // obl. pola met. wyznaczn. void boki(double x1, double y1, double x2, double y2, double x3, double y3, double &a, double &b, double &c); // obl. bokow double area2(double a, double b, double c, double &ha, double &hb, double &hc); // pole z dlug. bokow float dl(float x1, float y1, float x2, float y2); // dlug. ze wspolrz void wyniki(double &p1, double &p2, double &p3, double &a, double &b, double &c, double &ha, double &hb, double hc); // wyswietl. wynikow // wydruk wynikow do pliku void wydrplik(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3, double &p1, double &p2, double &p3, double &a, double &b, double &c, double &ha, double &hb, double &hc); // Funkcja glowna int main() // zmienne int kont='t'; double x1, y1, x2, y2, x3, y3, a, b, c, p1, p2, p3, pole, ha, hb, hc; do // petla do - powtarzaj witaj(); // nagłowek programu, pytanie czy uruchomić pomoc lub wyjść z programu dane(x1, y1, x2, y2, x3, y3); // wprowadzenie współrzędnych p1= area(x1, y1, x2, y2, x3, y3); // pole 1 p2=area1(x1, y1, x2, y2, x3, y3); // pole 2 boki(x1, y1, x2, y2, x3, y3, a, b, c); // obliczenie boków p3=area2(a, b, c, ha, hb, hc); // pole 3 ze wzoru Herona wyniki(p1, p2, p3, a, b, c, ha, hb, hc); // wyświetlenie wyników wydrplik(x1,y1,x2,y2,x3,y3, p1, p2, p3, a, b, c, ha, hb, hc); puts("\ndalsze obliczenia (T, lub t) "); // wydruk do pliku kont= while (kont=='t' kont=='t'); // dopóki kontynuacja == Tak, koniec do return 0; // funkcja main zwraca 0 //--------- Funkcje - definicje ------------------ void witaj() // naglowek programu, pytanie czy pomoc lub wyjscie
int odp; puts("\tprogram PTXY1.cpp\n"); puts("\nobliczenie pola trojkata ze wspolrzednych \n"); printf("\n1 - obliczenia, 2 - koniec 3 - pomoc i obliczenia => "); odp= if (odp == '2') exit(1); if (odp== '3') pomoc(); // pomoc - szkic, wzory void pomoc() puts("program oblicza pole trojkata na podstawie danych wspolrzednych 3 punktow"); puts("wg wzoru zapisanego w postaci formy Hausbrandta jako funkcja 1"); puts("lub jako iloczyn wyznacznikowy"); puts("na podstawie przyrostow wspolrzednych\n"); puts("2p=f1= DX12 DY12 "); puts(" DX13 DY13 "); puts("czyli"); puts("p=(dx12*dy13-dx13*dy12)/2"); puts("\nlub ze wzoru wyznacznikowego na podstawie wspolrzednych"); puts("pole=(x1*y2+x2*y3+x3*y1-x2*y1-x3*y2-x1*y3)/2"); puts("\nszkic i oznaczenia"); puts(" B(x2,y2) "); puts(" o"); puts(" c / \\ a"); puts(" / \\"); puts(" o--b---o"); puts("a(x1,y1) C(x3,y3)"); puts("kontrola: Obliczenie długosci bokow i pola ze wzoru Herona"); puts("pole=sqrt(p*(p-a)*(p-b)*(p-c)), gdzie p=(a+b+c)/2"); printf("\nnacisnij Enter: "); // wprowadzenie współrzędnych void dane(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3) int kont='n'; puts("\nwprowadzenie danych: wspolrzednych 3 punktow: A(x1,y1), B(x2,y2), C(x3,y3)"); do printf("\npodaj x1 => "); scanf("%lf",&x1); printf("podaj y1 => "); scanf("%lf",&y1); printf("\npodaj x2 => "); scanf("%lf",&x2); printf("podaj y2 => "); scanf("%lf",&y2); printf("\npodaj x3 => "); scanf("%lf",&x3); printf("podaj y3 => "); scanf("%lf",&y3); puts("\n\nwprowadzono dane: \n"); printf("a(%.3lf, %.3lf\n", x1, y1); printf("b(%.3lf, %.3lf\n", x2, y2); printf("c(%.3lf, %.3lf\n", x3, y3); printf("\ndane dobre (T, N) "); kont= while (kont=='n' kont=='n');
// obliczenie pola ze wspolrzednych, posrednie obl. przyrostow dx, dy double area(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3) double p2, p1, dx12, dy12, dx13, dy13; puts("funkcja area(x1,y1,x2,y2,x3,y3\n"); printf("x1=%.3f\t",x1); printf("y1=%.3f\n",y1); printf("x2=%.3f\t",x2); printf("y2=%.3f\n",y2); printf("x3=%.3f\t",x3); printf("y3=%.3f\n",y3); dx12=x2-x1; dy12=y2-y1; dx13=x3-x1; dy13=y3-y1; printf("dx12=%.3f\t",dx12); printf("dy12=%.3f\n",dy12); printf("dx13=%.3f\t",dx13); printf("dy13=%.3f\n",dy13); p2=dx12*dy13-dx13*dy12; p1=p2*0.5; printf("\n2p =%10.4f Pole=%10.3f\n",p2, p1); puts("nacisnij Enter "); return(p1); // obl. pola bezposrednio ze wspolrz. met. wyznaczn. double area1(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3) // met. wyznacznikowa float p2; p2=(x1*y2+x2*y3+x3*y1-x2*y1-x3*y2-x1*y3)/2.0; printf("funkcja area1(). Pole 2 = %f\n",p2); return(p2); // dlugosc ze wspolrz double dl(double &x1, double &y1, double &x2, double &y2) float d, dx, dy; dx=x2-x1; dy=y2-y1; d=sqrt(dx*dx+dy*dy); return(d); // Obliczenie bokow void boki(double x1, double y1, double x2, double y2, double x3, double y3, double &a, double &b, double &c) puts("obliczenie bokow\n"); a=dl(x2,y2,x3,y3); b=dl(x1,y1,x3,y3); c=dl(x2,y2,x1,y1); printf("boki: a=%.3f b=%.3f c=%.3f\n",a,b,c);
// pole na podstawie bokow, ze wzoru Herona double area2(double a, double b, double c, double &ha, double &hb, double &hc) puts("funkcja area(3) - wzor Herona\n"); float p, ph, ph2; printf("\ndlugosci: a=%f b=%f c=%f",a,b,c); p=0.500*(a+b+c); ph=sqrt(p*(p-a)*(p-b)*(p-c)); ph2=2*ph; ha=ph2/a; hb=ph2/b; hc=ph2/c; printf("\np=%.3f",p); printf("\nwysokosci: ha=%.3f hb=%.3f hc=%.3f",ha,hb,hc); printf("\npole z dlugosci bokow: P3=%.3f",ph); puts("\nnacisnij Enter "); return(ph); // Wyniki na ekran void wyniki( double &p1, double &p2, double &p3, double &a, double &b, double &c, double &ha, double &hb, double hc) puts("\twyniki obliczen"); puts("\npola obliczone: "); printf("\npole z form Hausbrandta : %.3f",p1); printf("\npole z metody wyznacznikowej : %.3f",p2); printf("\npole na podstawie bokow wg wzoru Herona : %.3f",p3); puts("\nboki obliczone ze wspolrzednych\n"); printf("a = %.3f b = %.3f c = %.3f ", a, b, c); puts("obliczone wysokosci a, b, c: "); printf("ha = %.3f hb = %.3f hc = %.3f ", ha, hb, hc); puts("\nnacisnij Enter "); // Wydruk do pliku // void WydrPlik() void wydrplik(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3, double &p1, double &p2, double &p3, double &a, double &b, double &c, double &ha, double &hb, double &hc) FILE *f; char nazwapliku[20], obl[20]; puts("wydruk wynikow do pliku"); printf("\npodaj nazwe pliku wynikow (do 8 znakow, np. w1.txt) : "); gets(nazwapliku); printf("\nnazwisko obliczajacego: "); gets(obl); f=fopen(nazwapliku,"a"); // otwarcie pliku do dopisywania
if (f==null) puts("nie mozna otworzyc pliku"); exit(1); fprintf(f,"\t\tprogram PTxy.cpp\n"); fprintf(f,"\nobliczenie pola trojkata ze wspolrzednych punktow\n"); fprintf(f,"\ndane: \n"); fprintf(f,"a(%.3f, %.3f)\nB(%.3f, %.3f)\nC(%.3f, %.3f)\n", x1,y1,x2,y2,x3,y3); fprintf(f,"\n\twyniki obliczen"); fprintf(f,"\npola obliczone: "); fprintf(f,"\npole z form Hausbrandta : %.3f",p1); fprintf(f,"\npole z metody wyznacznikowej : %.3f",p2); fprintf(f,"\npole na podstawie bokow wg wzoru Herona : %.3f\n",p3); fprintf(f,"\nboki obliczone ze wspolrzednych\n"); fprintf(f,"a = %.3f b = %.3f c = %.3f \n", a, b, c); fprintf(f,"\nobliczone wysokosci a, b, c: "); fprintf(f,"\nha = %.3f hb = %.3f hc = %.3f ", ha, hb, hc); fprintf(f,"\n\nobliczyl: %s ", obl); // getdate(&d); // fprintf(f," Data: %d-%d-%d\n\n", d.da_day, d.da_mon, d.da_year); fprintf(f,"\n\n"); fclose(f); // zamkniecie piku