Corso di IMPIANTI DI ELABORAZIONE

Slides:



Advertisements
Presentazioni simili
Stringhe di caratteri In linguaggio C.
Advertisements

Il linguaggio C Gli operatori e le espressioni C Language
Anno accademico Array e puntatori in C.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Le funzioni.
1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Programmazione: Iterazione Esistono tre tipi di iterazione fondamentali e vedremo la corrispondenza dei relativi diagrammi a blocchi e la loro traduzione.
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella.
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.
Amministrazione di reti di calcolatori - Massimo Bertozzi Shell e scripting.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Dati in rete Appunti.
Process synchronization
Process synchronization
Perl Practical extraction Report Language
© 2007 SEI-Società Editrice Internazionale, Apogeo
Java: concetti e costrutti base
Introduzione al linguaggio C
Progettazione di una base di dati relazionale
Process synchronization
Il linguaggio C Strutture Moreno Marzolla
Universita’ di Milano Bicocca Corso di Basi di Dati 1 in eLearning C
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Process synchronization
Process synchronization
TIPI PRIMITIVI TIPI STRUTTURATI
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Programmazione e Laboratorio di Programmazione
Java World Cicli e Array.
Classe III A A.s – 2012 Programma di Informatica
Corso Java Cicli e Array.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Lucidi della Pof.ssa Pazienza
APPUNTI SUL LINGUAGGIO C
Condizioni decisionali
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Condizioni decisionali
Programmazione e Laboratorio di Programmazione
Lezione Terza Primi passi di programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito Asta Tutor: Ing. Paolo Molinari

(P)ratical (E)xtraction and (R)eport (L)anguage Linguaggio parzialmente compilato e parzialmente interpretato Ottima portabililtà Orientato alla manipolazione delle stringhe (espressioni regolari) e alla formattazione dell’output Orientato agli oggetti Disponibilità (freeware) su rete dell’interprete, di una completa documentazione e di una vasta libreria

STRUTTURA DI UN PROGRAMMA #! /usr/bin/perl -w include BODY functions definitions NON NECESSARIE: dichiarazioni prototipi dichiarazioni variabili e tipi Ma comunque preferibili (use strict)

Esempio: #! /usr/bin/perl print “Come ti chiami?”; $name = <STDIN>; chomp($name); if ($name eq ‘Paolo’) { print “Sei il tutor di Impianti\n”; } else { print “Non ti conosco!!!\n”;

TIPI DI DATI scalar array reference hash (associative array) Minimo controllo Conversioni automatiche Concetto di “no unnecessary limits”

TIPI DI DATI: scalar (Rappresentazione di NUMERI e STRINGHE) Rappresentazione interna solo in virgola mobile a doppia precisione OPERATORI: + - / * % Sequenza di caratteri di 8 bit 2 tipi di valori (LITERAL) ammissibili: ‘stringa’ oppure “stringa” OPERATORI: . x Le variabili si indicano con il prefisso $ Conversione automatica dipendente dal contesto (operando) Interpolazione di scalari in stringhe

Esempio: Print ‘ciao\n’ # visualizza ciao\n print “ciao\n” # visualizza ciao e un newline $str = ‘pippo’; print ‘ciao $str’; # visualizza ciao $str print “ciao $str”; # visualizza ciao pippo $x = 10; $y = --$x; print “risultato = “ . ($x + $y) # visualizza risultato = 19

TIPI DI DATI: array Le variabili si indicano con il prefisso @ LITERAL: lista indicizzata di scalari (6, 7, pippo) (2, $temp) OPERATORI: assegnazione FUNZIONI: push, pop, unshift, shift, reverse, sort, chomp Le variabili si indicano con il prefisso @ Gestione dinamica ed automatica della dimensione.

Esempi di assegnazione: @tmp = ( ); # array vuoto (dimensione 0) @tmp = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); @tmp = (1..10); @tmp = (‘Luca’, ‘Giacomo’, ‘Pino’); @tmp = qw( Luca Giacomo Pino); @tmp1 = @tmp; @tmp1 = (0, @tmp, 11, 12, 13); $len = @temp; # 10 ($len) = @temp; # (10)

Esempi di accesso: @temp = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); $x = $temp[2]; # 3 $x = $temp[99]; # undef $last_index = $#temp; # 9 $x = $temp[-3]; # 8 @temp2 = @temp[2,3]; # Slice, (3, 4) ($a, $b) = ($temp[1], $temp[4]); # $a= 2, $b=4, (2, 4)

Esempi di funzioni: @temp = qw( pippo pluto qui quo); $value = ‘qua’; push(@temp, $value); # (‘pippo’, ‘pluto’, ‘qui’, ‘quo’, ‘qua’) pop(@temp); # (‘pippo’, ‘pluto’, ‘qui’, ‘quo’) unshift(@temp, ‘minnie’); # (‘minnie’, @temp) shift(@temp); # (‘pippo’, ‘pluto’, ‘qui’, ‘quo’) reverse(@temp); # (‘quo’, ‘qui, ‘pluto’, ‘pippo’) @temp= qw(qui pluto quo pippo); sort @temp; # (‘pippo’, ‘pluto’, ‘qui’, ‘quo’)

