Info2/2008tavasz/zh
54. sor: | 54. sor: | ||
1. Szimuláljunk 6 kockadobást, és adjuk össze a dobott számokat! | 1. Szimuláljunk 6 kockadobást, és adjuk össze a dobott számokat! | ||
+ | |||
2. Írja át az alábbi kódot úgy, hogy <code>@a<=@b</code> mindig teljesüljön. Ha a hívó olyan helyzetet akarna előidézni, amely megsérti a fenti feltételt, akkor cserélje fel a változók értékét! | 2. Írja át az alábbi kódot úgy, hogy <code>@a<=@b</code> mindig teljesüljön. Ha a hívó olyan helyzetet akarna előidézni, amely megsérti a fenti feltételt, akkor cserélje fel a változók értékét! | ||
class Intervallum | class Intervallum | ||
61. sor: | 62. sor: | ||
end | end | ||
end | end | ||
+ | |||
3. Írjon Ruby-programot ''palindrom.rb'' néven, amely beolvassa a bemenet sorait, és kiírja a palindrom sorokat. Egy string palindrom, ha a megfordítása önmaga. Segítség: beolvasás után, de még összehasonlítás előtt az <code>s.chomp!</code> hívással törölje a soremelést a string végéről. A beolvasás elvégezhető a | 3. Írjon Ruby-programot ''palindrom.rb'' néven, amely beolvassa a bemenet sorait, és kiírja a palindrom sorokat. Egy string palindrom, ha a megfordítása önmaga. Segítség: beolvasás után, de még összehasonlítás előtt az <code>s.chomp!</code> hívással törölje a soremelést a string végéről. A beolvasás elvégezhető a | ||
<code>STDIN.each_line</code> iterátorral. | <code>STDIN.each_line</code> iterátorral. | ||
+ | |||
4. Írjon Ruby-programot ''palindromlehet.rb'' néven, amely beolvassa a bemenet sorait, és kiírja azokat a sorokat, melyekben a betűk átrendezésével palindrom string készíthető. Egy string palindrom, ha a megfordítása önmaga. 1. segítség: beolvasás után, de még összehasonlítás előtt az <code>s.chomp!</code> hívással törölje a soremelést a string végéről. 2. segítség: vágja szét betűkre/rendezze/ragassza össze a sztring karaktereit az <code>s=s.split('').sort.join</code> hívással. | 4. Írjon Ruby-programot ''palindromlehet.rb'' néven, amely beolvassa a bemenet sorait, és kiírja azokat a sorokat, melyekben a betűk átrendezésével palindrom string készíthető. Egy string palindrom, ha a megfordítása önmaga. 1. segítség: beolvasás után, de még összehasonlítás előtt az <code>s.chomp!</code> hívással törölje a soremelést a string végéről. 2. segítség: vágja szét betűkre/rendezze/ragassza össze a sztring karaktereit az <code>s=s.split('').sort.join</code> hívással. | ||
71. sor: | 74. sor: | ||
a = Array.new(6) {rand(6) + 1} | a = Array.new(6) {rand(6) + 1} | ||
a.inject {|s,i| s + i} | a.inject {|s,i| s + i} | ||
+ | |||
2. A feladatban megadott kód eredményeként létrejön egy "a", "b", "a=" és egy "b=" metódus is. Teszteljük le irb-ben: | 2. A feladatban megadott kód eredményeként létrejön egy "a", "b", "a=" és egy "b=" metódus is. Teszteljük le irb-ben: | ||
i=Intervallum.new(2,4) | i=Intervallum.new(2,4) | ||
104. sor: | 108. sor: | ||
end | end | ||
end | end | ||
+ | |||
3. | 3. | ||
STDIN.each_line do |s| | STDIN.each_line do |s| | ||
111. sor: | 116. sor: | ||
end | end | ||
end | end | ||
− | |||
− | |||
+ | 4. Mintamegoldás: | ||
def palindromlehet(s) | def palindromlehet(s) | ||
s=s.chomp.split(//).sort.join | s=s.chomp.split(//).sort.join |
A lap 2008. április 27., 18:44-kori változata
Tartalomjegyzék |
A második ZH
Időpont, hely: április 30 16-17, Ka.26
ZH papíron, használható a 2-oldalas Ruby Quick Ref
A ZH témája objektum-orientált programozás Ruby nyelven.
Mit kell ismerni
if, else, elsif, if kifejezésekben, ?:, unless, case/when/else, === és szerepe a case-ben, while, until, for/in, iterátorok: times, upto, downto, each, map/collect, inject, each_with_index break/next,
Mely beépített metódusokat kell ismerni az egyes osztályokból
- Object
- class (pl. 5.class)
- methods (5.methods)
- Float
- abs + - * < <= == != >= > <=> ** (a <=> az összahasonlítás után -1/0/1 értéket ad vissza)
- Fixnum
- abs + - * < <= == != >= > <=> << >> **
- Bignum
- (semmit)
- Integer
- (semmit)
- String
- + =~ !~ chomp chomp! reverse upcase upcase! downcase downcase! reverse reverse!
- Array
- [] []= + - each size << max min sort sort! include?
- Class
- superclass
- TrueClass
- && || ! == !=
- FalseClass
- && || ! == !=
- NilClass
- == !=
- Hash
- [] []= keys values size delete each_pair
- Regexp
- (semmit)
- Math
- sqrt PI
p, print, puts.
Hogy a fentiek mit csinálnak, annak itt lehet utánanézni: http://www.ruby-doc.org/core/
Mintafeladatok
1. Szimuláljunk 6 kockadobást, és adjuk össze a dobott számokat!
2. Írja át az alábbi kódot úgy, hogy @a<=@b
mindig teljesüljön. Ha a hívó olyan helyzetet akarna előidézni, amely megsérti a fenti feltételt, akkor cserélje fel a változók értékét!
class Intervallum attr_accessor :a, :b def initialize(a, b) @a=a; @b=b end end
3. Írjon Ruby-programot palindrom.rb néven, amely beolvassa a bemenet sorait, és kiírja a palindrom sorokat. Egy string palindrom, ha a megfordítása önmaga. Segítség: beolvasás után, de még összehasonlítás előtt az s.chomp!
hívással törölje a soremelést a string végéről. A beolvasás elvégezhető a
STDIN.each_line
iterátorral.
4. Írjon Ruby-programot palindromlehet.rb néven, amely beolvassa a bemenet sorait, és kiírja azokat a sorokat, melyekben a betűk átrendezésével palindrom string készíthető. Egy string palindrom, ha a megfordítása önmaga. 1. segítség: beolvasás után, de még összehasonlítás előtt az s.chomp!
hívással törölje a soremelést a string végéről. 2. segítség: vágja szét betűkre/rendezze/ragassza össze a sztring karaktereit az s=s.split().sort.join
hívással.
Megoldások
1.
(Array.new(6) {rand(6) + 1}).inject {|s,i| s + i}
vagy
a = Array.new(6) {rand(6) + 1} a.inject {|s,i| s + i}
2. A feladatban megadott kód eredményeként létrejön egy "a", "b", "a=" és egy "b=" metódus is. Teszteljük le irb-ben:
i=Intervallum.new(2,4) i.methods i.a i.a=1 i.a
A feladat megoldása:
class Intervallum attr_reader :a, :b # ide most elég attr_reader def initialize(a, b) if a < b @a=a; @b=b else @a=b; @b=a end end def a=(a) if a <= @b @a=a else @a=@b @b=a end end def b=(b) if @a <= b @b=b else @b=@a @a=b end end end
3.
STDIN.each_line do |s| s.chomp! if s == s.reverse puts s end end
4. Mintamegoldás:
def palindromlehet(s) s=s.chomp.split(//).sort.join # i db karaktert vizsgáltunk meg # a megvizsgált karakterek küzül az utolsó j db azonos i=1; j=1; k=0; while i<s.size if (s[i]==s[i-1]) j+=1 else if (j%2==1) k+=1 end j=1 end i+=1 end if (j%2==1) k+=1 end k<2 end STDIN.each_line { |s| if palindromlehet(s) print s end }