• Non ci sono risultati.

Strutture di controllo

N/A
N/A
Protected

Academic year: 2021

Condividi "Strutture di controllo "

Copied!
22
0
0

Testo completo

(1)

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, ed 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;

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

(2)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 35

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 di istruzioni ...

Inizia telefonata Solleva la cornetta;

c’è il tono di della linea inizia

componi il numero;

il numero chiamato è libero inizia

nessuno risponde;

fine fine

riponi la cornetta sull’apparecchio.

Fine della telefonata

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

(3)

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”

vengono 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

(4)

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

(5)

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) …

(6)

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

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

(7)

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

(8)

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)

write (“ERRORE !!! Almeno una delle dimensioni è non maggiore di zero”);

endif end.

... programma del calcolo del volume del parallelepipedo con istruzioni per la verifica del rispetto delle precondizioni ...

(9)

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

falso

S1

(10)

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 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 Errore: base o altezza = <0

(base > 0 and altezza > 0) = FALSO

(11)

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 CASE OF

(12)

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 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)

(13)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 57

S0

Sn

SU E

S2

S1 S

default

c1 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(“benino”); 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 !!!”

(14)

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(“benino”); 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(“benino”); 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

(15)

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("benino"); 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 !!!”

(16)

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("benino");

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("benino");

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("benino");

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; } }

}

(17)

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; una lettera minuscola o maiuscola;

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

(18)

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 in LDP e C

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.

#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

(19)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 69

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 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.

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 70

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

(20)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 71

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 di prezzo è negativo è richiesta la re-immissione di prezzo E’ letto il valore della categoria cliente che è assegnato alla variabile catCli

Usando una struttura switch, con discriminante catCli, 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 re-immissione del valore di catCli; quando al_sconto è 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.

(21)

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);

il programma in C

Elementi di Informatica Prof. G. A. Di Lucca - Univ. del Sannio

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;}

} }

while(al_sconto==-1);

il programma in C

(22)

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");

}

il programma in C

Riferimenti

Documenti correlati

– Se Body è composto da una sola istruzione si possono omettere le parentesi

m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è

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 di prezzo è negativo

Alcune operazioni di cast di tipo sono fatte automaticamente, principalmente in relazione alle capacità dei numeri interi, ad esempio assegnando un valore float ad una variabile

• L’istruzione (o il blocco di istruzioni) viene sempre eseguita almeno una volta; al termine viene valutata l’espressione e, finché questa è vera, l’istruzione viene ripetuta

Le strutture di controllo sono costrutti sintattici di un linguaggio di programmazione che servono a specificare se, quando, in quale ordine e quante volte devono essere eseguite

Siano dati in input le informazioni su n libri di una biblioteca creando quattro vettori con il codice del libro, i loro prezzi, il codice della casa editrice e l’anno di

( E' necessario quindi impostare due handler per i segnali SIGINT e SIGUSR1) Scrivere un programma C mamma che acquisisce da tastiera il pid del figlio, imposta un allarme di