Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 283. feladat (2012. január)

I. 283. A KöMaL két hónappal ezelőtti I. 277. feladatában települések helyét és lakosságszámát a földrajzi koordináták alapján kellett megjeleníteni. Adott ugyanaz a (honlapunkról letölthető) helyforr.dat állomány, amelyben Magyarország településeinek neve (ékezetmentesen), földrajzi koordinátái és lakosainak száma található.

Készítsünk programot i283 néven, amely a képernyőn a felhasználó által megadott koordinátájú terület településeit és azok nevét jeleníti meg adott téglalapban. A településeket ábrázoló pontok töltsék ki a téglalapot a képernyőn, majd annyi településnév jelenjen meg, amely elfér anélkül, hogy a feliratok egymásba érnének. A település nevének elhelyezése csökkenő lélekszám alapján történjen. A neveket lefedő téglalapok bal felső sarka a települések földrajzi koordinátái legyenek. A nevek a településeket ábrázoló pontokat eltakarhatják, de egymást nem. Az a név, amely az előírt sorrend szerint egy másik felíratott kitakarna, vagy az ábrázolt tartományból kinyúlna, az adott felbontás esetén, ne jelenjen meg.

A program a települések földrajzi koordinátáit, a lélekszámot és a település nevét a fenti fájlból olvassa be. A fájl első sora a települések számát (\(\displaystyle n\)), a térkép, azaz az ábrázolás téglalapjának vízszintes (\(\displaystyle dx\)) és függőleges (\(\displaystyle dy\)) méretét (\(\displaystyle 256\le dx,dy\le 1024)\) tartalmazza. Az ezt követő \(\displaystyle n\) darab sorban a települések adatai szerepelnek. A sorok első adata a hosszúsági, a második a szélességi koordinátákat tartalmazza szögperc mértékegységben. A harmadik adat a település lélekszámát adja meg, a negyedik pedig a nevét ékezetmentesen.

Minta:

Beküldendő egy tömörített i283.zip állományban a program forráskódja (i283.pas, i283.cpp, ...), valamint a program rövid dokumentációja (i283.txt, i283.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.

A feladat megoldásához letölthető állomány:   helyforr.dat

(10 pont)

A beküldési határidő 2012. február 10-én LEJÁRT.


Megoldásokról:

A feladat előzményének tekinthetjük az I.277-es, település lélekszám alapján történő térkép és az I.274 legnagyobb szabad téglalap keresési feladatot. Több jó megoldás érkezett. 1-1 pontot vesztett, aki az ábrázolandó tartományhoz a földrajzi koordináták beolvasásánál felirattal nem segítette a felhasználót, illetve a dokumentációban nem írt a megoldás rövid algoritmusáról.

Gema Barnabás 11. osztályos (Veszprém, Lovassy László Gimnázium) leírásából:

Elsőként a programom megnyitja a helyforr.dat fájlt, majd beolvassa belőle az adatokat. A városok adatait eltárolja egy rekord típusú tömbben. Ezután bekéri az ábrázolási téglalap koordinátáit és egy új tömbbe kigyűjti a téglalapba eső városok rekordjait és rendezi őket lakosság szerint csökkenően.

Ezután következik az ábrázolás. A program gyakorlatilag csak egy hasonlósági transzformációt végez el a koordinátákon és településeket ábrázolja egy képponttal. A képpont a település tényleges koordinátájától 2 képponttal északra és 2-vel nyugatra tolódik, hogy tényleges koordinátán kezdődhessen a felirat és a pontot is lehessen látni. A pontok után a feliratok következnek, amiknek kiterjedésének megállapításához a TextWidth és a TextHeight függvényeket használtam fel. Először a program megállapítja, hogy kilógna-e a felirat az ábrázolási téglalapból, és ha nem, akkor azt is ellenőrzi, hogy nem érne-e rá egy másik feliratra. Ehhez létrehoztam egy mátrixot, ami azt tárolja, hogy egy képpont fel lett-e már használva. Ha egy feliratot sikerül kiírni, akkor az lefoglalja a saját területét a mátrixban.

A tömb rendezése a feliratok kiírásához volt szükséges, mivel így a nagyobb lélekszámú települések neve kerül előbb kiírásra.

Mintamegoldásként Beleznay Soma 10. osztályos (Budapest, Fazekas Mihály Fővárosi Gyakorló Gimnázium) tanuló munkáját közöljük: i283.pas

Kucsma Levente István 9. osztályos (Eger, Dobó István Gimnázium) programjának eredménye:


Statisztika:

10 dolgozat érkezett.
10 pontot kapott:Beleznay Soma, Fényes Balázs, Gema Barnabás, Jákli Aida Karolina, Kovács Balázs Marcell, Kucsma Levente István, Szabó Levente.
9 pontot kapott:Antal János Benjamin, Barkaszi Richárd Miklós, Veress Péter.

A KöMaL 2012. januári informatika feladatai