1
Deve consentire:
• frasi per indicare tipi e nomi delle informazioni (variabili)
• frasi per poter assegnare/modificare valori alle variabili – operazioni di ingresso
– calcolo ed assegnazione
• frasi per operazioni di uscita
• frasi per la definizione istruzioni
…. regole lessicali e sintattiche
un insieme di parole chiavi, regole per costruire nuovi nomi, regole per costruire le frasi
… un linguaggio generico e generale ...
… PDL Programming Design Language ...
Un linguaggio per la definizione di Programmi
2
Tipi definiti dal linguaggio
i tipi atomici
INTERO INT
REALE FLOAT
CARATTERE CHAR
LOGICO BOOL
Nomi delle variabili
devono iniziare con un carattere alfabetico possono avere una lunghezza qualsiasi non possono contenere il carattere <spazio>
deve essere indicato il tipo di ogni variabile (dichiarazione delle variabili)
<nome tipo> <lista variabili>;
Es.
FLOAT area_quadrato, lato_quadrato;
INT n.ro_studenti, ore_lezioni;
3
• istruzioni di ingresso
• istruzioni di uscita
• istruzioni di calcolo ed assegnazione
in quasi tutti i linguaggi alle istruzioni di ingresso ed uscita corrisponde una azione elaborativa realizzata attraverso predefinite unità di programma
Istruzioni Semplici
4
Permettono di assegnare (definire) il valore di una o più informazioni (variabili) attraverso una unità di ingresso
prevedono:
• definizione dell’unità di ingresso coinvolta
• indicazione delle informazioni (variabili) cui assegnare il valore
• definizione del formato dei dati in ingresso
nella loro forma più semplice:
• l’unità di ingresso è individuata per “default”
(tipicamente la tastiera)
• il formato è individuato per “default”
(tipicamente il formato dei dati coincide con la rappresentazione prevista per le costanti del tipo … )
Istruzioni di ingresso (input)
5
Hanno un formato del tipo:
read ([<unità ingresso>], [<formato>] <variabile>, …, [<formato>] <variabile>);
Es:
read (“%f” area_quadrato, “%f” lato_quadrato);
read (“%d” numero_pagine, “%f” prezzo_libro);
Istruzioni di ingresso (input)
6
permettono di trasferire i valori definiti da espressioni (variabili, costanti) sui supporti di una unità di uscita (schermo del video, foglio stampante etc.)
prevedono:
• individuazione dell’unità di uscita coinvolta
• indicazione delle espressioni (informazioni) coinvolte
• definizione del formato dei dati in uscita nella loro forma più semplice:
• l’unità di uscita è individuata per “default”
(tipicamente il video)
• il formato è individuato per “default”
(tipicamente il formato dei dati coincide con la rappresentazione prevista per le costanti del tipo delle espressioni)
Istruzioni di uscita (output)
7
Hanno un formato del tipo:
write ([<unità uscita>], [<formato>] <espressione>, ... , [<formato>] <espressione>);
<espressione> può essere: una variabile, una costante, una espressione
Es:
write (“%f” area_quadrato, “%f” lato_quadrato);
write (“%d” numero_pagine, “%f” prezzo_libro);
write (“%d” numero_pagine*300, “%f” prezzo+IVA, “%d” 900, “%c” ‘B’);
Istruzioni di uscita (output)
8
permettono di calcolare il valore di una espressione ed assegnarlo ad una informazione
informazione ed espressione devono essere dello stesso tipo l’istruzione richiede:
• indicazione del nome della variabile che deve ricevere il valore
• operatore di assegnazione (=)
• definizione della espressione Hanno la forma:
<nome variabile> = <espressione>;
<espressione> può essere: una variabile, una costante, una espressione Esempio:
x = w + a * (y + 2);
y = 3;
Istruzioni di Calcolo ed Assegnazione
9
Un semplice programma esempio
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (“immetti base”);
read (“%f” base);
write (“immetti altezza “);
read (“%f” altezza);
area = base * altezza;
write (“Area= ”, “%f” area);
end.
commento
Dichiarazioni variabili
Operazioni input
Operazioni output
Calcolo e assegnazione intestazione
… ma se base o altezza =< 0 ?
10
Strutture di controllo
Le istruzioni semplici permettono di specificare in un programma delle azioni elaborative semplici,costituenti un’unica sequenza di esecuzione possibile
Nella maggior parte dei casi, un algoritmo si compone di più e diverse sequenze di elaborazioni
In generale, un algoritmo descrive più sequenze possibili di azioni elaborative, ed in ogni esecuzione una sola di esse verrà realizzata.
11
Inizia telefonata;
Solleva la cornetta;
Se c’è il tono di della linea allora inizia
componi il numero;
se il numero chiamato è libero allora inizia
aspetta che qualcuno risponda;
se qualcuno risponde allora
continua a conversare finché non hai finito;
fine fine
riponi la cornetta sull’apparecchio;
Fine della telefonata.
Un esempio
12 Inizia telefonata
Solleva la cornetta;
NON c’è il tono di della linea riponi la cornetta sull’apparecchio.
Fine della telefonata
Inizia telefonata Solleva la cornetta;
C’è il tono di della linea inizia
componi il numero;
il numero chiamato NON è libero fine
riponi la cornetta sull’apparecchio.
Fine della telefonata
Inizia telefonata Solleva la cornetta;
c’è il tono di della linea inizia
componi il numero;
il numero chiamato è libero inizia
qualcuno risponde;
continua a conversare finché non hai finito;
fine fine
riponi la cornetta sull’apparecchio.
Fine della telefonata
… più sequenze dinamiche (esecuzioni) associate alla stessa sequenza statica ...
13
La sequenza eseguita dipende da eventi (condizioni) che si verificano durante l’esecuzione stessa:
... Presenza della linea … linea libera o occupata ...
Un algoritmo (ovvero un programma) è descritto con
una sequenza di frasi (ovvero istruzioni ), che è detta sequenza statica o lessicografica.
La sequenza lessicografica può contenere più sequenze dinamiche (esecuzioni)
Sequenze Statiche e Dinamiche
14
“costrutti sintattici” quali:
se...allora...altrimenti....
qualora...ma ...nel caso in cui...
ripeti ... fino a quando…
continua …. finché mentre... se ..però...
verificandosi...altrimenti....
nel primo caso...., nel secondo caso..., ... nell’ennesimo caso...
...…
indicano possibili condizioni (eventi) che danno origine alle diverse sequenze dinamiche
nei linguaggi di programmazione questi “costrutti sintattici”
vengono chiamati “strutture di controllo”
Sequenze Statiche e Dinamiche
15
Sequenza
struttura di controllo che racchiude istruzioni semplici o altre strutture di controllo che vanno eseguite nell’ordine in cui sono scritte
una sequenza può anche racchiudere una sola istruzione o una sola struttura di controllo
Selezione
una struttura di controllo per selezionare una fra due o più possibili
“sequenze” di istruzioni
Ciclo
struttura di controllo per ripetere l’esecuzione di una “sequenza” di istruzioni
Strutture di Controllo
16
Sequenza
Sequenza
begin S end;
tra begin e end sono inserite le istruzioni che devono essere eseguite
17
una prima struttura:
if (condizione) then
<sequenza>
endif
condizione è una espressione booleana (predicato)
<sequenza> è una sequenza di istruzioni semplici o strutturate
se condizione è vera esegui istruzioni in <sequenza>; in ogni caso continua eseguendo la prima istruzione successiva alla struttura di controllo
Selezione
18
la struttura introduce due possibili sequenze dinamiche (esecuzioni):
C = VERO, sequenza eseguita:
S0 - S1 - S2
C = FALSO, sequenza eseguita:
S0 - S2 S0
if (C) then S1 endif S2
…. struttura 1-in /1-out ….
S0
S1
S2 C
vero falso
19
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (‘immetti base‘);
read (“%f” base);
write (‘immetti altezza ‘);
read (“%f” altezza);
if (base > 0 and altezza > 0) then area = base * altezza;
write (“Area= %f”, area);
endif end.
20
una seconda struttura:
if (condizione) then
<sequenza1>
else
<sequenza2>
endif
condizione è una espressione booleana (predicato)
<sequenza1> <sequenza2> sono sequenze di istruzioni semplici o strutturate
se condizione è vera esegui istruzioni in <sequenza1>;
altrimenti (cioè condizione è falsa) esegui <sequenza2>; in ogni caso continua eseguendo la prima istruzione successiva alla struttura di controllo
Selezione
21
la struttura introduce due possibili sequenze dinamiche (esecuzioni):
C = VERO, sequenza eseguita:
S0 - S1 - S3
C = FALSO, sequenza eseguita:
S0 - S2 - S3 S0
if (C) then S1 else
S2 endif S3
…. struttura 1-in /1-out ….
S0
S2
S3
vero
C
falsoS1
22
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (‘immetti base‘);
read (“%f” base);
write (‘immetti altezza ‘);
read (“%f” altezza);
if (base > 0 and altezza > 0) then begin
area = base * altezza;
write (“Area= ”, “%f” area);
end else
write (“Errore: base o altezza = <0”);
endif end.
23
Selezione a più vie:
Selezione
Struttura di scelta plurima che controlla se una espressione assume un valore all’interno di un certo insieme di costanti e si comporta di conseguenza
struttura SWITCH (Case)
24
S0
Sn
SU E
S2
S1 « S
defaultc1 c2 cn
Selezione a più vie:
Selezione
25
switch (<espressione>) {
case c1:
S1;
break;
case c2:
S2;
break;
…
case cN:
Sn;
break;
default: Sdefault; break;
}
Selezione
Espressione di controllo
costanti
Istruzioni da eseguirsi se <espressione>
uguale a c1, c2, …., cN
Istruzione per uscire dallo Switch
Istruzioni da eseguirsi se <espressione>
diversa da c1, c2, ….
(è opzionale)
26
semantica
Valuta <espressione>
se ha valore c1 esegui S1; esci dalla struttura switch (break);
se ha valore c2 esegui S2; esci dalla struttura switch (break);
…
se ha valore cN esegui Sn; esci dalla struttura switch (break);
altrimenti (se il valore di espressione è diverso da c1 ,..., cN ) esegui Sdefault; esci dalla struttura switch (break);
…. (è opzionale)
N.B. :break provoca l’uscita immediata dallo switch
Selezione: switch
27
……
scanf("%d", &num);
switch (num) {
case 1: printf("*\n"); break;
case 2: printf("**\n"); break;
case 3: printf("***\n"); break;
default: printf("!\n"); break;
}
… …
Selezione: switch
Esempio: stampa da 1 a 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti un !
28
La struttura switch può essere sostituita con una serie di strutture if else if
Esempio:
#include <stdio.h>
main() {
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
char c;
scanf(“%c”, & c);
switch ( c ) {
case '0' : case '1' : case ’2' : case ’3' : case ’4' : case ’5' : case ’6' : case ’7' : case ’8' : case '9' : printf( "Cifra \n”); break;
case 'a' : ...… : case 'z' : printf( " Lettera minuscola \n”); break;
case 'A' : ...… :case 'Z' : printf( " Lettera maiuscola \n" ); break;
default : printf( " Altro Carattere \n”);
} }
29
#include <stdio.h>
main() {
//stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
char c;
scanf(“%c”, & c);
if ((c >= ‘0’) && (c <= ‘9’)) { printf( "Cifra \n”);
}
else if ((c >= ‘a’) && (c <= ‘z’)) {
printf( " Lettera minuscola \n”);
}
else if (c >= ‘A’ && c <= ‘Z’) {
printf( " Lettera maiuscola \n" );
}
else printf( " Altro Carattere \n”);
}
Soluzione con if else if