Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 1
Struttura di un programma
Un programma è tipicamente strutturato nel seguente modo:
Intestazione
Sezione dichiarativa Corpo del programma
Intestazione: nome del programma Sezione dichiarativa: riporta tutte le informazioni, nomi e relativi tipi, che saranno usate nel programma
Corpo del programma: sequenza di istruzioni formanti il programma
…. regole lessicali e sintattiche
un insieme di parole chiavi, regole per costruire nuovi nomi, regole per costruire le frasi
• 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
… un ipotetico linguaggio di programmazione generico e generale ...
… Linguaggio di Definizione dei Programmi (LDP)...
Un Linguaggio per la Definizione di Programmi
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 3
… con riferimento ad un generico LDP ...
Program <nome programma>;
// sezione dichiarativa
<nome tipo> <lista nomi_variabili>
begin
<corpo del programma>
end.
In grassetto le parole/simboli chiavi (lessico) del linguaggio Tra < … > ciò che scrive il programmatore
// indicano un commento: una frase non esecutiva per l’elaboratore ma utile al programmatore
Tipi definiti dal linguaggio
i tipi atomici (primitivi)
INTERO INT
REALE FLOAT
Nomi delle variabili
devono iniziare con un carattere alfabetico possono avere una lunghezza qualsiasi non possono contenere il carattere <spazio>, non possono contenere i simboli degli operatori aritmetici
deve essere indicato il tipo di ogni variabile (dichiarazione della variabile) <nome tipo> <lista variabili>;
Es.
FLOAT area_quadrato, lato_quadrato;
INT n.ro_studenti, ore_lezioni;
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 5
• 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
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, ovvero loro rappresentazione in base al tipo
nella loro forma più semplice:
• unità di ingresso non indicata e considerata quella standard (“default”)
(tipicamente la tastiera)
• formato non indicato ed individuato per “default”
(tipicamente il formato dei dati coincide con la rappresentazione prevista per le costanti del tipo … )
Istruzioni di ingresso (input)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 7
Hanno un formato del tipo:
read ([<unità ingresso>], [<formato>] <variabile>, …, [<formato>] <variabile>);
le […] indicano un qualcosa di opzionale
se [<unità ingresso>] non è indicata si assume l’unità di default (la tastiera) [<formato>] indica il formato secondo cui il valore è rappresentato (in base al tipo)
<variabile> indica il nome della variabile cui assegnare il valore letto da unità ingresso
%f <==> formato per numero reale
%d <==> formato per numero intero
Es:
read (“%f” area_quadrato, “%f” lato_quadrato);
read (“%d” numero_pagine, “%f” prezzo_libro);
… quando è incontrata l’istruzione read, l’esecuzione del programma si interrompe fin quando non sono immessi i valori dei dati di input
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”
Istruzioni di uscita (output)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 9
Hanno un formato del tipo:
write ([<unità uscita>], [<formato>] <espressione>, ... , [<formato>] <espressione>);
se [<unità uscita >] non è indicata si assume l’unità di default
<espressione> può essere: una variabile, una costante, una espressione
Istruzioni di uscita (output)
%c <==> formato per carattere
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’);
… l’esecuzione dell’istruzione write, ha come effetto quello di visualizzare sull’unità di output indicata i valori di <espressione>
read ([<unità ingresso>], [<formato>] <variabile>, …, [<formato>] <variabile>);
Istruzioni di ingresso/uscita (input/output)
read (“%f” area_quadrato, “%f” lato_quadrato);
read (“%d” numero_pagine, “%f” prezzo_libro);
… all’istruzione read, l’esecuzione del programma si interrompe fin quando non sono immessi i valori dei dati di input …
write ([<unità uscita>], [<formato>] <espressione>, ... , [<formato>] <espressione>);
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’);
... se numero_pagine = 20 prezzo = 1000,00 IVA = 100,00
... sullo schermo viene visualizzato:
6000 1100,00 900 B
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 11
Program primo;
// legge in input il valore di una variabile di tipo intero e ne visualizza il suo doppio
INT numero;
begin
read (“%d” numero);
write (‘Numero = ‘, “%d” numero, ‘doppio= ‘, “%d” numero*2);
end.
intestazione commento
Dichiarazioni variabili
Operazione input
Operazione output Dato un numero intero, visualizzarne il doppio
Un primo programma di esempio
Program primo;
// legge in input il valore di una variabile di tipo intero e ne visualizza il suo doppio
INT numero;
begin
read (“%d” numero);
write (‘Numero = ‘, “%d” numero,
‘doppio= ‘, “%d” numero*2);
end.
l’utente digita 4 numero= 4
4
Numero = 4 doppio = 8 Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 13
Un primo programma di esempio
Program primo;
// legge in input il valore di una variabile di tipo intero e ne visualizza il suo doppio
INT numero;
begin
write (‘Immetti numero intero:’);
read (“%d” numero);
write (‘Numero = ‘, “%d” numero,
‘doppio= ‘, “%d” numero*2);
end.
l’utente digita 4 numero= 4
4
Numero = 4 doppio = 8
… un miglioramento …
Immetti numero:
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 15
Definizione del problema: Calcolare la superficie di una stanza di forma rettangolare,
Definizione dei dati del problema:
I: base, altezza del rettangolo
Pi:
base, altezza devono essere maggiori di zeroU: area
Pu: area maggiore di zero
Esempio
Nome variabile Descrizione Tipo
base base del rettangolo FLOAT
altezza altezza del rettangolo FLOAT
Nome variabile Descrizione Tipo area area del rettangolo FLOAT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 17
Esempio
Precondizioni informazioni di ingresso (base > 0) and (altezza > 0) Precondizioni informazioni di uscita:
area > 0
Modello della soluzione:
area = base * altezza
Esempio
… tralasciando per ora precondizioni e postcondizioni …
Descrizione del metodo di elaborazione:
• sono letti (dalla tastiera ) i valori di base ed altezza;
• è calcolato il valore di area = base * altezza
• è visualizzato (sul monitor) il valore di area calcolato;
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 19
Codifica
• sono letti (dalla tastiera ) i valori di base ed altezza
; read (base);
read (altezza);
…però in tale modo all’utente comparirà uno schermo vuoto con un cursore che lampeggia, meglio se …
write (‘immetti valore della base‘);
read (base);
write (‘immetti valore della altezza‘);
read (altezza);
Esempio
Codifica
• è calcolato il valore di area = base * altezza
area = base * altezza;
• è visualizzato (sul monitor) il valore di area calcolato;
write (‘Area= ‘, “%f” area);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 21
Il programma di esempio
Program area_rettangolo;
// questo programma calcola l’area di un rettangolo
FLOAT base, altezza, area;
begin
write (‘immetti valore della base’);
read (“%f” base);
write (‘immetti valore della altezza ‘);
read (“%f” altezza);
area = base * altezza;
write (‘Area= ‘, “%f” area);
end.
intestazione commento
Dichiarazioni variabili
Operazioni input
Operazioni output
Calcolo e assegnazione
Program area_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.
… ma se base o altezza =< 0 ? Il programma di esempio
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
immetti base 7
immetti altezza 12
Area= 84
Schermo del video l’utente digita 7
l’utente digita 12 area = 7 * 12 = 84 base = 7
altezza = 12
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 23
Definizione della specifica del programma
Calcolare il volume, in dm
3, di un parallelepipedo di cui è nota la lunghezza dei lati
Definizione dei dati del problema:
I: I lati del parallelepipedo
Pi: I lati devono avere lunghezze maggiori di zero U: Volume del parallelepipedo
Pu: il volume è maggiore di zero
Esempio
Nome variabile Descrizione Tipo
Volume Volume del parallelepipedo Reale Tabella delle informazioni di ingresso
Tabella delle informazioni di uscita
Nome variabile Descrizione Tipo
LBase Lunghezza base parallelepipedo Reale ABase Altezza base parallelepipedo Reale H Altezza del parallelepipedo Reale
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 25
Esempio
Nome variabile Descrizione Tipo
Area_Base area di base del parallelepipedo Reale Tabella delle informazioni di algoritmo
Esempio
Descrizione del metodo di elaborazione:
• sono letti i valori, in dm, dei lati LBase, ABase, H;
• Si calcola l’area di base: Area_Base = LBase * ABase;
• Si calcola il Volume = Area_Base * H;
• Si visualizza il valore del Volume calcolato.
... Senza considerare la verifica delle precondizioni ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 27
Program volume_parallelepipedo;
FLOAT LBase, ABase, H, Volume, Area_Base;
begin
write (‘immetti valore della lunghezza di base’);
read (“%f” LBase);
write (‘immetti valore della altezza di base‘);
read (“%f” ABase);
write (‘immetti valore della altezza del parallelepipedo‘);
read (“%f” H);
Area_Base = LBase* ABase;
Volume=Area_Base*H;
write (‘Volume= ‘, “%f” Volume);
end.
Il programma di esempio in C
#include<stdio.h>
main ( )
{ // calcola il volume di un parallelepipedo float LBase, ABase, H, Area_Base, Volume;
printf ("immetti valore della lunghezza di base \n");
scanf ("%f" , &LBase);
printf("immetti valore altezza di base \n");
scanf("%f" , &ABase);
printf("immetti valore altezza parallelepipedo\n");
scanf("%f" , &H);
Area_Base = LBase* ABase;
Volume=Area_Base*H;
printf ("Volume= %f \n",Volume);
}
... Senza considerare la verifica delle precondizioni ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 29
Esempio
... considerando anche le precondizioni
Descrizione del metodo di elaborazione:
• sono letti i valori, in dm, dei lati LBase, ABase, H;
• Si verifica che LBase, ABase ed H siano tutti maggiori di 0, altrimenti si ripete la lettura di tali valori;
• Si calcola l’area di base: Area_Base = LBase * ABase;
• Si calcola il Volume = Area_Base * H;
• Si visualizza il valore del Volume calcolato.
... necessità di altri tipi di istruzioni per verificare condizioni e controllare differenti possibili sequenze di esecuzioni ...
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 possibili sequenze di elaborazioni,
ciascuna possibile sequenza elaborativa dipende dal verificarsi o meno di condizioni
In generale, un algoritmo descrive più sequenze possibili di azioni elaborative, ed in ogni esecuzione una sola (o una combinazione) di esse verrà realizzata.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 31
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.
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
Inizia telefonata Solleva la cornetta;
c’è il tono di della linea inizia
componi il numero;
il numero chiamato è libero inizia
nessuno risponde;
fine
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 33
La sequenza effettivamente 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ù differenti sequenze dinamiche (esecuzioni)
Sequenze Statiche e Dinamiche
“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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 35
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
Sequenza
Sequenza begin S end;
tra begin e end sono inserite le istruzioni che devono essere
eseguite
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 37
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
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 39
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.
… considerando le precondizioni sugli input ...
Program area_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;
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
immetti base 7
immetti altezza 12
Area= 84
Schermo del video
l’utente digita 7 base = 7
l’utente digita 12 altezza = 12
area = 7 * 12 = 84
(base > 0 and altezza > 0)=VERO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 41
Program area_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.
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
immetti base 7
immetti altezza 0
Schermo del video
l’utente digita 7 base = 7
l’utente digita 0 altezza = 0
L’utente non vede alcun risultato !? Vediamo come migliorare ….
(base > 0 and altezza > 0)=FALSO
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
if ((base <= 0) or (altezza <= 0)) then
write (‘ERRORE! Base e/o altezza non maggiore di zero’);
endif end.
… aggiungiamo una struttura “if … then …” per visualizzare un messaggio di errore …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 43
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
if ((base <= 0) or (altezza <= 0)) then
write (‘ERRORE! Base e/o altezza non maggiore di zero’);
endif end.
immetti base 7
immetti altezza 0
l’utente digita 7 base = 7
l’utente digita 0 altezza = 0
(base > 0 and altezza > 0)=FALSO ERRORE! Base e/o altezza non maggiore di zero
(base <= 0 or altezza <= 0)=VERO
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
Selezione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 45
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
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.
… un ulteriore miglioramento del programma per il calcolo dell’area di un rettangolo ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 47
Program area_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.
immetti base 7
immetti altezza 0
l’utente digita 7 base = 7
l’utente digita 0
altezza = 0 Errore: base o altezza = <0
(base > 0 and altezza > 0) = FALSO
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
tale struttura spesso è anche indicate come CASE
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 49
switch (<espressione>) begin
case c1:
S1;
break;
case c2:
S2;
break;
…
case cN:
Sn;
break;
[default: Sdefault; break;
] end
Selezione a più vie
semantica
Valuta valore <espressione>
nel caso valore pari a c1 esegui S1;
esci dalla struttura switch (break);
nel caso valore pari a c2 esegui S2;
esci dalla struttura switch (break);
…
nel caso valore pari a cN esegui Sn;
esci dalla struttura switch (break);
[ nel caso valore diverso da c1 ,..., cN ) esegui Sdefault;
esci dalla struttura switch (break);
] …. (è opzionale)
switch (<espressione>) begin
case c1:
S1;
break;
case c2:
S2;
break;
…
case cN:
Sn;
break;
default: Sdefault; break;
end
Selezione a più vie
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)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 51
S0
Sn
SU E
S2
S1 … S
defaultc1 c2 cn
Selezione a più vie:
……
write (‘ immetti numero tra 1 e 3’);
read("%d“, num);
switch (num) begin
case 1: write(‘*’); break;
case 2: write(‘**’); break;
case 3: write(‘***’); break;
default: write(‘!’); break;
end
… …
Selezione: switch
Esempio: stampa da 1, 2, o 3 asterischi in base al numero
(compreso tra 1 e 3) immesso , altrimenti stampa un ‘!’
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 53
\
Selezione: switch
immetti numero tra 1 e 3
3
***
Schermo del video
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
……
write (‘immetti numero tra 1 e 3’);
read("%d", num);
switch (num) begin
case 1: write(‘*’); break;
case 2: write(‘**’); break;
case 3: write(‘***’); break;
default: write(‘!’); break;
end
… …
l’utente digita 3 num = 3
Selezione: switch
immetti numero tra 1 e 3
5
!
Schermo del video
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
……
write (‘immetti numero tra 1 e 3’);
read("%d", num);
switch (num) begin
case 1: write(‘*’); break;
case 2: write(‘**’); break;
case 3: write(‘***’); break;
default: write(‘!’); break;
end
… …
l’utente digita 5 num = 5
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 55
switch (<espressione>) {
case c1:
S1;
break;
case c2:
S2;
break;
…
case cN:
Sn;
break;
[ default: Sdefault; break;
] }
semantica
Valuta valore <espressione>
caso valore c1 esegui S1; esci dalla struttura switch (break);
caso valore c2 esegui S2; esci dalla struttura switch (break);
…
caso valore cN esegui Sn; esci dalla struttura switch (break);
[caso valore diverso da c1 ,..., cN )
esegui Sdefault; esci dalla struttura switch (break);
] …. (è opzionale)
N.B. :break provoca l’uscita immediata dalla struttura switch
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
switch (num) {
case 1: {printf("*\n"); break;}
case 2: {printf("**\n"); break;}
case 3: {printf("***\n"); break;}
default: {printf("!\n"); break;}
Esempio: stampa da 1, 2, o 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti stampa un ‘!’
Selezione a più vie in C
Struttura switch in C:
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 57
#include<stdio.h>
main ( )
/* questo programma stampa da 1 a 3 stelle o un ! */
{ ...
scanf("%d", &num);
if(num==1) printf("*\n");
else
if(num==2) printf("**\n");
else
if(num==3) printf("***\n");
else
printf("!\n");
}
Esempio: stampa da 1, 2, o 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti stampa un ‘!’
Selezione a più vie in C
La struttura switch può essere sostituita con una serie di strutture if… else if…
innestate
#include<stdio.h>
main ( )
/* stampa da 1 a 3 stelle o un
! usando if... else if... */
{ ...
scanf("%d", &num);
if(num==1) printf("*\n");
else
if(num==2)
printf("**\n");
else
if(num==3)
printf("***\n");
else
printf("!\n");
}
Selezione a più vie in C
#include<stdio.h>
main ( )
/* stampa da 1 a 3 stelle o un ! – usando switch */
{ ...
scanf("%d", &num);
switch (num) {
case 1:{printf("*\n");
break;}
case 2: {printf("**\n");
break;}
case 3: {printf("***\n");
break;}
default: {printf("!\n");
break;}
} }
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 59
Scrivere un programma che letto un carattere in ingresso, stampa un messaggio indicante se il carattere immesso è una cifra o una lettera minuscola o maiuscola
… LDP …
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
…..
char c;
read(“%c”, c);
switch ( c ) begin
case '0' : case '1' : case ’2' : case ’3' : case ’4' : case ’5' : case ’6' : case ’7' : case ’8' : case '9' : write( ‘Cifra ‘); break;
case 'a' : case ‘b' : ...… : case 'z' : write( ‘ Lettera minuscola ‘); break;
case 'A' : case ‘B' : ...… :case 'Z' : write( ‘ Lettera maiuscola ‘ ); break;
default : write( ‘ Altro Carattere ‘);
end
Program cifra_Lettera;
// stampa se il carattere immesso è una cifra o una lettera minuscola o maiuscola
char c;
begin read(“%c”, c);
if ((c >= ‘0’) and (c <= ‘9’)) then
write ( ‘Cifra’);
else
if ((c >= ‘a’) and (c <= ‘z’)) then
write( ‘ Lettera minuscola‘);
else
if (c >= ‘A’ and c <= ‘Z’) then
write( ‘ Lettera maiuscola ‘ );
else
write( ‘ Altro Carattere\n ‘);
endif
Soluzione con if then else if LPD
La struttura switch può essere sostituita con una serie di strutture if else if
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 61
#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 in C
#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
H
Lettera maiuscola
Schermo del video l’utente digita H
c = H
FALSO
FALSO
Vero
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 63
Definizione del problema:
I clienti di un’azienda sono classificati in sei categorie indicate con i caratteri:
A - B - C - D - E - 0
L’azienda attua ai vari clienti uno sconto in base alla categoria cui appartengono secondo la seguente tabella
Categoria A B C D E 0
Sconto 5% 7,5% 10% 15% 18,5% 0%
Scrivere un programma che ricevuti in input la categoria del cliente ed il prezzo intero che dovrebbe pagare, calcoli l’importo dello sconto da effettuare (in base alla tabella indicata) ed il totale che pagherà effettivamente detraendo lo sconto dal prezzo intero.
Esempio
Definizione dei dati del problema:
I: categoria del cliente, prezzo intero
Pi: la categoria del cliente deve essere una di quelle valide, riportate nella tabella precedente, il prezzo deve essere non negativo
U: importo sconto, totale cliente;
Pu: il totale cliente non può essere maggiore del prezzo intero e deve essere non negativo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 65
Esempio
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome Varibile Descrizione Tipo
catCli Categoria del cliente il cui valore deve essere uno tra (A, B, C, D, E, 0)
CHAR
prezzo Prezzo intero che il cliente pagherebbe senza lo sconto FLOAT
Nome Varibile Descrizione Tipo
sconto Importo dello sconto da praticare FLOAT
TotaleCliente Importo ‘scontato’ che il cliente pagherà FLOAT
Tabella delle variabili di algoritmo
Nome Varibile Descrizione Tipo
Al_sconto Aliquota percentuale da applicare per calcolare l’importo dello sconto da praticare
FLOAT
Esercizio
Progettazione
Descrizione del metodo di elaborazione:
Si richiede l’immissione della categoria cliente e del prezzo intero E’ letto il valore del prezzo intero ed è assegnato alla variabile prezzo Se il valore del prezzo è negativo è richiesta la re-immissione del prezzo E’ letto il valore della categoria cliente che è assegnato alla variabile catCli
Usando una struttura switch alla variabile al_sconto viene assegnato, in base alla tabella precedente, il valore della aliquota da usare per calcolare l’importo dello sconto.
Se per la categoria cliente è immesso un valore non valido, viene visualizzato un messaggio di errore e si assegna il valore -1 alla variabile al_sconto.
Se il valore della variabile al_sconto non è valido (ovvero è uguale a -1) è richiesta la sua re-immissione; quando valido si calcola:
• l’importo dello sconto:
sconto = prezzo * (al_sconto / 100)
• l’importo del totale ‘scontato’:
totaleCliente = prezzo – sconto
Si visualizzano, con adeguati messaggi a video, i valori del prezzo, dell’aliquota sconto, dell’importo dello sconto, del totale scontato.
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
#include<stdio.h>
main ( )
/* questo programma calcola lo sconto in base alla categoria cliente */
{float al_sconto, prezzo, totaleCliente, sconto;
char catCli;
do {
printf("inserisci il prezzo\n");
scanf("%f", &prezzo);
if (prezzo <= 0)
printf("ERRORE! VALORE PREZZO NEGATIVO !! \n");
}
while (prezzo<=0);
do
{printf("inserisci la categoria del cliente\n");
scanf(“\n%c", &catCli);
switch (catCli)
{ case 'A':{al_sconto= 5;
break;}
case 'B':{al_sconto= 7.5;
break;}
case 'C': {al_sconto= 10;
break;}
case 'D': {al_sconto= 15;
break;}
case 'E': {al_sconto= 18.5;
break;}
case '0': {al_sconto= 0;
break;}
default: {printf("CATEGORIA INESISTENTE!\n");
al_sconto=-1;
break;}
il programma in C
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
sconto = prezzo * (al_sconto/100);
totaleCliente = prezzo - sconto;
printf("\n Prezzo: %f\n", prezzo);
printf("\n Aliquota sconto: %f \n Importo Sconto %f\n", al_sconto, sconto);
printf("\n Totale da pagare: %f\n", totaleCliente);
system("Pause");
}