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
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"