Ez a programrészlet így jó?
Kezdő programozó vagyok és egy olyan programot próbáltam írni, amely adott négy pontra meghatározza, hogy az alkothat vagy sem négyzetet. A gondom az lenne, hogy nem tudom, hogy minden értékre jól működik vagy sem.
bool negyzet_e(Pont a, Pont b, Pont c, Pont d){
if (egyenlo(a,b) || egyenlo(a,c) || egyenlo(a,d) || egyenlo(b,c) || egyenlo(b,d) || egyenlo(c,d)){return false;}
int t1 = tavolsag(a,b), t2 = tavolsag(a,c), t3 = tavolsag(a,d), t4 = tavolsag(b,c), t5 = tavolsag(b,d);
if (t1 == t4 && t1 != t5 && t1 != t2 && t3 == t1 && t2 == t5){
return true;
}
return false;
}
bool egyenlo(Pont a, Pont b){
if (a.getX() == b.getX() && a.getY() == b.getY()) {return true;}
return false;
}
int tavolsag (Pont a, Pont b){
int x1 = a.getX(); int y1 = a.getY();
int x2 = b.getX(); int y2 = b.getY();
int t = sqrt(pow(x1-x2,2) + pow(y1-y2,2));
return t;
}
Nem jó. Egyrészt fölöslegesen sok számítást végez, másrészt mi van, ha nem sorrendben vannak a pontok? Pl. ha egy négyzet csúcsait úgy kapja a program, hogy A és B valamint A és C az átlósan szemközti csúcspontok, akkor hamis értékkel fog visszatérni, holott lehet belőlük négyzetet alkotni.
Azt kell vizsgálni, hogy minden pontnak kell egy szomszéd, amivel az X és egy másik, amivel az Y koordinátájuk egyezik meg.
"Azt kell vizsgálni, hogy minden pontnak kell egy szomszéd, amivel az X és egy másik, amivel az Y koordinátájuk egyezik meg."
Kivéve, hogy ennek abszolút semmi köze a négyzetséghez.
Egyrészt attól, hogy a szomszédokkal egyezik 1-1 koordináta, attól még nem feltétlenül négyzet másrészt akkor ha nem egyik még lehet négyzet.
Egy infó forrás a sok közül:
Egy másik megközelítés: Minden pontra igaz, hogy a többi három pont közül bármely kettővel alkotott háromszög adott pontbeli szöge 45 fok. (pl. az A pontban az ABC és ACD háromszögben, stb., függetlenül a pontok sorrendjétől. A szögek pl. az oldalak meredekségeiből számíthatók, csak vigyázni kell az előjelekkel.)
Definíció szerint a négyzet minden oldala egyenlő hosszúságú és oldalai derékszöget zárnak be.
A négy pont között hat távolság vehető fel, ezek közül a négy rövidebbnek kell egyenlőnek lenni (ezek az oldalak),illetve a két hosszabbnak (ezek az átlók).
Ezt csinálnám:
1, a hat távolság kiszámolása, tömbbe helyezése
2, a tömb rendezése növekvő sorrendbe
3, az első és a negyedik egyenlőségének vizsgálata - ha az első és a negyedik egyenlő, akkor a sorbarendezettség miatt az első négy elem egyenlő
4, az ötödik és a hatodik távolság egyenlőségének vizsgálata
5, Ha a 3 és 4 feltételek teljesülnek: a négy pont négyzetet alkot, egyébként nem
Az egyelőségek vizsgálatánál a lebegőpontos számábrázolás jellegzetességei miatt nem szabad pontos egyenlőséget (==) vizsgálni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!