Laboratorio - Programmazionediiorio.nws.cs.unibo.it/infogeo1819/pdf/07-Programmazione-PHP.pdf ·...
Transcript of Laboratorio - Programmazionediiorio.nws.cs.unibo.it/infogeo1819/pdf/07-Programmazione-PHP.pdf ·...
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Laboratorio - Programmazione
Angelo Di Iorio
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Progetto
■ L’obiettivo del progetto è realizzare un’applicazione PHP da linea di comando che raccoglie dati sui terremoti avvenuti in Italia dal sito di INGV e mostra a video alcune informazioni e statistiche su questi terremoti
■ Maggiori dettagli nelle prossime lezioni ma intanto una domanda: di cosa abbiamo bisogno?
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Di cosa abbiamo bisogno?
■ Interprete PHP
■ Editor di testi (programmi)
■ Protocollo per raccogliere dati da INGV
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
CodeLite
■ Va bene QUALUNQUE editor di testi ■ Ne prendiamo uno open-source: https://codelite.org/
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
PHP
■ PHP è un linguaggio di scripting server-side progettato per il Web ma general-purpose ■ Noi lo usiamo per programmi command-line ■ http://php.net/
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
In pratica
■ Installiamo PHP e CodeLite (o usate il vostro editor preferito)
■ Scriviamo il nostro primo programma helloworld.php
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Hello World
<?php
echo “Hello World!”;
?>
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Laboratorio di Programmazione (in PHP)
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Algoritmo e Programma
■ Un algoritmo è una sequenza di istruzioni che risolve un dato problema ■ Un programma è un algoritmo espresso in un linguaggio
di programmazione ■ La programmazione è un processo creativo diviso in due fasi: ■ problem solving: individuare un algoritmo che risolve un
dato problema ■ implementazione: tradurre l’algoritmo in un programma
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
PHP
PHP
■ PHP (acronimo ricorsivo per “PHP: Hypertext Preprocessor”, o “Personal Home Page”) è un linguaggio di scripting general-purpose open-source molto utilizzato, specialmente indicato per lo sviluppo Web. ■ PHP può essere usato su tutti i principali sistemi operativi, inclusi Linux, molte varianti di Unix (compresi HP-UX, Solaris e OpenBSD), Microsoft Windows, MacOS X ed è supportato dalla maggior parte dei web server esistenti.
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Nicola Gessa
Installazione e uso
PHP può essere utilizzato in tre ambiti differenti:
■ Server-side scripting: in questo caso si può adottare un modulo per l’estensione del web server (es. file .dll) e usare PHP per creare pagine Web
■ Command line scripting: si installa e utilizza un interprete PHP per l’eseguzione da linea di comando.
■ Applicazioni GUI. Consente di creare e gestire finestre e oggetti grafici utilizzando estensioni.
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Struttura di base, commenti e separatori
u Un programma PHP inizia con i <?php e termina con ?> u Esistono sintassi più compatte e PHP può essere mescolato ad
HTML ma noi non guardiamo questi aspetti
u Le istruzioni devono venire terminate da un simbolo ; u L’interprete esegue sequenzialmente le istruzioni (a meno di
istruzioni di controllo o invocazioni di funzioni) u PHP supporta i commenti in style C e C++
<?php
/***
Il mio primo script PHP
***/
echo “Hello World!”; // stampa
?>
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Variabili
■ Gli identificatori o variabili sono nomi simbolici creati dal programmatore ed associati ad un valore ■ Gli identificatori in PHP iniziano con il simbolo $ ■ Le operazioni di assegnamento associano un valore ad
una variabile ■ Operatore di assegnamento: = ■ Alcune parole chiave o comandi NON si possono usare
come nomi di variabili
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Scrivere un programma PHP che inizializza una variabile $n con un numero (decidete voi quale) e creare le seguenti variabili: ■ $n_3 contiene il triplo del valore di $n ■ $n_quadro contiene il quadrato di $n ■ $pippo contiene il doppio del valore di $n ■ $_resto2 contiene il resto della divisione di $n per 2
■ Nello stesso programma stampare , i valori di tutte le variabili (uno per linea)
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Tipi in PHP
■ Il tipo di una variabile di solito non viene impostato dal programmatore ma deciso a runtime da PHP in base al contesto nel quale la variabile è utilizzata. ■ Per controllare quale sia il tipo e i valori di una certa variabile si usa la funzione var_dump(). ■ PHP supporta 8 tipi primitivi: ■ boolean: true o false ■ integer: <numero intero> ■ float: <numero con la virgola> ■ string: <sequenza di caratteri> ■ array: <valori multipli> ■ object, resource e NULL
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Stringhe in PHP (1)
■ Le stringhe in PHP non pongono limiti nella lunghezza.
■ Si possono definire usando le doppie virgolette. In questo caso PHP interpreta le variabili e i caratteri di escape contenuti nella stringa. echo “stampo la variabile \$var: $var”; ■ Due stringhe speciali (e molto usate): ■ \t : tabulatore ■ \n : newline (va a capo)
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Stringhe in PHP (2)
■ Alcuni operatori di stringa: ■ l’operatore . Concatena due stringhe ■ l’operatore .= concatena ad una variabile la stringa a
destra dell’uguale ■ Il confronto tra stringhe si esegue usando gli operatori ==, !=, >, <, >=, =<
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Scrivere un programma che memorizza tre numeri interi (decidete voi i valori) in altrettante variabili e stampa a video una tabella con la differenza dei numeri a due a due ■ Esempio: se i numeri sono 2, 7, 3 deve stampare
2 7 3 2 0 5 1 7 5 0 4 3 1 -4 0
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Aree
■ Scrivere un programma che memorizza un numero intero in una variabile $n e stampa a video i seguenti messaggi: L’area di un quadrato di lato <n> è <area>
L’area di un cerchio di raggio <n> è <area>
■ Ad esempio, se $n è inizializzato a 4 stampa: L’area di un quadrato di lato 4 è 16
L’area di un cerchio di raggio 4 è 50.24
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Array in PHP (1)
■ PHP fornisce array associativi per memorizzare coppie chiave-valore.
■ La chiave può essere sia un intero che una stringa. ■ Un array può essere creato usando il costrutto array: $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Array in PHP (2)
■ Un elemento di un array può essere di uno qualunque dei tipi PHP ■ E’ possibile quindi creare matrici (array di array)
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
echo $arr["somearray"][6]; // 5
echo $arr["somearray"][13]; // 9
echo $arr["somearray"]["a"]; // 42
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Scrivere un programma PHP che memorizza in una variabile la seguente matrice di interi e la stampa a video in due modi diversi (ordine righe invertito)
2 7 3 2 0 -5 -1 7 5 0 4 3 1 -4 0
3 1 -4 0 7 5 0 4 2 0 -5 -1 2 7 3
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Comandi condizionali
■ I comandi condizionali permettono di effettuare una scelta tra diversi comandi (o blocchi di comandi) alternativi da eseguire ■ la scelta viene fatta calcolando il valore di una espressione booleana, detta condizione
■ Costrutto if.. else (e if.. elseif.. else): if ($a > $b) {echo "a è maggiore di b";} else {echo "a non è maggiore di b";}
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
A. Scrivere un programma PHP che assegna un valore intero ad una variable e stampa a video un messaggio per dire se il numero è pari o dispari
B. Scrivere un programma PHP che inizializza due variabili con due valori interi e stampa a video un messaggio per dire se il primo numero è un multiplo del secondo
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Scrivere un programma che memorizza tre numeri interi in altrettante variabili e un simbolo a scelta tra ‘/’ e ‘-’ e stampa a video una tabella con il rapporto o la differenza (in base al simbolo scelto) dei numeri a due a due ■ Esempio: se i numeri sono 2, 7, 3 e il simbolo ‘-’ deve
stampare 2 7 3
2 0 -5 -1 7 5 0 4 3 1 -4 0
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
A. Scrivere un programma che memorizza tre numeri interi in altrettante variabili e stampa 1 se uno dei tre è divisore degli altri due, 0 altrimenti
B. Scrivere un programma che memorizza tre numeri interi in altrettante variabili e li stampa in maniera ordinata
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Operatori logici
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
A. Scrivere un programma che memorizza tre numeri interi in altrettante variabili e stampa “Tutti dispari o tutti pari” se sono tutti numeri pari o tutti numeri dispari, oppure “Almeno uno diverso” in caso contrario
B. Scrivere un programma che memorizza tre numeri interi in altrettante variabili e stampa “Multipli di 3 senza duplicati” se sono tutti multipli di 3 e tutti diversi tra loro
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Comandi iterativi e cicli ‘while’
■ Un problema molto usuale negli algoritmi/programmi è la ripetizione della stessa operazione (o blocchi di operazioni) tante volte ■ Costrutto while (o do..while) permette di ripetere l’esecuzione di un blocco di comandi (detto corpo del ciclo) ■ La scelta viene fatta valutando un’ espressione booleana, chiamata guardia del ciclo $i = 1;
while ($i <= 10) { echo “ciao!\n”;
$i= $i + 1; }
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esecuzioni e controllo cicli while
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
A. Scrivere un programma PHP che stampa i primi 50 numeri interi separati da uno spazio e in ordine crescente
B. Scrivere un programma PHP che stampa i primi 50 numeri
interi separati da uno spazio ma in ordine decrescente
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
■ Scrivere un programma PHP che stampa i primi 50 numeri interi separati da un tabulatore, in ordine crescente e divisi su più righe, con 5 numeri per riga
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizi
■ Scrivere un programma PHP che stampa i primi 50 numeri interi separati da un tabulatore, in ordine crescente e divisi su più righe, con 5 numeri per riga. ■ Modificare il codice precedente per ottenere il seguente
risultato
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
A. Scrivere un programma PHP che calcola la somma dei primi $n numeri interi positivi ■ $n è memorizzato in una variabile inizializzata con un
valore arbitrario
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
A. Scrivere un programma PHP che calcola il fattoriale di un numero intero positivo $n ■ $n è memorizzato in una variabile inizializzata con un
valore arbitrario
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Cicli ‘for’
■ Anche il costrutto for permette di ripetere (blocchi di) istruzioni ■ Sintassi e semantica diversi dal comando while: for ($i = 1; $i <= 10; $i++)
{
echo $i.” “;
}
Inizializzazione (prima del ciclo)
Guardia (ad ogni iterazione)
Incremento contatore (fine del blocco)
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Cicli ‘for’ e ‘while’
for ($i = 1; $i <= 10; $i++)
{
echo $i.” “;
}
$i = 1;
while ($i <= 10)
{
echo $i.” “;
$i++;
}
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
A. Scrivere un programma PHP che calcola la somma dei primi $n numeri interi positivi ■ $n è memorizzato in una variabile inizializzata con un
valore arbitrario ■ Utilizzare il costrutto for e non while
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Array in PHP■ Gli array (o vettori) sono usati per memorizzare collezioni di dati dello stesso tipo ■ I dati appartenenti all’array sono detti elementi e sono individuabili tramite una chiave ■ PHP fornisce array associativi per memorizzare coppie chiave-valore. ■ La chiave quindi può essere sia un intero che una stringa.
■ Per semplicità noi usiamo solo valori interi (indici) come chiavi ■ Esistono molte funzioni built-in in PHP per elaborare array. Non ne parliamo ma sono qui: http://php.net/manual/it/ref.array.php
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Sintassi ■ Inizializzare vettori di interi: $interi = array(1, 4, 5, 33, 102, 82, 83); $dati = [21, 42, 3, 18, 22];
■ Accesso attraverso chiave numerica (indice): echo $interi[0]; // stampa 1 echo $interi[2]; // stampa 5 echo $dati[3]; // stampa 18 echo $dati[4]; // stampa 22 echo $interi[5]; // cosa stampa? echo $interi[8]; // cosa stampa?
■ Attenzione: il primo elemento ha indice 0 ! ■ Per conoscere le dimensioni di un vettore si possono
usare le funzioni count($a) o sizeof($a)
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esempio
■ Programma PHP che stampa tutti i valori contenuti in un vettore di interi (variabile $dati) separati da un tabulatore
$dati = [13, 5, 25, 6, -3, 19, 982, 13200];
for ($i = 0; $i < count($dati); $i++){
echo $dati[$i]."\t";
}
■ Utile: la funzione var_dump($dati) è utile per stampare il contenuto di una variabile di qualunque tipo, inclusi gli array
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
A. Scrivere un programma PHP che calcola la somma di tutti i valori contenuti in un vettore di interi e stampa a video il risultato ■ Il vettore è memorizzato nella variabile $dati e contiene
valori arbitrari
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esempio
A. Scrivere un programma PHP che conta quanti sono i numeri pari contenuti in un vettore di interi e stampa a video il risultato ■ Il vettore è memorizzato nella variabile $dati e contiene
valori arbitrari
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Array di array ■ Un elemento di un array può essere di uno qualunque dei tipi PHP ■ E’ possibile quindi creare matrici (array di array)
$dati[0] = [1, 22, -3, 15]; $dati[1] = [10, 2, 44, 21]; $dati[2] = [6, 41, 42, 42]; $dati[3] = [66, 33, 1, 50]; echo $dati[1][3]; // stampa 21 echo $dati[2][2]; // stampa 42 echo $dati[3][1]; // stampa 33 echo $dati[3][3]; // stampa 50
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Scrivere un programma PHP che memorizza la matrice di interi mostrata sotto e stampa a video: A. la somma dei valori contenuti nella seconda riga B. la somma dei valori contenuti nella terza colonna
12 3 4 5 18
22 2 5 11 3
4 4 1 13 27
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Partendo dall’array di test disponibile all’indirizzo: http://diiorio.nws.cs.unibo.it/infogeo1819/php/
■ Scrivere il codice PHP per stampare a video, una per riga, tutte le località in cui si sono verificati i terremoti
ALMA MATER STUDIORUM – UNIVERSITA’ DI BOLOGNA
Esercizio
■ Partendo dall’array di test disponibile all’indirizzo: http://diiorio.nws.cs.unibo.it/infogeo1819/php/
■ Scrivere il codice PHP per calcolare la magnitudo minima tra tutti i terremoti registrati