Úvod do programování 4
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Úvod do programování 4

  • 4,875 views
Uploaded on

Práce s textem; Základní koncepty programování a Ruby; Jednoduchá kvantitativní analýza textu

Práce s textem; Základní koncepty programování a Ruby; Jednoduchá kvantitativní analýza textu

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
4,875
On Slideshare
4,867
From Embeds
8
Number of Embeds
4

Actions

Shares
Downloads
48
Comments
0
Likes
0

Embeds 8

http://localhost:3011 3
http://www.slideshare.net 3
http://www.linkedin.com 1
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Úvod do programování aneb Do nitra stroje PŘEDNÁŠKA Karel Minařík 4
  • 2. 1 Opakování Úvod do programování
  • 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
  • 5. puts 1 + 1 !2 puts quot;1quot; + quot;1quot; ! quot;11quot; číslovka písmeno quot; puts (1 + 1).class puts (quot;1quot; + quot;1quot;).class Datové typy Úvod do programování Přednáška 4
  • 6. Počítač nedělá to, co chceme, aby dělal. Počítač dělá přesně to, co mu řekneme, aby dělal. Úvod do programování Přednáška 4
  • 7. puts 1 + 1 puts quot;1quot; + quot;1quot; puts 2 + 2 * 5 puts (2 + 2) * 5 puts quot;Ahojquot; + quot;Sároquot; puts quot;Ahojquot; + quot; quot; + quot;Sároquot; puts quot;Ahojquot; + 2 (!íslo není quot;et#zec) # puts quot;Ahojquot; + 2 (Tento pquot;íkaz Ruby pquot;esko!í a nebude je provád#t) puts quot;Nebudu ve $kole zlobitnquot; * 10 Aritmetické operace Úvod do programování Přednáška 4
  • 8. 2 Operace s textem Úvod do programování
  • 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
  • 13. # Integer # String # Array 1+1 quot;pokojquot;.upcase [1, 2, 3].length 2*2 quot;pokojquot;.include? [1, 2, 3].last 9/3 quot;pokojquot;.length [1, 2, 3].first 5.times quot;pokojquot;.delete [1, 2, 3].sort 5.upto 10 quot;pokojquot;.split [1, 2, 3].uniq [1, 2, 3].each www.ruby-doc.org/docs/ProgrammingRuby Ú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
  • 15. 3 Základní koncepty Úvod do programování
  • 16. puts quot;Ahojquot; + 2.to_s puts quot;2 (ábyquot;.to_i + 2 Přetypování Ú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
  • 21. 15°C 11°C 8°C 4°C 0°C 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 24:00 1:00 2:00 3:00 4:00 5:00 6:00 7:00 Složené datové typy Úvod do programování Přednáška 4
  • 22. book = Hash.new( :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' ) book1 = { :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' } book2 = { :jmeno => quot;Fernandoquot;, :prijmeni => quot;Pessoaquot;, :nazev => 'Kniha neklidu' } books = [book1, book2] require 'pp' pp books[0] puts books[0][:nazev] Složené datové typy Úvod do programování Přednáška 4
  • 23. Složené datové typy Úvod do programování Přednáška 4
  • 24. police[3][10][:nazev] Složené datové typy Úvod do programování Přednáška 4
  • 25. puts [1, 2, 3] + [4, 5] puts [1, 2, 3].to_s puts [1, 2, 3].to_s * 2 puts [1, 2, 3].to_s.to_i * 2 Polymorfie a přetypování II Úvod do programování Přednáška 4
  • 26. 2.to_s quot;2 (ábyquot;.to_i 1.+(2) File.open Time.now def pozdrav puts quot;Ahoj!quot; end pozdrav def pozdrav(jmeno) # Argument/parametr funkce puts quot;Vítaj, #{jmeno}!quot; end pozdrav('Honza') Metody a funkce metody.rb Ú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
  • 32. Logické (booleovské) operátory Ú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
  • 41. Děkuji! !