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