3. VYBAVENÍ
1. Konzole pro přímé zadání kódu
2. Editor
3. Dokumentace (!)
Úvod do programování Přednáška 4
4. ZÁKLADNÍ TYPY A OPERACE
1. Čísla
2. Texty (řetězce)
3. Pole
4. Aritmetické operace
5. Komentáře
6. Proměnné
7. Podmínky
8. Smyčky
Úvod do programování Přednáška 4
9. Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli
proměnil v jakýsi nestvůrný hmyz. Ležel na hřbetě tvrdém jak pancíř, a když trochu
nadzvedl hlavu, uviděl své vyklenuté, hnědé břicho rozdělené obloukovitými výztuhami, na
jehož vrcholu se sotva ještě držela přikrývka a tak tak že úplně nesklouzla dolů. Jeho četné,
vzhledem k ostatnímu objemu žalostně tenké nohy se mu bezmocně komíhaly před očima.
Co se to se mnou stalo? pomyslel si. Nebyl to sen. Jeho pokoj, správný, jen trochu příliš
malý lidský pokoj, spočíval klidně mezi čtyřmi dobře známými stěnami, Nad stolem, na
němž byla rozložena vybalená kolekce vzorků soukenného zboží - Samsa byl obchodní
cestující -, visel obrázek, který si nedávno vystřihl z jednoho ilustrovaného časopisu a
zasadil do pěkného pozlaceného rámu. Představoval dámu, opatřenou kožešinovou čapkou
a kožešinovým boa, jak vzpřímeně sedí a nastavuje divákovi těžký kožešinový rukávník,
v němž se jí ztrácí celé předloktí.
Úvod do programování Přednáška 4
10. text = File.read 'kafka_promena.txt'
puts text # Vypise text
puts text.upcase # Vypise text kapitalkami
puts text.reverse # Vypise text pozpatku
puts text.include? quot;otecquot; # Obsahuje text urcity vyraz?
puts text.include? quot;fenomenologiequot;
Když se Řehoř Samsa
nepokojných snů, shle
proměnil v jakýsi nestv
Práce s textem
Úvod do programování Přednáška 4
11. text = File.read 'kafka_promena.txt'
puts text.length # Pocet vsech znaku v textu
puts text.delete(' ').length # Pocet znaku bez mezer
puts text.split(quot;nquot;).length # Pocet radek
puts text.split(quot;. quot;).length # Pocet vet
puts text.split(/. |? |! /).length # Presnejsi pocet vet
Regularni vyrazy berou v uvahu vety
koncici otaznikem, vykricnikem
puts text.split(' ').length # Pocet slov
Když se Řehoř Samsa
puts text.split(' ').uniq.length # Pocet jedinecnych slov
nepokojných snů, shle
puts text.split(' ').uniq.sort # Seznam jedinecnych slov usporadany
podle abecedy
proměnil v jakýsi nestv
Úvod do programování Přednáška 4
12. text = File.read 'kafka_promena.txt'
puts text.gsub('%ehoquot;', 'Franz') # Zamen v textu 'Rehor' za 'Franz'
puts text.gsub('e', 'a') # Nahradi 'e' za 'a'
puts text.gsub('e', 'a').gsub('í','á'0.gsub('ou', 'ó').gsub('&', 'é').gsub('#',
''a').gsub('u', 'o')
Když se Řehoř Samsa
nepokojných snů, shle
proměnil v jakýsi nestv
Úvod do programování Přednáška 4
14. DOMÁCÍ ÚKOL
text = File.read 'kafka_promena.txt'
Prostudujte si dokumentaci
Spočítejte, kolik normostran má Kafkova Proměna
Úvod do programování Přednáška 4
17. puts quot;Nebudu ve $kole zlobitnquot; * 10
puts quot;Ahojquot; + quot; quot; + quot;Sároquot;
Polymorfie (na příkladě operátorů)
Úvod do programování Přednáška 4
18. a=1
b=2
c=a+b
puts c
name = quot;Duchcovquot;
puts quot;Vítá vás m#sto #{name}quot;
Proměnné
promenne.rb
Úvod do programování Přednáška 4
19. jedna = 1 # Lokalni promenna
$JEDNA = 1 # Globalni promenna
def dve
jedna = 2 # Lokalni promenna uvnitr funkce
$JEDNA = 2
end
puts jedna
# => 1
puts $JEDNA
# => 1
dve
puts jedna
# => 1
puts $JEDNA
# => 2
Proměnné a rozsah platnosti (scope)
Proměnné lokální, globální, tříd, instancí
promenne.rb
Úvod do programování Přednáška 4
20. a = Array.new
a = Array[ 1, 2, 3]
a = [ 1, 2, 3 ]
a = [ 'jedna', 'dve', 'tri' ]
a = %w{jedna dve tri}
a[0]
#=> 'jedna'
Složené datové typy
Úvod do programování Přednáška 4
27. temperature = 25
# temperature = '20° C'
if temperature.to_i < 0 then
puts quot;Vezmi si bundu, $álu a !epici!quot;
else
puts quot;Vezmi si bundu!quot;
end
Podmínky
podminky.rb
Úvod do programování Přednáška 4
28. temperature = 25
# temperature = '20° C'
if temperature.to_i < 0
puts quot;Vezmi si bundu, $álu a !epici!quot;
elsif temperature.to_i > 0 && temperature.to_i < 20
puts quot;Vezmi si bundu!quot;
else
puts quot;Vezmi si tri!ko!quot;
end
Podmínky
podminky.rb
Úvod do programování Přednáška 4
29. temperature = 25
# temperature = '20° C'
case temperature.to_i
when -999..0
puts quot;Vezmi si bundu, $álu a !epici!quot;
when 0..20
puts quot;Vezmi si bundu!quot;
else
puts quot;Vezmi si tri!ko!quot;
end
Podmínky
podminky.rb
Úvod do programování Přednáška 4
30. input = gets.chomp
case input
when quot;kafkaquot;
puts File.open('kafka.txt')
when quot;exitquot;, quot;quitquot;
exit
when /.*posr.*/
puts quot;Ale no tak...quot;
when Fixnum
puts quot;S !ísly tento program nepracuje!quot;
else
puts quot;Nerozumím pquot;íkazu: #{input}quot;
end
Podmínky
podminky.rb
Úvod do programování Přednáška 4
31. temperature = 25
# temperature = '20° C'
puts quot;Vezmi si plavky!quot; if temperature.to_i > 30
puts quot;Pquot;ístup zamítnut!quot; unless user.is_admin?
Podmínky jako modifikátory
podminky.rb
Úvod do programování Přednáška 4
33. 1.upto 10 do |number|
print number.to_s + '...'
end
puts quot;nquot;
x=1
until x > 100
print x
x += 1
end
puts quot;nquot;
[quot;jednaquot;, quot;dvequot;, quot;triquot;].each do |slovo|
puts quot;* quot; + slovo
end
Smyčky a iterátory
smycky.rb
Úvod do programování Přednáška 4
34. require 'net/http'
server = 'www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...
begin
response, data = Net::HTTP.new(server).get('/')
rescue Exception
puts quot;Nemohu se pquot;ipojit na server #{server}quot;
# ...na!teme data ulo(ená na disku...
# data = ...
end
puts data.to_s.scan(
/<div class=quot;art openerquot;><h3><a href=quot;.+quot;>(.*)</a></h3>/).to_s
) if data
Ošetření výjimek (exceptions)
vyjimky.rb
Úvod do programování Přednáška 4
35. input = gets.chomp
puts quot;Prosím? Tady je $patn# sly$et, vy quot;íkáte '#{input}'?quot;
puts quot;Zadejte cenu bez DPH:quot;
input = gets
puts input.to_i + 0.19 * input.to_i
temperature = 20 temperature = '20 ºC'
quot;
Vstup
vstup.rb
Úvod do programování Přednáška 4
36. SQL Injection
name = 'bob'
query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;;
# SELECT * FROM customers WHERE username = 'bob'
name = quot;' OR 1'quot;
query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;;
# SELECT * FROM customers WHERE username = '' OR 1''
Ošetřování všech vstupů „zvenčí“
(typický případ je právě SQL Injection)
Vstup a jeho ošetření
vstup.rb
Úvod do programování Přednáška 4
37. Prostý text? puts text.split(' ').uniq.sort
XML? <words>
<word>a</word>
<word>aby</word>
…
PDF?
Obrázek — graf?
Výstup a jeho formátování
Úvod do programování Přednáška 4
38. text = File.read 'kafka_promena.txt'
Úvod do programování Přednáška 4
39. text = File.read 'kafka_promena.txt'
# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)
words = text.tr('-,();'quot;', '').split(' ')
current_word = words.sort.first
word_counts = {}
word_counts[current_word] = {}
count = 0
words.sort.each do |word|
if current_word == word
count += 1
else
count = 1
current_word = word
end
Když se Řehoř Samsa
word_counts[word] = {:word => word, :count => count}
end
nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot;
nepokojných snů, shle
puts quot;Za!ínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot;
proměnil v jakýsi nestv
word_counts.sort.each do |word|
nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count]
end
puts quot;Nejpou(ívan#j$í slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; v&skyty.quot;
Úvod do programování Přednáška 4
40. text = File.read 'kafka_promena.txt'
# --->)... a co seznam slov podle frekvence pouziti?
puts quot;Seznam nejpou(ívan#j$ích slov v Kafkov# ‚Prom#n#‘:quot;
most_frequent_words = word_counts.values.collect { |word| [word[:count], word
[:word]] }
most_frequent_words.sort.reverse.each_with_index do |word, i|
puts quot;#{i+1}. #{word[1]}ttt(#{word[0]} v&skyt*)quot;
end
Když se Řehoř Samsa
nepokojných snů, shle
proměnil v jakýsi nestv
Úvod do programování Přednáška 4