Utolsó módosítás: 2009. április 23.
Olyan programot kell írnia, amely kiír egy bizonyos háromszögmátrixot, amelynek az elemeit egy rekurzió adja meg.
Az S mátrix, amit ki kell írnia, N sorból és N oszlopból áll. Az első sor első eleme 1, a többi eleme 0. A további sorokban az első elemet úgy kapja, hogy az előző sor első és második elemét összeadja. Az összes többi elemet úgy kapja, hogy veszi a közvetlenül fölötte álló elem kétszeresét, és hozzáadja a fönt jobbra és fönt balra álló két számot.
Például N = 7 esetén a mátrix a következő:
1 0 0 0 0 0 0 1 1 0 0 0 0 0 2 3 1 0 0 0 0 5 9 5 1 0 0 0 14 28 20 7 1 0 0 42 90 75 35 9 1 0 132 297 275 154 54 11 1
A program a standard bemenetről olvassa be az N egész számot (legalább 3 és legfeljebb 20). A kimenetre ki kell írnia a mátrix elemeit, de nem muszáj ezeket szépen oszlopokban egymás alá rendeznie, hanem elválaszthatja csak egy szóközzel is, tehát kiírhatja ezt is.
1 0 0 0 0 0 0 1 1 0 0 0 0 0 2 3 1 0 0 0 0 5 9 5 1 0 0 0 14 28 20 7 1 0 0 42 90 75 35 9 1 0 132 297 275 154 54 11 1
A programot ruby nyelven írja meg.
A bemenetet a standard bemenetről olvassa be, így például ha
a forráskódot a hfa.rb
nevű fájlba mentette el,
és a ruby -w hfa.rb parancs után beüti a 7
számot, majd az entert, akkor a fenti táblázatot írja ki.
Néhány tanács. Mivel minden sort az előző sorból lehet előállítani, és felülről lefele írja ki a sorokat, a programnak nem kell eltárolnia az összes sort, hanem elég csak az előző sor és az új sor elemeit eltárolni.
A bemenetről egy sort a gets()
függvény olvas be,
és ebből az Integer()
függvénnyel kaphat egész számot,
vagyis ha úgy kezdi a programját, hogy meret = Integer(gets())
,
akkor a fenti bemenet esetén a meret változó értéke a 7 szám lesz.
Ha esetleg szépen egymás alá akarja kiírni a számokat,
akkor egy számot a .to_s()
metódussal írjon ki egy új sztringbe,
majd ezt a sztringet az .rjust(p)
metódussal legalább p szélesre
kiegészítheti, így például ha a v
értéke a 8 szám,
akkor a v.to_s.rjust(5)
értéke a " 8"
sztring lesz,
aminek a tartalmát a print függvénnyel kiírathatja.
Arra feltétlenük vigyázzon,
hogy két szám közé mindig kerüljön legalább egy szóköz,
ne folyjanak össze a számok.
Még valami. Érdemes lehet ezt a mátrixot összeszorozni a transzponáltjával, és megnézni, milyen eredmény jön ki.
A megoldást e-mailben küldje el az címre. Az emailben csatolmányként küldje el a megoldáshoz használt forráskódot, és írhat bármilyen megjegyzéseket, amit a megoldással kapcsolatban lényegesnek talál. Az emailben feltétlenül adja meg a nevét, nem szeretnék névtelen házi feladatokat azonosítani. Írja továbbá az emailbe az "info2" szöveget, valamint a feladat rövid nevét, jelen esetben azt, hogy "rekurzió", hogy könnyebben szét tudjam válogatni a feladatokat.
Ha a feladathoz bármilyen kérdése van, vagy elakad a megoldással, akkor keressen meg emailben vagy személyesen, akár a gyakorlaton, akár azon kívül.
A feladatot 2009. április 23-án illetve 24-én tűzom ki. A megoldás határideje ehhez képest két hét, május 8., péntek (aznap még be lehet küldeni).