Free pascal trapéz kerülete, területe?
Megnézed mely adatok szükségesek a terület, kerület számításához. Ezeknek és az eredménynek is létrehozol egy változót, majd bekéred az adatokat. Bekérés után a megfelelő matematikai műveletet elvégzed, és az eredményt kiírod.
Érthetőbben: HA (fikció) a terület alap*magasság*hosszúság*pi, akkor csinálsz mind a négynek egy változót, majd bekéred őket. Amikor bekéred a számokat, akkor azzal a változónak értéket adsz. Ezek után elvégzed a tényleges műveleteket, ahol az eredmény értéke a műveletekkel lesz egyenlő, végül kiírod hogy az eredmény az eredmény változó értéke.
Írtam egy kis mintát a Wiki alapján: [link]
de az abban sántít, hogy csak kimondottan trapézokra érvényes, ezért be kell vetni egy kis 'elő ellenőrzést'. Ha a két párhuzamos oldal - a, c - egyenlő akkor már az lehet négyzet, téglalap, paralelogramma és az egyenletben az a-c 0-t ad a nevezőben. Fejleszt tovább ha gondolod.
program trapez;
var a_oldal, b_oldal, c_oldal, d_oldal : Integer;
kerulet, terulet, tmp, tmp1 : Real;
begin
Write('Add meg az "a" oldalt: ');
ReadLn(a_oldal);
Write('Add meg az "b" oldalt: ');
ReadLn(b_oldal);
Write('Add meg az "c" oldalt: ');
ReadLn(c_oldal);
Write('Add meg az "d" oldalt: ');
ReadLn(d_oldal);
tmp1 := (a_oldal + c_oldal) / (4 * (a_oldal - c_oldal));
tmp := (a_oldal + b_oldal - c_oldal + d_oldal) *
(a_oldal - b_oldal - c_oldal + d_oldal) *
(a_oldal + b_oldal - c_oldal - d_oldal) *
(-a_oldal + b_oldal + c_oldal + d_oldal);
terulet := Abs(tmp1 * Sqrt(tmp));
kerulet := a_oldal + b_oldal + c_oldal + d_oldal;
WriteLn('Kerulet: ', kerulet:0:2);
WriteLn('Terulet: ', terulet:0:2);
ReadLn;
end.
@SimkoL:
Meg kell mondjam, én egyelőre nem értem az ellenőrzésedet, úgyhogy feltételezem, hogy Kérdezőnek is kínaiul van. Nem ártana, ha egy kissé kifejtenéd emberi nyelven is. Valami probléma amúgy is lehet a programoddal, mert hasraütéssel beírt, de nem túl extrém számokkal többször is kiakasztottam.
Egyébként gyanítom, hogy a tanár csak a Wikipédiában idézett két egyszerű képletre gondolt -- ezeket majd mindjárt lefordítom --, de a feladat annyiban nem tisztességes, hogy a két képlet nehezen kapcsolható össze. Egy változatát megírtam a magasság, a két alap és az egyik szár hosszának megadásával, de erre se mondanám, hogy könnyed bevezetés a nyelv legalapabb alapjainak megértésébe.
Itt a két program. Az oldalak változóit a Wikipédia fentebb linkelt cikke alapján neveztem el, a két képlet is onnan való, csak a programban természetesen másképpen kell leírnod őket.
A kerületszámításból hiányzik egy nagyon fontos elem, hogy a bevitt hosszúságú szakaszokból valóban összeállítható-egy trapéz. Ehhez ugyanis ellenőrizned kéne, hogy van-e két párhuzamos oldala, ez szerintem bonyolultabb feladat a tőled elvárhatónál.
A képlet: a + b + c + d
program trapez_kerulete;
uses crt;
var
a, b, c, d, kerulet : real;
begin
// cím kiírása:
WriteLn('A TRAPEZ KERULETENEK KISZAMITASA');
WriteLn('az oldalak hossza alapján');
WriteLn;
// a kerületszámításhoz szükséges adatok bekérése
Write('Az elso oldal hossza: ');
ReadLn(a);
Write('A masodik oldal hossza: ');
ReadLn(b);
Write('A harmadik oldal hossza: ');
ReadLn(c);
Write('A negyedik oldal hossza: ');
ReadLn(d);
// a kerulet kiszámolása:
kerulet := a + b + c + d;
// az eredmény kiírása
WriteLn('A trapéz kerülete: ', kerulet:5:3);
ReadKey;
end.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
A területszámításban nincs meg a fenti probléma, viszont az így megadott trapéznak nem tudod kiszámolni a kerületét. Ha elsőre nem világos, hogy miért: Először képzelj el egy szokásos trapézt, amelyiknek a rövidebb alapja a hosszabbik fölött van, és elfér a füzetedben. A két szár nyilván csak néhány centi hosszú lesz. Ha viszont a rövidebb alapot ugyanabban a magasságban elcsúsztatod mondjuk 100 méterre, akkor a trapéz területe a képlet alapján semmit sem változik, viszont a szárai több, mint 100 méteresre nőnek, tehát már az egyik hossza is sokszorosan meghaladja az előzőnek a kerületét.
A képlet: (a + c) / 2 * m
program trapez_terulet;
uses crt;
var
a, c, m, terulet : real;
begin
// cím kiírása:
WriteLn('A TRAPEZ TERULETENEK KISZAMITASA');
WriteLn('az alapok és a magasság alapján');
WriteLn;
// a területszámításhoz szükséges adatok bekérése:
Write('Kérem az egyik alap hosszúságát: ');
ReadLn(a);
Write('Kérem a másik alap hosszúságát: ');
ReadLn(c);
Write('Kérem a trapéz magasságát: ');
ReadLn(m);
//A terület kiszámolása:
terulet := (a + c) / 2 * m;
// terület kiírása:
WriteLn('A trapéz területe: ', terulet:5:3);
ReadKey;
end.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Az oldalhosszokból területet számoló hosszabb képletet (amelyet SimkoL is használ) én nem írtam meg, egyébként ugyanaz a gond vele, mint a kerületszámolással, hogy az adatok alapján előbb ellenőrizni kéne az oldalak párhuzamosságát.
Annak ellenére, hogy az órán nem kaptatok rendes magyarázatot, már ezek a nagyon egyszerű programok is túl sok elemet tartalmaznak ahhoz, hogy mindent elmeséljünk. Próbálj az interneten tájékozódni, és csak azokra a dolgokra rákérdezni, amelyeket annak alapján sem értettél meg.
Itt az én kísérletem a puszta oldalhosszok alapján való számolásra:
Nemigen hiszem, hogy ilyesmit várnának el tőled, inkább csak azért tettem fel, hátha SimkoL még jár erre, és optimalizálja...
@SimkoL:
A tisztességes teszteléshez már fáradt vagyok, de úgy tűnik, működőképes. Mint láthatod, még mindig nem teljesen általános, hanem már az adatbekérésnél megkülönbözteti az alapokat és a szárakat. Ha eddig jó, akkor tulajdonképpen az sem ígérkezik nehéz feladatnak, de egyelőre nem volt lelkierőm nekimenni.
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!