Czy może to wyglądać w następujący sposób:
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159
struct point {
int x;
int y;
};
struct trojkat {
struct point A;
struct point B;
struct point C;
};
struct kwadrat {
struct point A;
struct point B;
struct point C;
struct point D;
};
struct prostokat {
struct point A;
struct point B;
struct point C;
struct point D;
};
struct kolo {
struct point A;
struct point B;
};
double odleglosc (struct point A, struct point B) //zdefiniowanie odleglosci
{
double odleglosc;
odleglosc=sqrt(pow((A.x-B.x),2)+pow((A.y-B.y),2));
return odleglosc;
}
int n;
double obwod,pole,r;
main()
{
printf("Co chcesz obliczyc
0 - trojkat
1 - prostokat
2 - kwadrat
3 - kolo
");
scanf("%d",&n); //Wybor odpowiedniej figury
switch(n){
case 0:
printf("Wybrales trojkat
");
struct trojkat troj;
printf("Podaj wspolrzedne punktu A(x,y)
");
scanf("%d %d", &troj.A.x , &troj.A.y);
printf("Podaj wspolrzedne punktu B(a,b)
");
scanf("%d %d", &troj.B.x, &troj.B.y);
printf("Podaj wspolrzedne punktu C(c,d)
");
scanf("%d %d", &troj.C.x , &troj.C.y);
printf("Wybrales nastepujace punkty:
");
printf("A(%d,%d)
",troj.A.x, troj.A.y);
printf("B(%d,%d)
",troj.B.x, troj.B.y);
printf("C(%d,%d)
",troj.C.x, troj.C.y);
obwod= odleglosc(troj.A , troj.B) + odleglosc(troj.A , troj.C) + odleglosc(troj.B , troj.C);
printf("Obwod trojkata wynosi: %.4f
",obwod);
//pole trojkata jako obliczenie odpowiedniego wyznacznika, fabs - wartosc bezwzgledna
pole=0.5*fabs((((troj.B.x-troj.A.x)*(troj.C.y-troj.A.y))-((troj.B.y-troj.A.y)*(troj.C.x-troj.A.x))));
printf("Pole trojkata wynosi: %.4f
",pole);
break;
case 1:
printf("Wybrales prostokat
");
struct prostokat pr;
printf("Podaj wspolrzedne czterech kolejnych punktow prostokata ABCD
");
printf("Podaj wspolrzedne punktu A(x,y)
");
scanf("%d %d", &pr.A.x , &pr.A.y);
printf("Podaj wspolrzedne punktu B(a,b)
");
scanf("%d %d", &pr.B.x , &pr.B.y);
printf("Podaj wspolrzedne punktu C(c,d)
");
scanf("%d %d", &pr.C.x , &pr.C.y);
printf("Podaj wspolrzedne punktu D(e,f)
");
scanf("%d %d", &pr.D.x , &pr.D.y);
printf("Wybrales nastepujace punkty:
");
printf("A(%d,%d)
",pr.A.x, pr.A.y);
printf("B(%d,%d)
",pr.B.x, pr.B.y);
printf("C(%d,%d)
",pr.C.x, pr.C.y);
printf("D(%d,%d)
",pr.D.x, pr.D.y);
pole=((odleglosc(pr.A, pr.B))*(odleglosc(pr.B,pr.C)));
printf("Pole prostokata wynosi: %.4f
",pole);
obwod=2*((odleglosc(pr.A, pr.B))+(odleglosc(pr.B,pr.C)));
printf("Obwod prostokata wynosi: %.4f
",obwod);
break;
case 2:
printf("Wybrales kwadrat
");
struct kwadrat kwad;
printf("Podaj wspolrzedne dwoch kolejnych punktow kwadratu ABCD
");
printf("Podaj wspolrzedne punktu A(x,y)
");
scanf("%d %d", &kwad.A.x , &kwad.A.y);
printf("Podaj wspolrzedne punktu B(a,b)
");
scanf("%d %d", &kwad.B.x , &kwad.B.y);
printf("Wybrales nastepujace punkty:
");
printf("A(%d,%d)
",kwad.A.x, kwad.A.y);
printf("B(%d,%d)
",kwad.B.x, kwad.B.y);
obwod=4*(odleglosc(kwad.A , kwad.B));
printf("Obwod kwadratu wynosi: %.4f",obwod);
pole=pow((odleglosc(kwad.A, kwad.B)),2);
printf("Pole kwadratu wynosi: %.4f",pole);
break;
case 3:
printf("Wybrales kolo
");
struct kolo kol;
printf("Podaj wspolrzedne A(x,y) srodka kola
");
scanf("%d %d",&kol.A.x, &kol.A.y);
printf("Podaj wspolrzedne punktu B(a,b) lezacego na obwodzie kola
");
scanf("%d %d",&kol.B.x, &kol.B.y);
printf("Wybrales nastepujace punkty:
");
printf("A(%d,%d)
",kol.A.x, kol.A.y);
printf("B(%d,%d)
",kol.B.x, kol.B.y);
r=(odleglosc(kol.A, kol.B));
obwod=(2*PI*r);
printf("Obwod kola wynosi: %.4f
",obwod);
pole=PI*(pow(r,2));
printf("Pole kola wynosiu %.4f
",pole);
break;
default:
{
printf("Wybrales liczbe, ktorej nie jest przypisana zadna figura
");
}
break;
}
system("PAUSE");
return 0;
}
wyjaśnienie
1. stwarzam strukturę punktu, następnie za jej pomocą stwarzam struktury innych figur, czyli prostokąta, kwadratu, koła, trójkąta.
W trójkącie potrzebuje 3 punkty czyli 3 struktury punktu
W kole 2 punkty (środek i punkt na obwodzie koła)
W kwadracie wystarczą mi 2 punkty, dzięki nim mogę obliczyć obwód i koło
w prostokącie biorę 4 punkty zakładam, że wybrane współrzędne rzeczywiście dadzą prostokąt
Reszta to odpowiednie opisanie by program działał - wzory na pole obwód, korzystanie ze struktur punktu.
Teraz pytanie. Czy należało właśnie w ten sposób zrobić to zadanie, bo początkowo nie wiedziałem w ogóle jak się za to zabrać, lecz teraz kiedy zrozumiałem co nieco, napisałem kod, lecz nie jestem w 100% pewny czy tak można to zrobić.