Upload
hoangkhanh
View
224
Download
0
Embed Size (px)
Citation preview
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Laboratorio di Informatica
Gianluca Della VedovaUniv. Milano–Bicocca
http://www.statistica.unimib.it/utenti/dellavedova
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Gianluca Della Vedova
Laboratorio di InformaticaUfficio U7-244http://www.statistica.unimib.it/utenti/dellavedova
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Obiettivi
Metodologie di progettazioneParadigmi di programmazionePerl
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Programma
Un programma è una procedura automaticaper la risoluzione di problemi.Un problema è un insieme (infinito) dipossibili istanze.Risolvere una istanza = fornire una soluzioneRisolvere un problema = fornire unasoluzione per ogni possibile istanza
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Programma
Un programma:riceve in ingresso una istanzaemette in uscita una soluzione.
Programma = funzione dall’insieme delle istanzeall’insieme delle soluzioni possibili.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Terminazione - correttezza
Un programma:termina se, per ogni istanza, la computazionerichiede un numero finito di passi di calcolo(tempo).è corretto se termina e per ogni istanzacalcola una soluzione corretta.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Sintassi - Semantica
Sintassi Semanticaforma della frase significato della frasesequenza di simboli risultato della computazione
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Sistema complesso
Un sistema (programma) complesso è formato da:
varie componentiche interagiscono fra loro attraversointerfacce ben definiteUn sistema interagisce con l’esternoattraverso interfacce (composizione)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Tecniche di progettazione
Top-down = dal generale al particolareBottom-up = dal particolare al generale
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Top-down
Notare che un concetto (complesso) èformato da più concetti (più semplici) legatifra loro.Notare che un concetto (complesso) èformato da più concetti (più semplici)distinti.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Bottom-up
Partire da concetti semplici ed ottenere unconcetto lievemente più complesso.Estendere il linguaggio con nuovefunzionalità.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Principi della progettazione
Semplicità: il disegno deve essere semplice,sia l’implementazione che l’interfaccia.Correttezza: il disegno deve esser corretto intutti i suoi aspetti. Non sono ammessi errori.Completezza: il disegno deve coprire tutti icasi ragionevolmente attesi. La semplicitànon può influenzare troppo la completezza.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Principi della progettazione
Consistenza: il disegno deve essereconsistente, può essere leggermente piùcomplesso o meno completo al fine di evitareincosistenze. La consistenza è importantecome la correttezza.
[Richard Gabriel]
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Programma
Programma sorgente: sequenza di istruzioniin un adeguato linguaggio di programmazione(comprensibile da persone).Programma eseguibile: sequenza di istruzioniin linguaggio macchina, direttamenteeseguibili dal calcolatore (non comprensibileda persone).
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Compilatore
riceve un programma sorgenteemette un programma eseguibilecorrispondente.Non esegue direttamente il programma.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Interprete
riceve un programma sorgentetrasforma una istruzione in un insiemeequivalente di istruzioni in linguaggiomacchina,esegue tali istruzioni una alla voltapoi passa alla istruzione successiva delprogramma sorgente.Non genera un programma eseguibile.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Problema 1
Estrazione del LottoEstrazione di 5 numeri diversi fra loro ecompresi fra 1 e 90
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Problema 2
Valutazione di espressione algebrica confrazioniEsempio: 1
2 + (13 + 2
7) ∗23
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Perl
Perl è:un linguaggio interpretatoun linguaggio strutturato con estensioni adoggettiin grado di gestire nativamente sequenze dicaratteri (stringhe)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Schema di programma
Ogni programma perl inizia con la riga
#!/usr/bin/perl}oppure
#!C:\Perl\bin\perl.exe
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Schema di programma
Ogni programma perl inizia con la riga
#!/usr/bin/perloppure
#!C:\Perl\bin\perl.exe
Anche se è preferibile usare
#!/usr/bin/perl -w
al fine di visualizzare tutti i warning.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Sintassi
Ogni istruzione viene terminata con ;Un blocco di istruzioni è una sequenza diistruzioni racchiusa fra parentesi graffe {}.Un blocco di istruzioni è logicamenteequivalente ad una singola istruzione.Il cancelletto inizia un commento che terminaa fine riga# questo è un commento
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Variabili
Una variabile è un contenitore per un datoOgni variabile viene identificata con il suonome.Il nome di una variabile inizia col dollaro $valore = dato contenutoNome =⇒ valore
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Variabili
Il valore di una variabile può cambiare neltempol valore di una costante non può cambiare neltempoMolte operazioni in un programma sonomodifiche di valori di una variabile$c = 1;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Assegnamenti
L’assegnamento determina il valore di unavariabile ($c = 1;)Un assegnamento ha una parte sinistra(lvalue) ed una parte destra (rvalue)La parte destra può essere una espressionecomposta ($c = $b + 1;)Una variabile può apparire in entrambe leparti ($p = $p+1)Più variabili possono essere il membro sinistrodi un assegnamento ($a,$b)=($c,$d);
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Tipi
Tipo variabile = insieme valoridichiarazione = decidere il tipo della variabile(intero, carattere)La dichiarazione avviene prima dell’uso.Ogni linguaggio ha tipi predefiniti e strumentiper crearne di derivati (stringa comesequenza di caratteri)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Scopo
our $varglobale;
my $varlocale;
Le variabili locali hanno vita (scopo) soloall’interno del blocco in cui sono statidichiaratiSe esterne ad ogni blocco, le variabili localihanno per scopo il file.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Condizioni
condizione: predicato logico da valutarevalore di una condizione: vero (true, 1) ofalso (false, 0)valutazione: determinare il valore di unacondizione in un contesto.g ≥ 10
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Condizioni
Operatori booleani: and, or, notvalutazione pigra di una condizione C1 and C2
Una istruzione condizionale viene eseguitasolo se la condizione ha un certo valore (Ifcondizione then Istruzione1 elseIstruzione2)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Condizioni
Gli operatori di confronto fra interi sono iseguenti: == < > >= <= !=Fra stringhe eq neGli operatori logici sono NOT, AND, OR,denotati con ! && || oppurenot and orOgni condizione viene racchiusa fra parentesitondeFALSO=0, VERO6= 0
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Variabili e tipi
Una variabile può essere di tipo numerico ostringa.Un numero può essere intero, con virgola o innotazione scientificaUna costante stringa viene racchiusa da apici$a=’frase di quattro parole’;La variabile di default è $_
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Incrementi
Esistono vari operatori per incrementare unavariabile$a+=1;
$a++;
++$a;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Assegnamenti speciali
$a*=2;$a/=2;$a––;$a.=’suffisso’;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Input e Output
Per stampare a schermo: print "testo $a\n";Per leggere una riga da tastiera: $a =<STDIN>;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Redirezione
É possibile ricevere i dati da un file:perl programma.pl < dati.txtÉ possibile inviare i dati ad un file:perl programma.pl > risultati.txtperl programma.pl > risultati.txt <dati.txt
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Condizione: if
if (condizione) {blocco 1
} else {blocco 2
}
condizione vera ⇒ si esegue il blocco 1altrimenti si esegue il blocco 2da else in poi è opzionale
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio if
if ($n < 100) {print "$n piccolo";
} else {print "$n grande";
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Forme alternative
print "$n grande" unless ($n < 100);
print "$n piccolo" in ($n < 100);
($n < 100)? print "$n piccolo": print "$n grande";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Array
Un array è una sequenza di variabili scalari,identificate con un indice (numero intero).indice minimo = 0$vettore[0]=4;$vettore[1]=6;
massimo indice = $#vettore
Indici utilizzati 0 ...$#vettore
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Array
Il nome di un array inizia con @Esempio: my @vettore;Gli array implementano funzioni N 7→ insieme$array[$indice]
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Visita sequenziale di array
Leggere un array un elemento alla voltaforeach $elemento (@lista)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Visita sequenziale di array
foreach my $elemento (@lista) {print "$elemento\n";
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Visita sequenziale di array
foreach my $elemento (@lista) {print "$elemento\n";
}print "$elemento\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Subroutine
Funzioni definite nel programmaEstensione del linguaggioIndistinguibili da funzioni native dellinguaggio
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Subroutine
Invocate con dei parametri.Parametri formali o attualiRestituiscono un valoreSubroutine = funzioniPermettono la suddivisione in modulicooperanti
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Subroutine
Distinzione fra implementazione e interfacciasubroutine corretta ⇒ implementazionetrascurabile
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Subroutine
identificate dalla parola chiave subil corpo è racchiuso da parentesi graffegli argomenti passati sono in @_variabili locali alla subroutine devonoessere precedute da my quando vengonousate la prima volta
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Subroutine
nel programma viene invocata con il suonome e gli argomenti fra parentesi tondese non ci sono argomenti si passa la listavuotavalore calcolato = returnErrore Rightarrow return undef;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio sub
#!/usr/bin/perl
$a=<STDIN>;$b=<STDIN>;$p=1;while ($b>0) {
$p=moltiplica($p,$a);$b--;
}print "$p\n";
sub moltiplica {return $_[0]*$_[1];
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Iterazione
Ripetizione di operazioniSolo se una condizione è vera.whileUn determinato numero di voltefor
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Valutazioni di espressioni
Le espressioni logiche vengono valutate:da sinistra a destrasolo se necessario
espr1 and espr2espr1 or espr2
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Valutazioni di espressioni
ogni istruzione restuisce un valore:vero = niente erroriundef = erroriTest: defined
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio for
for $elem (@array) {print "$elem\n";
}
for ($i=0;$i<=$#array;$i++) {print "$array[$i]\n";
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Iterazione: for
for (pre-istruzioni; condizione; post-istruzioni) {blocco
}
1 Si eseguono le pre-istruzioni;2 Se la condizione è falsa, stop3 Si esegue il blocco;4 Si eseguono le post-istruzioni;5 Se la condizione è vera si torna al punto 3
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio for
for ($i=0;$i<=$#array;$i++) {print "$array[$i]\n";
}
for $i (0..$#array) {print "$array[$i]\n";
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Problema
1 Dato un intero N dire se N è primo.2 Dire se N sia divisibile per p, p ≥ 23 Se N non è primo, allora è divisibile per un
intero p con p ≤√
N
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Soluzione
#!/usr/bin/perl -wmy $n=<STDIN>;my $p=2;while ($p <= sqrt($n)) {
if (($n/$p)==int($n/$p)) {print "N non è primo\n";exit;
}$p++;
}print "N è primo\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Soluzione
#!/usr/bin/perl -wmy $n=<STDIN>;for (my $p=2; $p <= sqrt($n); ++$p) {
if (($n/$p)==int($n/$p)) {print "N non è primo\n";exit;
}}print "N è primo\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
Scrivere un programma Perl con le seguentispecificheInput: due numeri interi a, b > 0Output: il più grande numero intero chedivida esattamente sia a che b
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
#!/usr/bin/perl -wmy ($a,$b);
($a,$b)=<STDIN>;
if ($a<$b) {($b,$a)=($a,$b);
}# a questo punto $a >= $bwhile ($a>$b) {
$a-=$b;if ($a<$b) { ($b,$a)=($a,$b); }
}print "$a\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Tipi di dati astratti
struttura datioperazioni che coinvolgono la struttura dati
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Lista
creare una lista nuova.aggiungere un elemento in fondo (o all’inizio)della listarimuovere il primo (o l’ultimo) elemento dellalistadare il valore del primo (o dell’ultimo)elemento della listadire se la lista è vuota
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
Problema: cercare il valore massimo contenuto inun array
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
Problema: cercare il valore massimo contenuto inun array
my $max=0;foreach my $elem (@array) {
if ($elem>$max) {$max=$elem;
}}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Liste
Una lista è un array.@lista@lista=(4,6);Le parentesi costruiscono una lista@lista=qw(4 6);
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Liste
@lista = ( elemento1, elemento2,elemento3);
$#lista
foreach $elemento (@lista)
push @array, @suffisso
push, pop per suffissi,unshift, shift per prefissi
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
Scrivere un programma Perl con le seguentispecificheInput: un numero intero a > 0Output: la sequenza dei numeri primi il cuiprodotto è a
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
#!/usr/bin/perl -wuse strict;my ($a,$d);
for ($a=<STDIN>;$a/2==int($a/2);$a/=2) {print ’2 ’;
}
for ($d=3;$d<=sqrt($a);$d+=2) {for (;$a/$d==int($a/$d);print "$d ", $a/=$d) {}
}print "$a" if ($a>1);print "\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Valutazioni di espressioni
#!/usr/bin/perl -w
($a=1) && print ’$a vale uno’;
($a=1) && print "$a vale uno";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio while
while ($a>0) {print "*";$a--;
}print "\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Iterazione: while
while (condizione) {blocco
}
1 Se la condizione è vera:2 si esegue il blocco;3 si torna al punto 1
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio while
#!/usr/bin/perl -w
($x,$y)=<STDIN>;
while ($y>0) {$x++;$y--;
}print "$x\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Forma alternative
until ($y<=0) {$x++;$y--;
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Programmi = Funzioni
programma: riceve in ingresso dei valori edemette un valorePrecondizioni: valgono prima di unaoperazionePostcondizioni: valgono dopo una operazioneInvarianti: valgono sempreSono tutte asserzioni
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
1. Read(x,y)2. while (y>0)3. x := x+14. y := y-1
5. endwhile6. Write(x)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
1. Read(x,y)2. while (y>0)3. x := x+14. y := y-1
5. endwhile6. Write(x)
Postcond. x=xinizio+yinizio
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
1. Read(x,y)2. while (y>0)3. x := x+14. y := y-1
Inv. x+y=xinizio+yinizio5. endwhile6. Write(x)
Postcond. x=xinizio+yinizio
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esempio
Precond. y>= 01. Read(x,y)2. while (y>0)3. x := x+14. y := y-1
Inv. x+y=xinizio+yinizio5. endwhile6. Write(x)
Postcond. x=xinizio+yinizio
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Hash
Hash=DizionarioGli hash implementano funzioni generiche.Chiave ⇒ CampoNome dizionario inizia con %.%associa.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Hash
%dizionario=( chiave1, campo1, chiave2,campo2);%hash=(chiave1 => campo1,chiave2 => campo2);
$dizionario{chiave} = campo
while ( ($k,$v) = each %dizionario) {print $k => $v\n;
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Hash
keys %dizionario elenco chiavivalues %dizionario elenco campiexists $hash{chiave} esiste la chiave?defined $hash{chiave} è definita lachiave?delete $hash{chiave} cancella l’elemento.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Array Slice
($primo,$secondo) = (@lista)[1,2];
($primo,$ultimo) = (@lista)[1,-1];
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Hash Slice
my @nomi =@daCognomiANomi{’Rossi’, ’Bianchi};
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Librerie
Le librerie vengono incluse con il comandouseuse Getopt::Long;Il comando use serve ad invocare delledirettiveuse strict;
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Substr
substr calcola la sottostringa di lunghezzafissata a partire da una posizione.$substring=substr($testo,5,3);posizione: 5, lunghezza: 3.Indice minimo = 0;$substring=substr($testo,5,1000);$substring=substr($testo,5,-1);substr($testo,5,-1) = ’fine’;indice massimo = -1
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Split - Join
@l=split(/x/,$testo);Divide il testo usando x come separatore$testo=join(’-’,@lista);Fonde gli elementi di @lista usando - perunire
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Index - Rindex
index calcola la posizione più a sinistra delpattern.$pos=index($testo,’a’);rindex calcola la posizione più a destra delpattern.$pos=rindex($testo,’a’);indice minimo = 0
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Espressioni regolari
un carattere auna concatenazione di espressioni regolariabcun insieme di caratteri [abc], [a-c], [^d]espressione regolare = regex
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Pattern matching
Una espressione regolare appare in unastringa?$testo=’stringa’($testo=~/pattern/) è una condizioneverificabile.($testo=~/[a-c]/) è vera($testo=~/[c-f]/) è falsa
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Caratteri speciali
un carattere “jolly” (wildcard) .inizio riga ^fine riga $cifra \dspazio \s
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Modificatori
Le parentesi tonde hanno il significatoabituale di raggruppare una sottoespressioneil backslash \ permette di cercare caratterispeciali ( \., \$)il punto interrogativo vuole dire che ilcarattere (o la sottoespressione)immediatamente precedente può apparire unavolta o non apparire
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Modificatori
il + vuole dire che il carattere (o lasottoespressione) immediatamenteprecedente deve apparire una o più volte.L’asterisco * vuole dire che il carattere (o lasottoespressione) immediatamenteprecedente può apparire un numero arbitrariodii volte (anche zero)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Strategia
La sottostringa del testo che soddisfa il patternviene cercata con una strategia:
ingorda, perchè cerca la sottostringa piùlungasinistrorsa (leftmost) perchè cerca lasottostringa più a sinistra.(abracadabra=~/[bd](ab)?.*[ar]/)bracadabra
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Operatori non ingordi
Per avere una strategia il meno ingorda possibile,aggiungere ? agli operatori.(abracadabra=~/[bd](ab).*?[ar]?/)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Modificatori
Alcune opzioni permettono di ottenere alcunevarianti di pattern matching:
/i: maiuscole=minuscole/x: si possono mettere commenti nel pattern/g: si cercano tutti match
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Operatori
Ricerca: $testo=~/pattern/Ricerca: $testo=~m/pattern/Sostituzione:$testo=~s/origine/destinazione/
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Variabili automatiche
Dopo un’operazione di pattern matching, iltesto che realizza il pattern si trova nellevariabili $1, $2, . . .Le parentesi determinano quale variabile
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Variabili automatiche
Nel pattern si usa \1, \2, . . .Si possono usare variabili.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Restituzione
Il risultato di un’operazione di pattern matching èse assegnato ad uno scalare e la ricerca non èglobale: un valore booleano.se assegnate ad uno scalare e la ricerca èglobale: la sottostringa trovata.se assegnato ad una lista: una listacontenente se è stato trovato il pattern.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
File
I file vengono identificati grazie al nomeI file vengono gestiti tramite un nomesimbolico (file handler)
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Gestione file
open($fh, <<, ’nomefile’);
minore ⇒ lettura, maggiore ⇒ scrittura,»>⇒ appendere.while (<$fh>) {
print STDOUT $_;}while ($line=<$fh>) {
print $line;}
close ($fh);
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
File
Prima di essere utilizzati i file devono essereapertiAll’apertura bisogna specificare la modalità diaccesso (lettura/scrittura)Alcuni file sono già aperti e disponibili:STDIN STDOUT STDERR
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Scrittura su file
Per scrivere su file la sintassi è’:print $fh output;$fh è il file handler del file su cui scrivereoutput è l’insieme dei dati da scrivereSe si omette il file si scrive su standardoutput, quindi...print questo stampa su schermo
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Scrittura su file
Sintassi di output:$variabile stampa il valore di $variabile’’testo con $variabile’’ la variabileviene sostituita dal suo valore’testo con $variabile’ la variabile nonviene sostituita dal suo valore’testo con ’.$variabile utilizza laconcatenazione
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Lettura da file
I file vengono letti una riga alla voltaPer leggere una riga di un file la sintassi è’:$a=<$fh>;L’istruzione sopra assegna alla variabile $a ilcontenuto della prima riga del file.Ogni file viene letto sequenzialmenteQuindi la seconda volta che viene eseguito$a=<$fh>; si legge la seconda riga
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Lettura da file
$a=<$fh>;viene valutato falso se il file è finitowhile($a=<$fh>) {print $a;
}chomp($a); rimuove il carattere diseparazione di riga eventualmente presente
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Ricorsione
Una subroutine invoca se stessa.Calcolo fattoriale n!
0! = 1n! = n(n − 1)! per n ≥ 1
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Fattoriale
#!/usr/bin/perl -w
my $n=<STDIN>;chomp $n;print fattoriale($n)."\n";
sub fattoriale {my $n=shift;return 1 if ($n<2);return $n*fattoriale($n-1);
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Ricorsione
Non sempre efficienteSempre riscrivibile come iterazioneGestendo la pila delle chiamate effettuateTalvolta più semplice della soluzione iterativa
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Calcolo fattoriale
#!/usr/bin/perl -wuse strict;my ($n,$f);$n=<STDIN>;
for (my $f=1;$n>1; $n--) {$f*=$n;
}print "$f\n";
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
I numeri di Fibonacci sono definiti comesegue: Fib(0) = Fib(1) = 1,Fib(n) = Fib(n − 1) + Fib(n − 2) se n ≥ 2.Scrivere un programma Perl con le seguentispecificheInput: un numero intero n > 0Output: l’n-esimo numero di Fibonacci
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
#!/usr/bin/perl -w
use strict;my $n;my $f;
$n=<STDIN>;$f=fib($n);print "$f\n";
sub fib{
my $n;$n=$_[0];
return 1 if ($n<2);return (fib($n-1)+fib($n-2));
}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
Albero binario: una radice, ogni nodo ha 0 o2 figli, ognuno dei quali è un nodo.In ogni nodo viene memorizzato un numero.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Esercizio
Dato un albero binario, i cui nodi sonoetichettati da un intero, si definisce visita inpostordine la sequenza di etichette in cuil’etichetta di un nodo v compare dopo leetichette di tutti i discendenti di v .Determinare una corretta struttura dati perrappresentare un albero binario.Scrivere un programma Perl che calcola lavisita in postordine di un albero binario.
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Ordinare
@ordinato= sort @lista; oppure@ordinato= sort criterio @lista;criterio confronta due elementi
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Ordinare
sub criterio {# $a,$b i due valori# restituire -1,0,1# come ordine fra i due# elementi}
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Ordinare
@ordinato = sort{ $hash{$a} <=> $hash{$b} }keys %hash;
Ordina le chiavi del dizionario secondo i campi
Laboratoriodi
Informatica
GianlucaDella
Vedova
Nozioni dibase
Variabili
Input /Output
Liste
Funzioni
Dizionari
Stringhe
EspressioniRegolari
Operazionisu File
Ordinare
Interfacciarsi con l’OS
Gli apici rovesciati eseguono il comando eassegnano il risultato.system(comando);system attende il risultato di comando