Informatica Generale Marzia Buscemi buscemidi unipi it Ricevimento
Informatica Generale Marzia Buscemi buscemi@di. unipi. it Ricevimento: Giovedì ore 16. 00 -18. 00, Dipartimento di Informatica, stanza 306 -PS o per posta elettronica Pagina web del corso: http: / /www. di. unipi. it/~buscemi/IG 07. htm (sommario delle lezioni in fondo alla pagina) 1
Nella scorsa lezione abbiamo visto n esempi di algoritmi per risolvere problemi (numerici e non numerici) n come dividere un problema in sottoproblemi e quindi trovare un algoritmi componendo sotto-algoritmi n. . . usando generalmente gli array 2
Oggi. . n Completeremo l’argomento della scorsa lezione trattando un’altra struttura dati: i record n Vedremo due diversi paradigmi di programmazione (imperativa, orientata agli oggetti) n Parleremo di ipertesti e vedremo un linguaggio ipertestuale (l’HTML) 3
Record 1 n Gli array sono sequenze di valori dello stesso tipo: interi, reali … n caratteri (‘a’, ’b’, …) n sequenze di caratteri (dette stringhe, ”gatto ”, ”oggi piove !” …) n n I record sono aggregati di variabili di tipo diverso e permettono di definire nuovi tipi 4
Record 2 n A cosa possono servire…. . . n A rappresentare le schede della biblioteca: stringa Nome Autore stringa Cognome Autore Titolo Scaffale Posizione stringa intero … altre informazioni …. . Campi del record 5
Record 3 n Il tipo record scheda espresso in linguaggio C struct scheda { char nome[100]; //stringa di al più //100 caratteri char cognome[100]; char titolo[300]; int scaffale; int posizione; } ; 6
Record 4 //Come dichiaro che voglio //una variabile di tipo ‘scheda’ struct scheda nuovo_libro; // come assegno valori ai diversi campi nuovo_libro. nome =”Jorge"; nuovo_libro. cognome =”Amado"; nuovo_libro. titolo =”Dona Flor e i suoi due mariti"; nuovo_libro. scaffale =8; nuovo_libro. posizione =356; 7
Record 5 n Si possono definire array di record n questo può servire, ad esempio a definire l’insieme delle schede di una biblioteca: struct scheda archivio[100000] n possiamo quindi formalizzare un semplice algoritmo per la ricerca in uno schedario Importante: archivio[2] è il record con indice 2 dell’array archivio[100000], mentre archivio[2]. titolo è il campo titolo del libro che corrisponde al record archivio[2]. 8
Esempio: ricerca in un archivio n La biblioteca n Libri disposti sugli scaffali n La posizione di ogni libro è fissata dalle due coordinate (S, P) dove n n n S è il numero dello scaffale dove si trova il libro P è la posizione all’interno dello scaffale La biblioteca ha uno schedario con una scheda per ogni libro. Ogni scheda contiene, nell’ordine: n n n cognome e nome dell’autore titolo del libro numero scaffale (S) e posizione nello scaffale (P) 9
Esempio: ricerca in un archivio 2 n La biblioteca (cont. ) n Le schede sono ordinate in ordine alfabetico del campo autore n Problema: Vogliamo specificare un algoritmo che spieghi all’utente della biblioteca come trovare un libro cercato supponendo di sapere : Autore e Titolo 10
Esempio: ricerca in un archivio 3 n Un primo algoritmo per il prestito: 1. Decidi il libro da richiedere 2. Cerca la scheda nello schedario 3. Trascrivi la posizione (S, P) 4. Accedi alla posizione (S, P) 5. Preleva il libro e compila la scheda di prestito n Le operazioni elementari in questo caso sono piuttosto complesse… 11
Esempio: ricerca in un archivio 4 n … e se non so come si effettua la ricerca nello schedario ? Tutte le operazioni specificate devono essere ‘elementari’ per chi esegue l’algoritmo. n Se non lo sono è possibile spiegarle a parte per mezzo di un sotto-algoritmo n 12
Esempio: ricerca in un archivio 5 n Un sotto-algoritmo per cercare nello schedario : 1. Apri il classificatore 2. Prendi la prima scheda 3. Confronta il campo autore e titolo con quelli cercati 4. Se sono uguali, allora la ricerca è terminata, altrimenti prendi la scheda successiva e vai al passo 3 5. Se le schede sono esaurite, allora il libro cercato non esiste. 13
Input : struct scheda archivio Ricerca scheda (ricerca) Inizio Leggi Nome, Cognome e Titolo del libro cercato Strutture dati: struct scheda archivio // l’array di schede I=0 Si No I < 100000 ? Fine archivio[I]. nome = Nome archivio[I]. cognome = Cognome archivio[I]. titolo = Titolo ? Si No I=I+1 Fine Non l’ho trovata! Output : la scheda cercata e un valore (si/no) che dice se c’è L’ho trovata! 14
Esercizi proposti n Dare il diagramma per il sottoalgoritmo stampa_Na n Trovare un algoritmo (e fornire il diagramma di flusso) per i seguenti problemi : n trovare la somma dei primi K numeri (K letto in input) n trovare la media di una sequenza di numeri positivi (la sequenza viene letta dall’esterno e si interrompe al primo numero negativo letto) n trovare il max dei numeri posti sulla diagonale di una matrice M*M n Date in input N schede di un archivio (vedi esempio), stampare il titolo e la collocazione di tutte le schede che hanno il campo autore “Umberto Eco”. 15
Paradigmi di programmazione n Programmazione imperativa (es. Linguaggio C) n Programmazione dichiarativa (funzionale, logica; es. ML, Lisp, Prolog) n Programmazione orientata agli oggetti (Java) 16
La programmazione imperativa n Obiettivo: efficienza nella progettazione e scrittura dell’algoritmo n Caratteristiche: attinenza al modello architetturale di Von Neumann n è conforme ai principi della programmazione strutturata (usa strutture di controllo) n ma permette di manipolare i dati facendo riferimento alla struttura fisica del calcolatore (le istruzioni sono assegnamenti da dare alle locazioni di memoria) n 17
La programmazione imperativa. Esempio: funzione max in C 1 Inizio Leggi x e y d=x-y Si d>0? No Scrivi ‘max è y’ Scrivi ‘max è x’ Fine 18
La programmazione imperativa. Esempio: funzione max in C 2 main() /* calcola max */ { int x, y, d; //def. Delle variabili scanf ("%d %d”, &x, &y) ; //lettura x, y d = x - y ; if (d > 0) //scrittura risultati printf (”il max è %d”, &x) ; else printf (”il max è %d”, &y) ; return ; //terminazione } questo programma stampa il risultato 19 ma non restituisce nessun valore in output
La programmazione imperativa. Esempio: funzione max_N in C 1 main() /* calcola max_N */ { int m, i, a, b; i = 2 ; scanf ("%d %d”, &a, &b); m = max(a, b); while (i < N) { scanf ("%d ”, &a) ; m = max(a, m); } printf (”il max è %d”, &m) ; return ; } 20
La programmazione imperativa. Esempio: funzione max_N in C 2 int max(int x, int y) /* sottoprogramma che calcola max */ { int d; d = x - y ; if (d > 0) return x; else return y; notare che questo programma } è una variante del programma visto nella penultima slide che: • prende in input x e y, piuttosto che leggerli da tastiera • restitusce in output il risultato, piuttosto che stamparlo 21
Leggi N Inizio Leggi i primi due numeri x 1 e x 2 e memorizzali nelle variabili a e b m = max(a, b) Si I<N? I=I+1 Leggi il nuovo numero in a m = max(a, m) I=2 No Scrivi ‘max è m’ Fine DF per il problema del massimo di N numeri Supponiamo N almeno 2 22
La programmazione imperativa. Esempio: funzione ordina_Na in C main() /* calcola max_N */ { int m, i, t, X[N], N, lung; leggi_Na (N, X) ; m = X[0]; lung = N ; while (N > 1) { max_Na(X, N, &m, &i) ; t = X[N]; X[N] = X[i] ; X[i] = t ; N = N - 1 ; } stampa_Na (X, lung) ; return ; } 23
La programmazione orientata agli oggetti Enfasi: semplicità di programmazione e riuso di sottoprogrammi esistenti (modularità) Concetti base: n classe: entità astratta caratterizzata da un insieme di proprietà che definiscono sia le strutture dati della classe (attributi) sia le sue funzionalità (metodi) n oggetti: istanze delle classi descritte da valori associati alle diverse proprietà definite per la classe n Un programma in POO è costituito da oggetti che interagiscono tra loro n La POO è particolarmente adatta per 24 programmare interfacce grafiche
La programmazione orientata agli oggetti. Esempio in Java 1 n Java è un linguaggio di programmazione OO. Java fornisce moltissime classi raccolte in packages. n Es. consideriamo la classe java. awt. Rectangle che definisce degli oggetti che rappresentano rettangoli. Ogni rettangolo (istanza della classe) ha quattro variabili, che rappresentano la dimensione del rettangolo (height e width) e la posizione nel piano del suo vertice superiore sinistro (x e y). 25
La programmazione orientata agli oggetti. Esempio in Java 2 Es. Consideriamo tre rettangoli, ognuno rappresentato da una scatola avente in alto il nome della classe, e sotto le variabili. Rappresentazione grafica dei tre oggetti 26
La programmazione orientata agli oggetti. Esempio in Java 3 Vogliamo scrivere un programma che: • Crea un rettangolo di coordinate x = 5 e y = 10 e dimensioni height = 20 e width = 30; • Stampa lo stato del rettangolo; • Sposta il rettangolo di 15 unità lungo l'asse x e di 25 lungo l'asse y; • Stampa il nuovo stato del rettangolo. 27
La programmazione orientata agli oggetti. Esempio in Java 4 n Consultando la documentazione della classe Rectangle vediamo come costruire un rettangolo con i valori desiderati per le variabili, e che esiste un metodo d'istanza translate. Il programma risultante è il seguente: import java. awt. Rectangle; public class Move. Rectangle { public static void main(String[] args) { Rectangle rect; rect = new Rectangle(5, 10, 20, 30); System. out. println(rect); rect. translate(15, 25); System. out. println(rect); } 28
La programmazione orientata agli oggetti. Esempio in Java 5 Vediamo questo semplice esempio in dettaglio: 1. Dichiariamo di voler usare la classe Rectangle del package java. awt: import java. awt. Rectangle; . . . 2. Dichiariamo una variabile rect di tipo Rectangle e le assegnamo un nuovo oggetto con i valori desiderati per le variabili d'istanza: nome del. . . programma public class Move. Rectangle { public static void main(String[] args) { tipo dell’input crea un Rectangle rect; rect = new Rectangle(5, 10, 20, 30); nuovo. . . oggetto 3. Stampiamo lo stato del rettangolo: . . . System. out. println(rect); . . . 29
La programmazione orientata agli oggetti. Esempio in Java 6 n Invochiamo il metodo d'istanza translate sull'oggetto rect per spostarlo della quantità voluta: . . . rect. translate(15, 25); . . . n Infine stampiamo lo stato finale: . . . System. out. println(rect); Output: java. awt. Rectangle[x=20, y=35, width=20, height=30] n Importante: per invocare un metodo d'istanza su di un oggetto si scrive <oggetto>. <metodo>(<parametri>) 30
Linguaggi Ipertestuali n Ipertesto: documento la cui consultazione è non lineare, cioè le sue parti (paragrafi, capitoli, etc. ) sono organizzate non semplicemente in successione, ma secondo una struttura più complessa n Ogni parte del documento può contenere dei punti di aggancio (link) che rimandano ad altre parti n Es. ciascuna pagina Web, l’intero World Wide Web (le pagine possono risiedere su siti diversi) n I documenti ipertestuali contengono sia informazione (dati) sia meta-informazione 31 (organizzazione dei dati)
Linguaggi Ipertestuali: HTML 1 n HTML (Hyper Text Mark-up Language) è un linguaggio usato per descrivere ipertesti. n Non è un linguaggio di programmazione, ma un linguaggio di markup, cioè descrive il contenuto (testuale e non) delle pagine Web per mezzo di opportuni “segnaposto”. n Elementi: n sono gli atomi principali di della sintassi di documenti HTML (strutture del linguaggio) n Ogni elemento è racchiuso da segnalini (tag), uno di apertura e uno di chiusura. n Es. <html> <head> <title> </head> Nome del documento </title> <body> Testo visibile </body> </html> 32
Linguaggi Ipertestuali: HTML (2) n All’interno di <body> </body> è possibile inserire mediante tag: n n n n intestazioni di varie dimensioni(<h 1>, <h 2>, etc. ) elementi di testo (paragrafi, linee orizzontali) stili (grassetto, corsivo, etc. ) link ad altre pagine e a immagini liste puntate e numerate tabelle. . . Manuali e esempi on line su HTML: http: //www. w 3 schools. com/html/default. asp 33
Scrivere documenti in HTML n I documenti in HTML possono essere editati come semplici documenti (con estensione. htm o. html) o tramite dei programmi n Nvu è un editor html molto semplice da usare, che permette di creare pagine web senza conoscere il linguaggio html, basta saper formattare le pagine n NVU è open source e gratutito e si può scaricare da: http: //www. nvu. com 34
- Slides: 34