Title: Informatica Generale
1Informatica Generale
Marzia Buscemi buscemi_at_di.unipi.it Riceviment
o 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/IG07.htm (sommari
o delle lezioni in fondo alla pagina)
2Nella scorsa lezione abbiamo visto
- esempi di algoritmi per risolvere problemi
(numerici e non numerici) - come dividere un problema in sotto-problemi e
quindi trovare un algoritmi componendo
sotto-algoritmi - ... usando generalmente gli array
3Oggi..
- Completeremo largomento della scorsa lezione
trattando unaltra struttura dati i record - Vedremo due diversi paradigmi di programmazione
(imperativa, orientata agli oggetti) - Parleremo di ipertesti e vedremo un linguaggio
ipertestuale (lHTML)
4Record 1
- Gli array sono sequenze di valori dello stesso
tipo - interi, reali
- caratteri (a,b, )
- sequenze di caratteri (dette stringhe, gatto ,
oggi piove ! ) - I record sono aggregati di variabili di tipo
diverso e permettono di definire nuovi tipi
5Record 2
- A cosa possono servire...
- A rappresentare le schede della biblioteca
stringa
Nome Autore
stringa
Cognome Autore
Titolo
stringa
Scaffale
intero
Posizione
intero
altre informazioni ..
Campi del record
6Record 3
- Il tipo record scheda espresso in linguaggio C
- struct scheda
- char nome100 //stringa di al più
- //100 caratteri
- char cognome100
- char titolo300
- int scaffale
- int posizione
-
7Record 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
8Record 5
- Si possono definire array di record
- questo può servire, ad esempio a definire
linsieme delle schede di una biblioteca - struct scheda archivio100000
- possiamo quindi formalizzare un semplice
algoritmo per la ricerca in uno schedario - Importante archivio2 è il record con indice 2
dellarray archivio100000, mentre
archivio2.titolo è il campo titolo del libro
che corrisponde al record archivio2.
9Esempio ricerca in un archivio
- La biblioteca
- Libri disposti sugli scaffali
- La posizione di ogni libro è fissata dalle due
coordinate (S,P) dove - S è il numero dello scaffale dove si trova il
libro - P è la posizione allinterno dello scaffale
- La biblioteca ha uno schedario con una scheda per
ogni libro. Ogni scheda contiene, nellordine - cognome e nome dellautore
- titolo del libro
- numero scaffale (S) e posizione nello scaffale (P)
10Esempio ricerca in un archivio 2
- La biblioteca (cont.)
- Le schede sono ordinate in ordine alfabetico del
campo autore - Problema
- Vogliamo specificare un algoritmo che spieghi
allutente della biblioteca come trovare un libro
cercato supponendo di sapere Autore e Titolo
11Esempio ricerca in un archivio 3
- 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 - Le operazioni elementari in questo caso sono
piuttosto complesse
12Esempio ricerca in un archivio 4
- e se non so come si effettua la ricerca nello
schedario ? - Tutte le operazioni specificate devono essere
elementari per chi esegue lalgoritmo. - Se non lo sono è possibile spiegarle a parte per
mezzo di un sotto-algoritmo
13Esempio ricerca in un archivio 5
- 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.
14Input struct scheda archivio
Ricerca scheda (ricerca)
Inizio
Leggi Nome, Cognome e Titolo del libro cercato
Strutture dati struct scheda archivio //
larray di schede
I 0
I lt 100000 ?
Si
No
Fine
Non lho trovata!
archivioI.nome Nome archivioI.cognome
Cognome archivioI.titolo Titolo ?
Output la scheda cercata e un valore (si/no)
che dice se cè
No
I I 1
Fine
Si
Lho trovata!
15Esercizi proposti
- Dare il diagramma per il sottoalgoritmo stampa_Na
- Trovare un algoritmo (e fornire il diagramma di
flusso) per i seguenti problemi - trovare la somma dei primi K numeri (K letto in
input) - trovare la media di una sequenza di numeri
positivi (la sequenza viene letta dallesterno e
si interrompe al primo numero negativo letto) - trovare il max dei numeri posti sulla diagonale
di una matrice MM - 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.
16Paradigmi di programmazione
- Programmazione imperativa (es. Linguaggio C)
- Programmazione dichiarativa (funzionale, logica
es. ML, Lisp, Prolog) - Programmazione orientata agli oggetti (Java)
17La programmazione imperativa
- Obiettivo efficienza nella progettazione e
scrittura dellalgoritmo - Caratteristiche
- attinenza al modello architetturale di Von
Neumann - è conforme ai principi della programmazione
strutturata (usa strutture di controllo) - ma permette di manipolare i dati facendo
riferimento alla struttura fisica del calcolatore
(le istruzioni sono assegnamenti da dare alle
locazioni di memoria)
18La programmazione imperativa.Esempio funzione
max in C 1
Inizio
Leggi x e y
d x - y
No
d gt 0 ?
Si
Scrivi max è y
Scrivi max è x
Fine
19La 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 gt 0) //scrittura risultati
- printf (il max è d, x)
- else
- printf (il max è d, y)
- return //terminazione
questo programma stampa il risultato ma non
restituisce nessun valore in output
20La 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 lt N) scanf ("d , a)
- m max(a,m)
- printf (il max è d, m)
- return
21La 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 gt 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
22Leggi N
I 2
Inizio
Leggi i primi due numeri x1 e x2 e memorizzali
nelle variabili a e b
m max(a,b)
I lt N ?
Si
No
Scrivi max è m
I I 1
DF per il problema del massimo di N numeri
Fine
Leggi il nuovo numero in a
m max(a,m)
Supponiamo N almeno 2
23La programmazione imperativa.Esempio funzione
ordina_Na in C
- main() / calcola max_N /
- int m, i, t, XN, N, lung
- leggi_Na (N, X)
- m X0
- lung N
- while (N gt 1) max_Na(X,N,m,i)
- t XN
- XN Xi
- Xi t
- N N - 1
- stampa_Na (X,lung)
- return
24La programmazione orientata agli oggetti
- Enfasi semplicità di programmazione e riuso di
sottoprogrammi esistenti (modularità) - Concetti base
- classe entità astratta caratterizzata da un
insieme di proprietà che definiscono sia le
strutture dati della classe (attributi) sia le
sue funzionalità (metodi) - oggetti istanze delle classi descritte da valori
associati alle diverse proprietà definite per la
classe - Un programma in POO è costituito da oggetti che
interagiscono tra loro - La POO è particolarmente adatta per programmare
interfacce grafiche
25La programmazione orientata agli oggetti. Esempio
in Java 1
- Java è un linguaggio di programmazione OO. Java
fornisce moltissime classi raccolte in packages. - 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).
26La 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
27La 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.
28La programmazione orientata agli oggetti. Esempio
in Java 4
- 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 MoveRectangle
- 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)
-
-
29La programmazione orientata agli oggetti. Esempio
in Java 5
- Vediamo questo semplice esempio in dettaglio
- Dichiariamo di voler usare la classe Rectangle
del package java.awt - import java.awt.Rectangle
- ...
- Dichiariamo una variabile rect di tipo Rectangle
e le assegnamo un nuovo oggetto con i valori
desiderati per le variabili d'istanza - ... public class MoveRectangle
public static void main(String args)
-
- Rectangle rect
rect new Rectangle(5, 10, 20, 30) - ...
- Stampiamo lo stato del rettangolo
- ...
- System.out.println(rect)
- ...
nome del programma
tipo dellinput
crea un nuovo oggetto
30La programmazione orientata agli oggetti. Esempio
in Java 6
- Invochiamo il metodo d'istanza translate
sull'oggetto rect per spostarlo della quantità
voluta - ...
- rect.translate(15, 25)
- ...
- Infine stampiamo lo stato finale
- ...
- System.out.println(rect)
- Output java.awt.Rectanglex20,y35,width20,heig
ht30 - Importante per invocare un metodo d'istanza su
di un oggetto si scrive ltoggettogt.ltmetodogt(ltparame
trigt)
31Linguaggi Ipertestuali
- 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 - Ogni parte del documento può contenere dei punti
di aggancio (link) che rimandano ad altre parti - Es. ciascuna pagina Web, lintero World Wide Web
(le pagine possono risiedere su siti diversi) - I documenti ipertestuali contengono sia
informazione (dati) sia meta-informazione
(organizzazione dei dati)
32Linguaggi Ipertestuali HTML 1
- HTML (Hyper Text Mark-up Language) è un
linguaggio usato per descrivere ipertesti. - 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. - Elementi
- sono gli atomi principali di della sintassi di
documenti HTML (strutture del linguaggio) - Ogni elemento è racchiuso da segnalini (tag), uno
di apertura e uno di chiusura. - Es. lthtmlgt
- ltheadgt
- lttitlegt Nome del documento lt/titlegt
- lt/headgt
-
- ltbodygt
- Testo visibile lt/bodygt
- lt/bodygt
-
- lt/htmlgt
33Linguaggi Ipertestuali HTML (2)
- Allinterno di ltbodygt lt/bodygt è possibile
inserire mediante tag - intestazioni di varie dimensioni(lth1gt, lth2gt,
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.w3schools.com/html/default.asp
34Scrivere documenti in HTML
- I documenti in HTML possono essere editati come
semplici documenti (con estensione .htm o .html)
o tramite dei programmi - Nvu è un editor html molto semplice da usare, che
permette di creare pagine web senza conoscere il
linguaggio html, basta saper formattare le pagine
- NVU è open source e gratutito e si può scaricare
da - http//www.nvu.com