• Non ci sono risultati.

Struttura di un programma Un programma è tipicamente strutturato nel seguente modo: Intestazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Struttura di un programma Un programma è tipicamente strutturato nel seguente modo: Intestazione"

Copied!
35
0
0

Testo completo

(1)

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

(2)

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;

(3)

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)

(4)

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)

(5)

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

(6)

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

(7)

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

(8)

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 zero

U: 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

(9)

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;

(10)

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

(11)

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

(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

(13)

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

(14)

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

(15)

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.

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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 …

(22)

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

(23)

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

falso

S1

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

(24)

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

(25)

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)

(26)

Elementi di Informatica

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

S0

Sn

SU E

S2

S1 S

default

c1 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 ‘!’

(27)

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

(28)

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:

(29)

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

} }

(30)

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

(31)

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

(32)

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

(33)

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.

(34)

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

(35)

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

Calcolare il doppio di un valore di un numero di tipo intero letto in input e visualizzare il risultato di tale calcolo. Definizione dei dati

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

Dato un numero intero in input, calcolare e visualizzarne il doppio Definizione della specifica del programma. Calcolare il doppio di un valore di un numero di tipo intero letto

Calcolare il doppio di un valore di un numero di tipo intero letto in input e visualizzare il risultato di tale calcolo. Definizione dei dati

-spesa alberghiera per disabile e un accompagnatore per 6 notti; skipass per tutte le lezioni di sci su 5 giorni; scuola di sci per 5 giorni (10 ore di lezioni

Il 13 dicembre 1948, dopo che alla Società VENCHI UNICA la Commissione Interna degli operai respingeva una proposta dei Sindacati democratici per un preventivo referendum, prima

3 addetti, operazione poi da continuarsi tutto il giorno seguente sempre con pari addetti, consistente nella ricucitura manuale dei lembi di cotico strappati dal

Vai a fare la spesa e calcola il costo totale.. Calcola il costo totale e