BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
2006/2007. tanév, őszi félév
|
n
sorból és m
oszlopból álló, téglalap
alakú tábla, amelynek a mezőire az (x,y)
koordinátájukkal
hivatkozunk (1≤x
≤n
,
1≤y
≤m
). E tábla altáblájának nevezzük azt
az i
sorból és j
oszlopból álló részét
(0≤i
≤n
,
0≤j
≤m
), amelyet a bal felső mezőjének -
ún. referenciapontjának - a koordinátája azonosít. A tábla és az altáblák
bal felső mezőjének (relatív) koordinátája (1,1).
Ha egy i*j
méretű altábla referenciapontjának a koordinátája
(r,s)
, akkor teljesülniük kell a következő
egyenlőtlenségeknek:
1≤r
≤n
,
1≤s
≤m
,
1≤r
+i
-1≤n
,
1≤s
+j
-1≤m
.
Az 1. ábra egy 5*6-os táblát mutat, a 2. ábra pedig ennek egy olyan 3*2 méretű altábláját, amelynek referenciapontja a tábla (2,3) koordinátájú mezője.
+---+---+---+---+---+---+ |"a"|"b"|"c"|"d"|"e"|"f"| +---+---+---+---+---+---+ |"0"|"1"|"2"|"3"|"4"|"5"| +---+---+---+---+---+---+ |"N"|"M"|"O"|"P"|"Q"|"R"| +---+---+---+---+---+---+ |"."|","|";"|":"|"<"|">"| +---+---+---+---+---+---+ |"q"|"w"|"e"|"r"|"t"|"y"| +---+---+---+---+---+---+ |
+---+---+ |"2"|"3"| +---+---+ |"O"|"P"| +---+---+ |";"|":"| +---+---+ |
|
1. ábra. Egy tábla
(n =5, m =6)
|
2. ábra. Egy (2,3) referenciapontú 3*2 méretű altábla
(i =3, j =2)
|
Mind a táblát, mind az altáblákat sorfolytonosan, listák listájaként ábrázoljuk.
Írjon olyan SML-függvényt altabla
néven, amely kielégíti az alábbi specifikációt:
(* altabla : 'a list list -> (int * int) -> (int * int) -> 'a list list altabla tss (r,s) (i,j) = a 'tss' táblának az az 'i'*'j' méretű altáblája, amelynek referenciapontja a 'tss' tábla '(r,s)' koordinátájú mezője; ha a táblának nincs '(r,s)' mezője vagy '(r,s)' referenciapontú, 'i'*'j' méretű altáblája, ezt a függvény az 'Altabla' kivétellel jelezze *)Megoldásában feltételezheti, hogy a függvényt csak helyes táblára alkalmazzuk, azaz olyan táblára, amelynek minden sora egyforma hosszú.
Segédfüggvényeket definiálhat.
A jobbrekurzív függvényekből generált számítási folyamatok kevesebb tárterületet használnak, mint a nemjobbrekurzív függvényekből generáltak, ezért ajánljuk, hogy lehetőleg jobbrekurzív függvényt definiáljon, ám ez nem kötelező, a pontozásba nem számít bele.
val tss = [["a","b","c","d","e","f"], ["0","1","2","3","4","5"], ["N","M","O","P","Q","R"], [".",",",";",":","<",">"], ["q","w","e","r","t","y"]];Az 1. ábrán látható tábla 2. ábra szerinti altábláját adja eredményül a következő függvényalkalmazás:
altabla tss (2,3) (3,2); > val it = [["2","3"],["O","P"],[";",":"]] : string list listA
tss
tábla (2,3) referenciapontú, 5*2 méretű altáblája nem
állítható elő, ezért
altabla tss (2,3) (5,2); ! Uncaught exception: ! AltablaA
tss
táblának nincs (6,3) mezője, ezért ilyen referenciapontú
altáblája sem állítható elő:
altabla tss (6,3) (3,2); ! Uncaught exception: ! Altabla
A programot az Elektronikus
Tanársegéd segítségével Weben keresztül lehet beadni, a HF
beadás menüpont alatt.
A beadási határidő 2006. november 16., csütörtök, 24:00.
A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatért plusz 1 pont jár.