Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 33
Strutture di controllo
Le istruzioni semplici (ingresso, uscita, calcolo ed assegnazione) 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 specifiche condizioni od eventi
Un algoritmo deve poter descrivere più sequenze possibili di azioni elaborative, ma in ogni esecuzione una sola (o una combinazione) di esse verrà realizzata.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 34
Algoritmo per effettuare una telefonata
Inizia telefonata;
Accedi al tastierino numerico;
Se c’è ‘campo’ allora inizia
componi il numero;
seleziona la cornetta verde per iniziare la telefonata;
se il numero chiamato è libero allora inizia
aspetta che qualcuno risponda;
se qualcuno risponde allora
continua a conversare finché non hai finito;
fine fine
seleziona la cornetta rossa per terminare la telefonata;
Fine della telefonata.
Un esempio
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 35
Inizia telefonata
Accedi al tastierino numerico;
NON c’è ‘campo’
Seleziona la cornetta rossa per terminare la telefonata;
Fine della telefonata Inizia telefonata
Accedi al tastierino numerico;
C’è ‘campo’
inizia
componi il numero;
seleziona la cornetta verde per iniziare la telefonata;
il numero chiamato NON è libero fine
Seleziona la cornetta rossa per terminare la telefonata;
Fine della telefonata
Inizia telefonata
Accedi al tastierino numerico;
C’è ‘campo’
inizia
componi il numero;
seleziona la cornetta verde per iniziare la telefonata;
il numero chiamato è libero inizia
qualcuno risponde;
continua a conversare finché non hai finito;
fine fine
Seleziona la cornetta rossa per terminare la telefonata;
Fine della telefonata
… più sequenze dinamiche (esecuzioni) associate alla stessa sequenza statica di istruzioni ...
Inizia telefonata
Accedi al tastierino numerico;
C’è ‘campo’
inizia
componi il numero;
seleziona la cornetta verde per iniziare la telefonata;
il numero chiamato è libero inizia
nessuno risponde;
fine fine
• Seleziona la cornetta rossa per terminare la telefonata;
Fine della telefonata
La sequenza effettivamente eseguita dipende da eventi (condizioni) che si verificano durante l’esecuzione stessa:
... Presenza di ‘campo’ …
… 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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 37
“costrutti sintattici” quali, nel linguaggio naturale:
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” sono chiamati
“strutture di controllo”
Sequenze Statiche e Dinamiche
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 38
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
… una struttura di controllo può contenerne altre, che sono ‘innestate’ in essa …
Strutture di Controllo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 39
Sequenza
Sequenza begin
S end;
tra begin e end sono inserite le istruzioni che devono essere eseguite
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 41
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 42
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.
… il programma per calcolare l’area del rettangolo …
… considerando le precondizioni sugli input ...
… (base >0 ) and (altezza > 0) …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 43
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
immetti altezza
Schermo del video
7
l’utente digita 7 base = 7
12
l’utente digita 12 altezza = 12
area = 7 * 12 = 84
(base > 0 and altezza > 0)=VERO
Area= 84
Cosa accadrà quando uno dei due valori non è maggiore di zero ?
… dal punto di vista dell’utente
L’utente non vede alcun risultato !? Vediamo come migliorare ….
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.
immetti base 7
immetti altezza 0
Schermo del video
l’utente digita 7 base = 7
l’utente digita 0 altezza = 0
(base > 0 and altezza > 0)=FALSO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 45
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 46
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
if ((base <= 0) or (altezza <= 0)) then
write (“ERRORE! Base e/o altezza non maggiore di zero”);
endif end.
Cosa vedrà l’utente quando sarà eseguito …
immetti base 7
immetti altezza 0
Schermo del video
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 47
Il programma di esempio calcolo volume parallelepipedo
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.
... Modificare il programma del calcolo del volume del parallelepipedo per verificare il rispetto delle precondizioni ...
Il programma di esempio calcolo volume parallelepipedo
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);
if ((Lbase>0) and (Abase>0) and (H>0)) then
Area_Base = LBase* ABase;
Volume=Area_Base*H;
write (“Volume= “, “%f” Volume);
endif
if ((Lbase<=0) or (Abase<=0) or (H<=0)) then
write (“ERRORE !!! Almeno una delle dimensioni è non maggiore di zero”);
endif
... programma del calcolo del volume del parallelepipedo con istruzioni per la verifica del rispetto delle precondizioni ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 49
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 50
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 51
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.
… una versione del programma per il calcolo dell’area di un rettangolo facendo uso della struttura di selezione :
if ( ) ... then … else …
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
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 Errore: base o altezza = <0
(base > 0 and altezza > 0)
= FALSO
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 53
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 =<0 “);
endif end.
… confronto tra le due versioni …
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.
… if ( ) then … … if ( ) then … else …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 54
Selezione a più di due vie:
Selezione
Struttura che permette una scelta plurima (più di due) tra possibili esecuzioni sulla base del valore assunto da una espressione.
Tale valore funge da discriminante rispetto ad un certo insieme di valori costanti, ciascuno dei quali è associato al caso da
eseguirsi, ovvero alla sequenza di istruzioni da eseguire.
struttura SWITCH – CASE
tale struttura spesso è anche indicata come struttura CASE-OF
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 55
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 (discriminante)
c1, … cN: costanti
S1, S2, …,Sn :Istruzioni da eseguirsi se
<espressione> è rispettivamente uguale a:
c1, c2, …., cN
break: Istruzione per uscire dallo Switch dopo l’esecuzione di una sequenza Si
Sdefault Istruzione/i da eseguirsi se <espressione>
diversa da c1, c2, ….
(è opzionale)
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 di valore pari alla costante c1 esegui S1;
esci dalla struttura switch (break);
nel caso di valore pari alla costante c2 esegui S2;
esci dalla struttura switch (break);
…
nel caso di valore pari alla costante cN esegui Sn;
esci dalla struttura switch (break);
[ nel caso di valore diverso da c1 ,..., cN ) esegui Sdefault;
esci dalla struttura switch (break);
] …. (è opzionale)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 57
S0
Sn
SU E
S2
S1 … S
defaultc1 c2 cn
Selezione a più vie:
Selezione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 58
……
write (“ immetti numero tra 6 e 10 “);
read("%d“, num);
switch (num) begin
case 6: write(“sufficiente”); break;
case 7: write(“bene”); break;
case 8: write(“molto bene”); break;
case 9: write(“benissimo”); break;
case 10: write(“OTTIMO”); break;
default: write(“valore NON valido !!!”); break;
end
… …
Selezione: switch
Esempio: leggere un valore compreso tra 6 e 10 e stampare un giudizio differente associato a ciascun valore, altrimenti stampare
“Valore NON valido !!!”
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 59
Selezione: switch
immetti numero tra 6 e 10 8
Molto bene
Schermo del video
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
……
write (“immetti numero tra 6 e 10”);
read("%d", num);
switch (num) begin
case 6: write(“sufficiente”);break;
case 7: write(“bene”); break;
case 8: write(“molto bene”); break;
case 9: write(“benissimo”); break;
case 10: write(“OTTIMO”); break;
default: write(“valore NON valido
!!!”); break;
end
… …
l’utente digita 8 num = 8
Selezione: switch
immetti numero tra 6 e 10 3
valore NON valido !!!
Schermo del video
Cosa accadrà quando sarà eseguito … dal punto di vista dell’utente
……
write (“immetti numero tra 6 e 10”);
read("%d", num);
switch (num) begin
case 6: write(“sufficiente”); break;
case 7: write(“bene”); break;
case 8: write(“molto bene”); break;
case 9: write(“benissimo”); break;
case 10: write(“OTTIMO”); break;
default: write(“valore NON valido
!!!”); break;
end
… …
l’utente digita 3 num = 3
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 61
Selezione a più vie in C
Struttura switch in C:
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 62
#include<stdio.h>
main ( )
{ printf("immetti numero tra 6 e 10\n ");
scanf("%d", &num);
switch (num)
{ case 6: { printf("sufficiente"); break;}
case 7: { printf("bene"); break; }
case 8: { printf("molto bene"); break; } case 9: { printf("benissimo"); break; } case 10: { printf("OTTIMO"); break; }
default: { printf("valore NON valido !!! "); break; } }
}
Selezione a più vie in C
Struttura switch in C:
Esempio: leggere un valore compreso tra 6 e 10 e stampare un giudizio differente associato a ciascun valore, altrimenti stampare “Valore NON valido !!!”
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 63
#include<stdio.h>
main ( )
{ printf("immetti numero tra 6 e 10\n ");
scanf("%d", &num);
if (num==6) printf("sufficiente");
else
if (num==7)printf("bene");
else
if (num==8) printf("molto bene");
else
if (num==9) printf("benissimo");
else
if (num==10) printf("OTTIMO");
else printf("valore NON valido !!! ");
}
Selezione a più vie in C
Esempio: leggere un valore compreso tra 6 e 10 e stampare un giudizio differente associato a ciascun valore, altrimenti stampare “Valore NON valido !!!”
La struttura switch può essere sostituita con strutture if… else if… innestate
#include<stdio.h>
main ( ) {
printf("immetti numero tra 6 e 10\n");
scanf("%d", &num);
if (num==6) printf("sufficiente");
else
if (num==7)printf("bene");
else
if(num==8) printf("molto bene");
else
if(num==9)printf("benissimo");
else
if(num==10) printf("OTTIMO");
else printf("valore NON valido !!! ");
}
Selezione a più vie in C
#include<stdio.h>
main ( )
{ printf("immetti numero tra 6 e 10\n ");
scanf("%d", &num);
switch (num) {case 6: {
printf("sufficiente");
break;}
case 7: { printf("bene");
break; }
case 8: {printf("molto bene");
break; }
case 9: {printf("benissimo");
break; }
case 10:{ printf("OTTIMO");
break; }
default: { printf("valore NON valido !!! ");
break; } }
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 65
Esercizio:
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, o un altro tipo di carattere
… 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
Selezione: switch
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 66
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 endif endif end.
Soluzione con if then else if LPD e 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 ‘);
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 67
#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
Esempio
Analisi e Specifica
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 da 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.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 69
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 70
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
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 71
Esercizio
Progettazione
Descrizione del metodo di elaborazione:
Si richiede l’immissione della categoria cliente e del prezzo intero
Sono letti i valori della categoria cliente e del prezzo intero che sono assegnati rispettivamente alle variabili catCli e prezzo
Se il valore del prezzo è negativo è visualizzato un messaggio di errore ed il programma termina, altrimenti:
Usando una struttura switch viene assegnato, in base alla tabella precedente, alla variabile al_sconto il valore della percentuale di sconto da usare per calcolare l’importo dello sconto.
Se è stato immesso un valore non valido per la categoria cliente viene visualizzato un messaggio di errore e si assegna il valore -1 alla variabile al_sconto.
Se il valore della variabile al_sconto è diverso da -1 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.
#include<stdio.h>
main ( )
/* questo programma calcola l’importo dello sconto in base alla categoria cliente */
{
float al_sconto, prezzo, totaleCliente, sconto;
char catCli;
printf(“Inserisci la categoria del cliente\n (Un valore tra A, B, C, D, E, 0)\n ");
scanf("%c", &catCli);
printf(“Inserisci il prezzo\n");
scanf("%f", &prezzo);
if (prezzo < 0)
printf("ERRORE! VALORE PREZZO NEGATIVO !! FINE PROGRAMMA");
else
{ // apre ramo else
il programma in C
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
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 ERRATA! FINE PROGRAMMA\n");
al_sconto = -1;
break;}
} // chiude switch
il programma in C
73
Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio
if(al_sconto != -1)
{ 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);
}
} // chiusura ramo else
system("Pause");
}
il programma in C
74