Organizzazione del corso Nicola Fanizzi fanizzi@di.uniba.it Stanza: 525 - 5° piano - DIB Laboratorio: Martedì 15-17 Lezione: Mercoledì 10-11 Ricevimento: Martedì 11-13 Sito: www.di.uniba.it /~fanizzi Testi base: A. Guidi & N. Renzoni, Pascal - Guida alla Programmazione, McGraw-Hill Fiorentino et al., Pascal - Laboratorio di Programmazione, McGraw-Hill Compilatore base: Dev-Pascal www.bloodshed.net GNU Pascal (ISO) Free Pascal
Introduzione: Struttura dei Programmi Pascal Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari
Struttura programmi Pascal: primo programma program paese (output); begin write('Tre'); write(' casettine'); write(' dai tetti'); write(' aguzzi'); end. corpo del programma opzionale
Struttura programmi Pascal: Schema program <nome-programma> (output); begin <istruzione 1>; <istruzione 2>; <istruzione 3>; . . . <istruzione n>; end.
Struttura programmi Pascal: Stampa program paeseTranquillo (output); begin write('Tre'); write(' casettine'); write(' dall''aria'); write(' tranquilla'); end. writeln stampa un ritorno a capo a fine stampa
Variabili e assegnamenti Area rettangolo { Calcolo area rettangolo } program rettangolo (output); (* Calcolo area rettangolo *) var base: integer; altezza: integer; area: integer; begin base := 3; altezza := 7; area := base*altezza; write(area); end.
Variabili e assegnamenti integer tipo predefinito dimensione occupazione in memoria tipicamente 2 byte = 16 bit -2^15 .. +215 - 1 operazioni lecite es.(sugli interi): + - * div := operatore di assegnazione <l-value> := <r-value>; es. base := 3; fa sì che il valore (intero) 3 venga assegnato alla variabile intera base es. area := base*altezza; in generale a destra si può avere un'espressione il cui valore viene calcolato prima dell'assegnamento
Dichiarazioni var base,altezza,area: integer; regole per i nomi degli identificatori: devono iniziare con una lettera o con una sottolineatura _ possono contenere solo lettere non accentate, cifre oppure lo stesso simbolo _ corretti: nome1, cognome2, cognome_nome, a, volume, peso, ... errati: 12nome, cognome-nome, età, vero?, Padri&figli, … non è consentito dichiarare nuovamente un identificatore già dichiarato
Stampa con write e writeln possono stampare anche i contenuti delle variabili o i risultati della valutazione di espressioni: write(area); equivalente a: write(base*altezza); possono stampare: sia caratteri corrispondenti a valori numerici, sia stringhe la lista delle espressioni da stampare viene separata da virgole: writeln('area:',base*altezza);
Area rettangolo (2) { Calcolo area rettangolo } program rettangolo2 (output); var base,altezza,area: integer; begin base := 3; altezza := 7; area := base*altezza; writeln('Base: ', base); writeln('Altezza:', altezza); writeln('Area: ', area); end.
Costanti Quando un valore fisso viene usato in maniera ricorrente nel programma può essere utile memorizzarlo in una costante dichiarata nell'apposita sezione del programma (prima delle variabili in Pascal standard): const BASE = 3; per i nomi valgono le regole degli identificatori leggibilità: aumentano la del programma flessibilità e facilità di manutenzione: eventuali modifiche si concentrano in un solo punto
Area rettangolo (3) { Calcolo area rettangolo, prova utilizzo costanti } program rettangolo3 (output); const BASE = 3; ALTEZZA = 7; var area: integer; begin area := BASE*ALTEZZA; writeln('Base: ', BASE); writeln('Altezza:', ALTEZZA); writeln('Area: ', area); end.
Immissione di dati Per rendere i programmi più generali servono strumenti per leggere valori immessi dall'estreno: read(base); legge un valore da tastiera e lo converte in un intero, immagazzinato nella variabile spesso si fa precedere da una write che richiede l'immissione: write('Valore base:'); read(base); read(base,altezza); lettura di valori multipli: readln(base); legge un valore va alla linea successiva readln; usabile per un'attesa indefinita
Area rettangolo (4) program rettangolo4 (input, output); var base, altezza, area: integer; begin writeln; writeln('AREA RETTANGOLO'); write('Valore base: '); readln(base); write(' Valore altezza: '); readln(altezza); area := base*altezza; writeln('Base: ', base); writeln('Altezza: ', altezza); writeln('Area: ', area); readln; end.
Emissione di dati Rendere l'ouput più leggibile: writeln(base, altezza, area); es. se base = 10 e altezza = 13 si ottiene la stampa: |1|0|1|3|1|3|0| Rendere l'ouput più leggibile: usando spazi: writeln(base,' ',altezza,' ',area); o meglio: writeln('Base:', base, ' Altezza: ', altezza, ' Area: ', area); formattazione a destra: writeln(base:5, altezza:5, area:5); ottenendo: | | | |1|0| | | |1|3| | |1|3|0|
Espressioni aritmetiche op. unario - inversione del segno op. binarie + somma - sottrazione * moltiplicazione div divisione intera (troncamento) mod modulo (resto della div. intera) priorità: - (unario) * div mod (op. moltiplicative) + - (op. additivi) uso delle parentesi per cambiare la priorità corrisponde a: (((((c + 6)* 3 + a) div 2) + 10 * 4) div 12) + b
Funzioni predefinite abs(•) valore assoluto sqr(•) quadrato pred(•) valore precedente succ(•) valore successivo
Uso di funzioni predefinite program lunghezzaSegmento (input, output); var a, b: integer; segmento, lunghezza: integer; begin writeln; writeln('LUNGHEZZA SEGMENTO'); write('Primo estremo: '); readln(a); write('Secondo estremo: '); readln(b); segmento := a-b; lunghezza := abs(segmento); writeln('Lunghezza segmento: ', lunghezza); readln; end.
Esercizi Svolgere i programmi indicati nei seguenti esercizi del testo: Cap. 1, n° 1 — 5, 9, 11 pagg. 25-26
Es. 1.10 Trovare gli errori program tutto sbagliato; cost base, altezza, area:= integer; begin base = 3; altezza := 7 area := base x altezza; writeln('Base: , base); writeln('Altezza:'; altezza); writelm('Area: ', area); end