Kráterek (2024. május - idegen nyelv)

Kategória: python - emelt szint

Feladat leírása

Kráterek (2024. május - idegen nyelv) illusztráció

Egy még felderítetlen égitestet először közelített meg egy földi szonda. A szondáról küldött
képeken látható, hogy a légkör nélküli égitest felszínét meteorbecsapódások által létrehozott
kráterek borítják. A szonda feltérképezte a felszín egy részét, és a kráterek elhelyezkedéséről is
adatokat küldött. 

A szonda minden krátert egy körként azonosított, és megadta a kör (azaz kráter)
középpontjának helyét és a kör (azaz a kráter) sugarát. A szonda minden kráternek nevet is
adott úgy, hogy véletlenszerűen választott egy listából, amelyben csillagászok nevei
szerepeltek. Minden kráternek egyedi nevet adott, tehát nincs két azonos nevű kráter. Az adatok
kétféle formátumban állnak rendelkezésre. A felszin_tpont.txt szöveges állományban
a valós számok tizedes ponttal, a felszin_tvesszo.txt állományban pedig
tizedesvesszővel szerepelnek. A feladat megoldásakor a választott programozási környezetnek
megfelelő fájllal dolgozzon! 

A fájl első néhány sora például a következő: 

5.23 2.47 3.86 George Ogden Abell
3.67 2.19 1.13 Robert Henry Dicke
1.15 7.25 2.89 Abu Bakr ibn Tufajl
3.45 2.78 0.35 Stephen Hawking

Egy soron belül az első három valós szám a kráter
középpontjának X és Y koordinátája, valamint a kráter
sugara. Ezt követi egy csillagász neve, vagyis a kráter
elnevezése. Az adatokat egy soron belül egy-egy
tabulátor választja el egymástól. 

Az ábra koordináta-rendszerben mutatja az előbbi
négy kráter elhelyezkedését az égitest felszínén. 

Készítsen programot, amely az egyik megadott
állományt felhasználva az alábbi kérdésekre válaszol! A program forráskódját mentse
kraterek néven! A program megírásakor a bemeneti állományban található, vagy
a felhasználó által megadott adatok helyességét, érvényességét nem kell ellenőriznie,
feltételezheti, hogy azok a leírtaknak megfelelnek. 

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre
a feladat sorszámát (például: 2. feladat)! Ha a felhasználótól kér be adatot, jelenítse meg
a képernyőn, hogy milyen értéket vár! Az ékezetmentes kiírás is elfogadott. A valós számok
kiírásakor tizedes pont és tizedesvessző is használható. 


Részfeladatok

  1. 1. Olvassa be és tárolja el a bemeneti állomány tartalmát! Az állományban legfeljebb 100 kráter adatai szerepelnek. 

  2. 2. Számolja meg, hogy hány kráter található a bemeneti állományban, és írja a képernyőre a kráterek számát! 

  3. 3. Kérje be a felhasználótól egy kráter pontos nevét, majd írja ki a kráter adatait! A kiírás egy teljes mondat legyen, például: „A(z) Stephen Hawking középpontja X=3.45 Y=2.78 sugara R=0.35.”. Ha a név nem szerepel a kráterek nevei között, akkor írja ki: „Nincs ilyen nevű kráter.”.

  4. 4. Vizsgálja meg a szonda által kapott adatokat, és adja meg a legnagyobb sugarú kráter sugarát és névadójának nevét! Amennyiben több legnagyobb kráter van, úgy elég az egyiket megadnia. 

  5. 5. A következő feladatokban szüksége lesz arra, hogy kiszámítsa két kráter középpontjának távolságát. Készítsen függvényt, amely a Pitagorasz-tétel felhasználásával kiszámítja két, koordinátákkal adott pont távolságát! A függvény bemenete a két pont, (x1, y1) és (x2, y2) koordinátái (valós számok), visszaadott értéke a távolságuk (valós szám). A függvény leírása a következő: 

    • a) Függvény tavolsag(x1, y1, x2, y2 : Valós ) : Valós

       tavolsag := Négyzetgyök((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
      Függvény vége

  6. 6. Két kráter nem fedi át egymást, nincs közös részük, ha középpontjaik távolsága nagyobb, mint a két kráter sugarának összege. Kérje be egy kráter nevét, és adja meg azoknak a krátereknek a nevét, amelyekkel a bekért kráternek nincs közös része! A kiírásban szereplő kráterek nevei között egy vessző és egy szóköz legyen az elválasztás! Ha nincs ilyen kráter, akkor nem kell megjelenítenie semmit.  

  7. 7. Egy kráter tartalmaz egy másik krátert, ha a kisebb kráter teljes egészében a nagy kráterben található. Ez körök esetében azt jelenti, hogy a két kör középpontjának távolsága kisebb, mint a nagyobb kör sugarának és a kisebb kör sugarának különbsége. Vizsgálja meg a krátereket, és írja ki azoknak a krátereknek a nevét, amelyek esetében a nagyobb kráter tartalmazza a kisebb krátert! Minden ilyen tartalmazást csak egyszer jelenítsen meg úgy, hogy megadja, hogy melyik kráter tartalmazza a másikat!  

  8. 8. A kráterek adatai alapján számítsa ki, hogy mekkora területűek az egyes kráterek, és készítsen egy terulet.txt szöveges állományt, amely tartalmazza a kráterek nevét és területét! A kör területe T=r^2*𝜋 ahol r a kör sugara, 𝜋 értéke két tizedesjegyre kerekítve 3.14. Az állomány minden egyes sorában egy kráter adatai szerepeljenek: először a kráter területe két tizedesjegyre kerekítve, majd egy tabulátor karakter, majd a kráter neve! 


Mintaképek