A 2002. áprilisi informatika feladatok megoldása |
A közöltek csak megoldásvázlatok, esetleg csak végeredmények. A maximális pontszám eléréséhez általában ennél részletesebb megoldás szükséges. A részletes megoldásokat a beküldött dolgozatok alapján a KöMaL-ban folyamatosan közöljük.
I. 22. Egy asztal szélén egymásra helyeztünk N kártyalapot. A feljebb levő lapokat kifelé elcsúsztatjuk úgy, hogy a lapok ne billenjenek le az asztalról.
Készítsünk programot (I22.PAS, ...), amely a kártyák száma alapján kiszámolja, hogy a legfelső kártya jobb széle legfeljebb milyen messze lehet az asztal szélétől. A kártyalapok hossabbik oldalát tekintsük egységnyinek. (10 pont)
Megoldás:
Végezzük el a kísérletet gondolatban. Egy kártya esetén a távolság 1/2, hiszen a kártya a feléig kilóghat az asztal szélén, mivel a tömegközéppontja éppen az asztal szélére kerül, és még nem billen le. Ha alá teszünk egy újabb kártyát úgy, hogy a második kártya vége pont az asztal szélénél van, vagyis még nem lóg ki, akkor észrevehetjük, hogy ki lehet húzni az asztalról. Mégpedig addig, hogy a közös tömegközéppont éppen az asztal szélén legyen. Az előző TKP-t merőlegesen vetítjük az újabb kártyalap végére (egy egység), illetve a közepén van a saját TKP-ja. Így a közös TKP a negyedénél lesz (két egység), azért mert ez a TKP-k tömeggel súlyozott arányban osztja az összekötő szakaszt. A harmadik kártyalap berakásánál a (hármas) közös TKP a kártyalap felét 1:2-höz arányban osztja. És így tovább. Tehát a maximális kilógás távolságára a képlet:
változók n,i:Egész; d:Valós; be: n; d:=0; Ciklus i:=1-től n-ig d:=d+1/i; ciklus vége d:=(d)/2; Ki: d;
I. 23. Egy fa úgy növekszik, hogy az első időegységben egy H hosszúságú törzse nő. A következő időegységben a törzs végéből két X-szer akkora hosszúságú ágat növeszt, szimmetrikusan, egymással ALFA fokos szöget bezárva. A következő időegységben ezek végéből újra X-szer akkora ág nő, és így tovább.
Készítsünk programot (I23.PAS, ...), amely beolvassa H, X, Alfa értékét, valamint az időegységek számát, majd kirajzolja azt a fát, ami az adott időtartam alatt nőtt!
Az alábbi ábrákon X=3/4, ALFA=60.
FA(50,3) FA(50,6) FA(75,11) FA(75,13)
Megoldás:
Rekurzív megoldást adunk a feladatra. Az adatok bekérése után meghívjuk a rekurzív eljárást a következő paraméterekkel: xpos, ypos a grafikus kurzor kezdő pozíciója (kezdetben 320,480), irany amerre kell rajzolni (függőlegesen felfelé, pozitív irányban elforgatva 90°-kal), H a törzs hossza, X a csökkenés aránya, alfa a következő mélységű ágak bezárt szöge, N a mélységszám.Eljárás sz23; Be: H,X,alfa,N; AgRajzolas(320,480,Pi/2,H,X,alfa,N); Eljárás vége;Az AgRajzolas eljárás pedig a következő:
Eljárás AgRajzolas(xpos,ypos,irany,H,X,alfa:Valós;N:Egész);A rekurzív eljárás leállását az N (mélység) csökkentésével biztosítjuk.
Ha N>0 akkorMegrajzoljuk az ágat, vagyis a szakaszt, amely adatai közül a kezdőpont koordinátáit megkapjuk paraméterként, míg a végpont koordinátáit ki tudjuk számolni a hosszból és a bezárt szögből.
PozícióhozUgrás(xpos,ypos); xpos:=xpos+H*cos(irany); ypos:=ypos-H*sin(irany); SzakaszrajzolásPozícióig(xpos,ypos);Rekurzívan rajzoljuk meg a két gyermek ágat, melyek bezárt szöge Pi*alfa/180. Vagyis most ugyanezt az eljárást hívjuk meg mégegyszer, de a mostani x illetve y kezdőkoordinátákkal, és az új irányokkal.
Vagyis az egyiknél az irány az eredeti irány mínusz a bezárt szög fele.
irany:=irany-Pi*alfa/360; AgRajzolas(xpos,ypos,irany,X*H,X,alfa,N-1);Míg a másiknál az irány az eredeti irány plusz a bezárt szög fele, de mivel egy felet már kivontunk, így az egész szöget hozzáadva kapjuk meg a helyes irányt.
irany:=irany+Pi*alfa/180; AgRajzolas(xpos,ypos,irany,X*H,X,alfa,N-1); Elágazás vége; Eljárás vége;
I. 24. A Kukutyin-Piripócs vasútvonalon a két végállomást is beleértve 9 állomás található. Ismerjük a szomszédos állomások közötti menetidőket. Két vonat indul egymással szembe a két végállomásról. A vonatok minden állomáson 1 percet várnak a le- és felszállás miatt. Mivel az állomások között csak egyetlen vágány pár van, akkor is várniuk kell, ha éppen szembe jön vonat. (Ha egyszerre indulnának, akkor a Kukutyinból indulónak van elsőbbsége.)
Készítsünk táblázatot (I24.XLS), amely a menetidők és az elindulási idők (Vastagon keretezett számok változtatása nyomán kiírja az egyes állomásokon az érkezési és az indulási időket! A megoldásban minden időpontot percben kell megadni. (10 pont)
|
Megoldás:
B5=23 Q8=15A kezdő állomásokról való indulás ideje.
J8=K8+J$2Az érkezés mindig az előző állomásról való indulásnál annyival több, mint amennyi időt vesz el az adott szakasz megtétele.
I8=HA(VAGY(J8+1>I5;J8<G5);J8+1;I5)Az indulás mindig egy perccel több, mint az odaérkezés, vagy megegyezik a szemből érkező szerelvény befutási idejével, attól függően, hogy az adott szakaszon közlekedhet-e szabadon a vonat. Ezt a feltételt részletezve vagy akkor mehet tovább, ha már várt egy percet, az ellenvonat meg már beért, vagyis J8+1>I5, vagy akkor, ha az itteni indulás hamarabb megtörténik, mintha a következő állomásról indulna szembe a másik vonat, vagyis J8+1<G5+1. Persze a második esetben egyszerűsíthetünk 1-vel. Így egyszerűbb, illetve nem kell külön lekezelni a C8-as cellát, hiszen B5 adott és nem számolt érték. A5 viszont nullaként viselkedik és így meg fog felelni a feltételnek.
J5=HA(VAGY(I5<=L8;I5+1<>J8);I5+1;J8)Értelemszerűen, a másik vonat indulási ideje hasonlóképpen függ a beérkezési időtől, vagyis a beérkezési idő plusz egy az indulási idő, akkor, ha ez nagyobb (később van), mint a másik beérkezési ideje; vagy ha ez nem nagyobb (korábban van), mint a másik vonat indulása a következő állomásról.