Az Io programozási nyelv
Példaprogramok
Gyakorlás
Feladat 1
Írjunk programot, amely meghatározza az n-edik Fibonacci
számot! Használjunk rekurziót vagy ciklust!
fib := method(n,
for (i, 0, n-1,
if ( i == 0, fibo := list(1) )
if ( i == 1, fibo append(1) )
if ( i > 1, fibo append(fibo at(i-2) + fibo at(i-1)) )
if ( i == n-1, fibo pop println)
)
)
fib(1) //1
fib(4) //3
fib(9) //34
1
3
34
Feladat 2
Egy listához adjunk egy myAverage slotot, mely a lista elemeinek az
átlágat adja vissza. Mi történik, ha üres a lista? Dobjunk
kivételt, ha a lista valamely eleme nem numerikus típusú.
MyList := List clone
MyList myAverage := method(
if (self isEmpty, "List is empty!" println,
try (
self average println
) catch (Exception,
writeln("Cannot compute average of list!")
)
)
)
myList1 := list(1,2,3,4)
myList2 := list()
myList3 := list("kkriszti", 28, 3)
myList1 appendProto(MyList clone)
myList2 appendProto(MyList clone)
myList3 appendProto(MyList clone)
myList1 println
myList1 myAverage
myList2 println
myList2 myAverage
myList3 println
myList3 myAverage
list(1, 2, 3, 4)
2.5
list()
List is empty!
list(kkriszti, 28, 3)
Cannot compute average of list!
Feladat 3
Írjunk prototípust egy 2D-s lista számára! A dim(x, y) metódus
készítsen y db x hosszúságú listát. A set(x, y, value) metódus
állítsa be az y. lista x. elemét value-ra, míg a get(x, y)
metódus kérdezze le ugyanezen elemet.
2DList := List clone
2DList x_dim := -1
2DList y_dim := -1
/*Allocates a list of y lists that are x elements long.*/
2DList dim := method(x, y,
self x_dim := x
self y_dim := y
for (i, 0, y-1,
for (j, 0, x-1,
self append(0)
)
)
)
2DList get := method(x, y,
if (x >= self x_dim or x < 0 or y >= self y_dim or y < 0, "Index out of range!" println,
index := y * self x_dim + x
self at(index, value) println
)
)
2DList set := method(x, y, value,
if (x >= self x_dim or x < 0 or y >= self y_dim or y < 0, "Index out of range!" println,
index := y * self x_dim + x
self atPut(index, value)
)
)
2l := 2DList clone
2l dim(2,3)
2l set(1,2,17); 2l set(0,1,-5); 2l set(2,1,3)
2l println
2l get(0,1)
Index out of range!
list(0, 0, -5, 0, 0, 17)
-5