Info2/2008tavasz/zh

A MathWikiből
(Változatok közti eltérés)
 
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.
 
* Írjon Ruby-programot ''palindromlehet.rb'' néven, amely beolvassa a bemenet sorait, és kiírja azokat a sorokat, melyekben a betűk átvarálásával 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: rendezze a string karaktereit  az <code>s=s.split('').sort.join</code> hívással. Mintamegoldás:
 
  
 +
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
}
Személyes eszközök