Lezione del 24/3/2014

Per eseguire gli esempi da un terminale scrivere

ruby script.rb

dove script.rb è il nome dello script da eseguire.

Primi esempio, il classico Hello World

File ex1.1_hello_world.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Primi esempio, il classico Hello World
16puts 'Hello World'

Secondo esempio, assegnazione, somma

File ex1.2_assegnazione_somma.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Secondo esempio, assegnazione, somma
16a = 123
17b = 11
18c = a+b
19puts c

Terzo esempio, concatenazione

File ex1.3_concatenazione.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Terzo esempio, concatenazione
16a = "pippo"
17b = "pluto"
18c = a+b
19puts c

Quarto esempio, istruzioni condizionali

File ex1.4_istruzioni_condizionali.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Quarto esempio, istruzioni condizionali
16
17#
18# Esempio calcolo radici di 
19#  a * x^2 + b * x + c = 0
20#
21a = 1
22b = 2
23c = 3
24#
25# calcolo discriminante
26#
27delta = b^2 - 4 * a * c
28 
29if delta >= 0 then
30  # caso radici reali
31  sdelta = Math.sqrt(delta) 
32  x1r = (-b+sdelta)/(2*a) ;
33  x2r = (-b-sdelta)/(2*a) ;
34  x1i = 0 ;
35  x2i = 0 ;
36else
37  sdelta = Math.sqrt(-delta) 
38  x1r = -b/(2*a) ;
39  x2r = -b/(2*a) ;
40  x1i = sdelta/(2*a) ;
41  x2i = -sdelta/(2*a) ;
42end
43 
44puts "Prima radice:"
45print "Parte reale      = ", x1r, "\n"
46print "Parte imaginaria = ", x1i, "\n"
47 
48puts "Seconda radice:"
49puts "Parte reale      = #{x2r}"
50puts "Parte imaginaria = #{x2i}"

Quinto esempio, stesso del precedente ma con funzione

File ex1.5_funzione_calcolo_radici.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Quinto esempio, come ex1.4.rb ma con funzione
16#
17# Esempio calcolo radici di 
18#  a * x^2 + b * x + c = 0
19#
20def radici_quadratica(a,b,c)
21  #
22  # calcolo discriminante
23  #
24  delta = b^2 - 4 * a * c
25  if delta >= 0 then
26    # caso radici reali
27    sdelta = Math.sqrt(delta) 
28    x1r = (-b+sdelta)/(2*a) ;
29    x2r = (-b-sdelta)/(2*a) ;
30    x1i = 0 ;
31    x2i = 0 ;
32  else
33    sdelta = Math.sqrt(-delta) 
34    x1r = -b/(2*a) ;
35    x2r = -b/(2*a) ;
36    x1i = sdelta/(2*a) ;
37    x2i = -sdelta/(2*a) ;
38  end
39  return [x1r,x1i,x2r,x2i] 
40end
41 
42res = radici_quadratica(1,2,3) 
43 
44puts "Prima radice:"
45print "Parte reale      = ", res[0], "\n"
46print "Parte imaginaria = ", res[1], "\n"
47 
48puts "Seconda radice:"
49puts "Parte reale      = #{res[2]}"
50puts "Parte imaginaria = #{res[3]}"

Sesto esempio, uso del ciclo ``while``

File ex1.6_calcolo_fattoriale.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15#
16# Esempio calcolo fattoriale
17#
18r = 1
19i = 4
20while i > 0 do
21  r = r * i 
22  i = i - 1
23end
24puts r

Settimo esempio, uso dei vettori

File ex1.7_vettori.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Settimo esempio, uso dei vettori
16
17#
18# Esempio trova il massimo
19#
20# inizializza vettore
21a = [1,-2,3,189,-23,2,34,46,343,12] ;
22# preparazione
23l = a.length
24m = a[0]
25i = 1
26while i < l do
27  m = a[i] if m < a[i] 
28  i = i + 1
29end
30puts "Il massimo e`: #{m}"
31puts "Usando metodo Ruby: #{a.max}"

Ottavo esempio, semplice ordinamento con Bubble-Sort

File ex1.8_ordinamento_bubble_sort.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Ottavo esempio, semplice ordinamento con Bubble-Sort
16
17#
18# Esempio ordinamento di un vettore
19#
20# inizializza vettore
21a = [1,-2,3,189,-23,2,34,46,343,12] ;
22# preparazione
23l = a.length
24i = 0
25while i < l-1 do
26  imin = i # candidato minimo=primo elemento del sottovettore
27  j = i+1
28  while j < l do
29    imin = j if a[j] < a[imin]
30    j = j+1
31  end
32  # a[imin] e` minimo del sottovettore da i fino ultimo elemento
33  # scambio a[imin] con a[i]
34  c       = a[i]
35  a[i]    = a[imin]
36  a[imin] = c
37  i       = i+1
38end
39puts "Il vettore ordinato e` #{a}"

Nono esempio, fattoriale in forma ricorsiva

File ex1.9_fattoriale_ricorsivo.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Nono esempio, fattoriale in forma ricorsiva
16
17#
18# Esempio fattoriale (versione ricorsiva)
19#
20 
21# definisco funzione fattoriale
22def fatt(n)
23  if n < 1 then
24    return 1 ;
25  else
26    return n*fatt(n-1) ;
27  end
28end
29 
30n = 10 ;
31puts "Fattoriale #{n} = #{fatt(n)}\n" # uso funziona fattoriale

Decimo esempio, fattoriale in forma ricorsiva con stampe per visualizzare la ricorsione

File ex1.10_fattoriale_ricorsivo_puts.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Decimo esempio, fattoriale in forma ricorsiva con stampe per visualizzare la ricorsione
16
17#
18# Esempio fattoriale (versione ricorsiva)
19# con livello di chiamata
20#
21 
22# definisco funzione fattoriale
23def fatt(n)
24  puts "Entra fatt(#{n})" ;
25  res = 1 ;
26  res = n*fatt(n-1) if n > 1 ;
27  puts "Esce fatt(#{n})" ;
28  return res ;
29end
30 
31n  = 10 ;
32fn = fatt(n) ;
33puts "Fattoriale #{n} = #{fn}\n" # uso funziona fattoriale

Undicesimo esempio, funzione di Ackerman

File ex1.11_funzione_ackerman_ricorsiva.rb

 1#!/usr/bin/env ruby
 2#-------------------------------------------------------------------------#
 3#  Esercitazioni in Laboratorio per il Corso di                           #
 4#  Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014             #
 5#                                                                         #
 6#  Autori:   Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort          #
 7#            Dipartimento di Ingeneria Industriale, Universita` di Trento #
 8#  Sito web: http://www.ing.unitn.it/~bertolaz/                           #
 9#                                                                         #
10#  Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it          #
11#                                                                         #
12#  Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort                    #
13#-------------------------------------------------------------------------#
14
15# Undicesimo esempio, funzione di Ackerman
16
17#
18# Esempio funzione di Ackerman (versione ricorsiva)
19#
20 
21def ackerman(m,n)
22  puts "ackerman(#{m},#{n})" ;
23  if m == 0 then
24   return n+1 ;
25  else
26    if n == 0 then
27      return ackerman(m-1,1) ;
28    else
29      return ackerman(m-1,akerman(m,n-1)) ;
30    end
31  end
32end
33 
34a = ackerman(3,4) ;
35puts "ackerman = #{a}\n"