TIPI DI DATI: hash array associativi simile all’array scalari al posto degli indici non esiste ordinamento fra i suoi elementi array associativi LITERAL: non esiste una rappresentazione dedicata; vengono visti come array FUNZIONI: keys, values, each, delete Le variabili si rappresentano con il prefisso %

Esempi: %anagrafica = (‘nome’ => ‘Mario’, ‘cognome’ => ‘Rossi’, ‘eta’ => 52 ); $nome = $anagrafica{‘nome’}; # Mario $eta = $anagrafica{‘eta’} # 52 @tutto = %anagrafica; # (‘nome’, ‘Mario’, ‘cognome’, ‘Rossi’, ‘eta’, 51) %anagrafica = qw( nome Angelo cognome Branduardi eta 55); @chiavi = keys %anagrafica; # (‘nome’, ‘cognome’, ‘eta’) $numero_chiavi = keys %anagrafica; # in contesto scalare @valori = values %anagrafica; # (‘Angelo’, ‘Branduardi’, 55) delete $anagrafica{‘nome’};

REFERENCE C PERL Costrutti per allocare memoria (malloc, calloc,…) puntatori Sintassi per creare strutture dati anonime reference int a, *p; &a; /* memorizza l’indirizzo di a */ p = &a; /* p punta ad a */ int b = *p; /* b e’ uguale ad a */ $a = ‘oggi’; \$a; # rappresenta l’indirizzo della variabile scalare $a $ar = \$a; # $ar punta a $a $b = $$ar; # $b vale ‘oggi’ Un reference è uno scalare che memorizza un indirizzo di memoria

Esempi di ref. e deref.

Strutture anonime ed annidate Non sono realizzabili esplicitamente (array ed hash contengono solo scalari!) Si crea un puntatore senza partire da variabili già esistenti $ra = []; $rh = {}; Ma i reference sono scalari e puntano a tutti gli altri tipi Uso dei reference per la realizzazione delle strutture annidate

Esempio di strutture annidate: Esempio di strutture annidate: vogliamo memorizzare tutti i fratelli di uno studente. %info = (‘nome’ => ‘Mario Rossi’, ‘eta’ => 21, ‘fratelli => [ {‘nome’ => ‘Lucio Rossi’, ‘eta’ => ‘15’ }, {‘nome’ => ‘Andrea Rossi’, ‘eta’ => ‘7’ } ] ) Il valore associato alla chiave ‘fratelli’ è un reference ad un array; gli elementi dell’array sono a loro volta reference ad hash.

Esempio di strutture annidate: come si costruiscono? La costruzione è implicita con il tipo di assegnazione via via effettuato. %hash1 = (‘nome’=> ‘Lucio Rossi’, ‘eta’, 15); %hash2 = (‘nome’=> ‘Andrea Rossi’, ‘eta’, 7); %info{“fratelli”} = (\%hash1, \%hash2); %info{“nome”} = “Mario Rossi”; %info{“eta”} = 21; Volendo eventualmente una anagrafica di questo tipo per tutti gli studenti, occorrerà definire un array di reference ad anagrafiche come quella appena vista: push(@all_anagraf, \%info)

STRUTTURE DI CONTROLLO if (expr) { … } else { unless (expr) { … } se expr è falsa if (expr1) { … } elsif (expr2) { } else { while (expr) { … } finché è vera, esce non appena è falsa until (expr) { … } for (expr_inz; test; re-init) { … } foreach $t (@array) { … }

Esempio: $count = 0; while(chomp($input = <STDIN>) and $count<10) { if($input eq 'n') next; # riavvia il ciclo, ovvero riparte da while() } $log[$count] = $input; $count++;

$count = 0; while(chomp($a = <STDIN>)) { if($a eq 'r') $a = 'ZZ'; print "redo\n"; redo; } elsif($a eq 'l') print "last\n"; last; elsif($a eq 'n') $count++; print "next\n"; next; $array[$count] = $a; print "array: @array";

%lovers = ( 'Romeo’ =>'Giulietta', 'Otello’ =>'Desdemona', 'Dante' =>'Beatrice'); ama(\%lovers); sub ama { my $rh = shift; foreach $lui (keys %$rh) $lei = $rh->{$lui}; print "$lui ama $lei\n"; }

FUNZIONI sub MediaAritmetica($) { my $ra = shift; # ra è reference ad array my $somma; # per default inizializza a 0 # per tutti gli elementi dell’array foreach $valore (@$ra) { $somma += $valore; } return ($somma/@len_array);