Università degli Studi di Brescia
Fondamenti di Programmazione
Docente: Alessandro Saetti
A.A. 2012/2013
ESERCITAZIONE STRUTTURE DI
CONTROLLO E VETTORI
Università degli Studi di Brescia
A.A. 2012/2013
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi
sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi
sono pari oppure dispari
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi
sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi
sono pari oppure dispari
#include <stdio.h>
#include <stdlib.h>
int main()
{
// . . .
Impostiamo la struttura di
partenza di un programma C
system("pause");
exit(0);
}
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi
sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi
sono pari oppure dispari
Partiamo considerando il sotto
problema:
«Stabilire se un numero
è pari o dispari ?»
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi
sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi
sono pari oppure dispari
Il problema da risolvere può
essere così «umanamente»
schematizzato:
Impostiamo la struttura di
partenza
di un programma
C
O
DISPARI
?
PARI
Questo è il dilemma!
1 -ACQUISISCO
PARI!
4
Possiamo dettagliare con maggior rigore la sequenza di operazioni tramite il seguente
flowchart:
INIZIO
1) INPUT
Acquisisco il dato da analizzare
(un numero) e lo tengo a mente.
Acquisisco N
2) ALGORITMO
Valuto, in base alla mia esperienza, se il
numero è pari o dispari. Nel flowchart il
rombo indica una decisione (IF).
E’ pari ?
NO
SI
Soluzione=«Dispari»
Soluzione=«Pari»
3) OUTPUT
Espongo il risultato (soluzione) della
mia analisi
Espongo la soluzione
FINE
Immaginando un approccio «umano» userò la mia esperienza per individuare i passaggi
(algoritmo) che mi consentono l’individuazione della corretta soluzione del problema (è
pari ?)
PROBLEMA
DA RISOLVERE
ESPERIENZA + ANALISI

ALGORITMO
DISPOSITIVI
DI INPUT
DISPOSITIVI
6
DI
OUTPUT
L’attività umana svolta per giungere alla soluzione deve essere «decodificata» con le
«risorse» messe a disposizione da un calcolatore
PROBLEMA
DA RISOLVERE
ISTRUZIONI + ALGORITMO

PROGRAMMA DA ESEGUIRE
DISPOSITIVI
DI INPUT
DISPOSITIVI
7 OUTPUT
DI
Scrivere un programma consiste nel decodificare l’algoritmo in una sequenza di istruzioni
#include <stdio.h>
comprensibili dal computer
#include <string.h>
INIZIO
Acquisisco N
E’ pari ?
NO
SI
Soluzione=«Pari»
Soluzione=«Dispari»
Espongo la soluzione
FINE
PARI O DISPARI ?
Questo è l’algoritmo!
int main()
{
int n;
char soluzione[20];
printf("Digita un numero intero : ");
scanf("%d", &n);
if(n % 2 == 0)
strcpy(soluzione,"pari");
else
strcpy(soluzione,"dispari");
printf("%d: %s!\n", n, soluzione);
}
PARI O DISPARI ?
Questo è il programma!
8
L’algoritmo utilizza «istruzioni umane elementari» (comprensibili ed eseguibili da parte di
una persona) per risolvere un determinato problema. Per creare un programma,
comprensibile ed eseguibile sul calcolatore, occorre tradurre le «istruzioni umane» in
comandi riconosciuti dal computer.
Occorre quindi disporre di un set di comandi che il computer sia in grado di comprendere ed
eseguire (ad esempio un linguaggio di programmazione).
1 - INPUT
 Leggo, Ascolto, Memorizzo …
1 - INPUT
 scanf(), cin >>, int N, char Esito[10] …
2 - ALGORITMO:
 SE N …
o E’ divisibile per 2 ?
o E’ multiplo di 2 ?
o Diviso per 2 da resto zero ?
 Allora
 Memorizzo come soluzione …
 Altrimenti
 Memorizzo come soluzione …
2 - ALGORITMO:
 if ( N
 Non traducibile
 Non traducibile
 % 2== 0
 )
 strcpy(Esito, "Pari")
 else
 strcpy(Esito , "Dispari")
3 - OUTPUT
 Scrivo, Dico, …
TRADUCO
3 - OUTPUT 9
 printf(), cout << …
1 – INPUT: ACQUISIZIONE DEI DATI
INIZIO
(A) Dammi
un numero:
Acquisisco N
E’ pari ?
NO
SI
Soluzione=«Pari»
(C)
Soluzione=«Dispari»
Espongo la soluzione
FINE
(B)
12
La fase di acquisizione dei dati può corrispondere ad una esplicita richiesta (A)
seguita dall’ascolto della corrispondente risposta (B). Ricevuto il dato lo tengo a
mente (C) per la successiva fase di analisi
1 – INPUT: ACQUISIZIONE DEI DATI
La fase di acquisizione dei dati inizia con l’esplicita richiesta (A) …
printf("Digita un numero intero: ");
(A)
C:\Laboratorio>pari
Digita un numero intero:
(B)
… seguita dalla lettura del dato digitato (B) scanf("%d", &n);
Dobbiamo anche tradurre l’azione di «ricordare» il dato
appena letto (C) definendo una variabile che lo contenga:
int n;
(C)
2 – ALGORITMO: ELABORAZIONE DEI DATI
INIZIO
«E’ PARI ?» è un concetto generico. Devo trasformarlo in
Acquisisco N
una sequenza di istruzioni elementari che posso eseguire.
Tale sequenza deve definire una «corretta procedura» per
E’ pari ?
risolvere il problema. Questa «procedura» corrisponde SI
NO
ad uno degli ALGORITMI di soluzione possibili.
Soluzione=«Pari»
Soluzione=«Dispari»
Il risultato, ottenuto eseguendo l’algoritmo, deve essere
Espongo la soluzione
«ricordato» per poi essere utilizzato nella fase successiva.
DATO
FINE
Il rombo rappresenta una decisione basata
sulla condizione scritta al suo interno.
E’ pari ?
SI
NO
DATO
SI
Esito="Pari"
 E’ divisibile per 2 ?
 E’ multiplo di 2 ?
 Il resto della divisione
per 2 è zero ?
NO
Esito=«Dispari"
2 – ALGORITMO: ELABORAZIONE DEI DATI
Dobbiamo trasformare il
concetto «E’ pari ?» in una
sequenza di istruzioni
elementari che possiamo
«umanamente» eseguire.
Devo vedere se il linguaggio di
programmazione utilizzato dispone di
istruzioni analoghe che consentano al
computer di eseguire la stessa valutazione
svolta dalla persona
E’ pari ?
E’ divisibile per 2 ?
NON ESISTE
E’ multiplo di 2 ?
NON ESISTE
Il resto della divisione
per 2 è zero ?
ESISTE
N % 2 == 0
13
2 – ALGORITMO: ELABORAZIONE DEI DATI
Dobbiamo ora tradurre l’istruzione
umana che consente di «prendere
una decisione partendo da una
condizione» con una istruzione
equivalente nel linguaggio di
programmazione scelto.
ESISTE
CONDIZIONE
VERA
if (N % 2 == 0)
…
else
…
FALSA
…
…
Dobbiamo anche tradurre
l’azione di «ricordare» il
risultato del nostro
ragionamento
ESISTE
#include <string.h>
char Esito[10];
strcpy(Esito, "Pari");
14
strcpy(Esito,
"Dispari");
3 – OUTPUT: ESPOSIZIONE DEI RISULTATI
L’esposizione dei risultati
corrisponde alla visualizzazione
a video della soluzione.
ESISTE
printf("%d: %s!\n", n, Esito);
C:\Laboratorio>pari
Digita un numero intero:12
12: pari!
INIZIO
Acquisisco N
E’ pari ?
NO
SI
Soluzione=«Pari»
Soluzione=«Dispari»
Espongo la soluzione
FINE
15
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi
sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi
sono pari oppure dispari
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int n;
char Esito[10];
// INPUT - Leggi Dato
printf("Dammi il numero intero: ");
scanf("%d",&n);
// ALGORITMO - Elaboro
if (n % 2 == 0)
strcpy(Esito,"Pari");
else
strcpy(Esito,"Dispari");
// OUTPUT - Stampa esito
printf("%d: %s\n",n,Esito);
system("pause");
exit(0);
}
Chiaramente il programma poteva essere
semplificato in questo modo
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
// INPUT - Leggi Dato
printf("Dammi il numero intero: ");
scanf("%d",&n);
// ALGORITMO - OUTPUT
if (n % 2 == 0)
printf("%d: Pari\n",n,Esito);
else
printf("%d: Pari\n",n,Esito);
system("pause");
exit(0);
}
Scrivere un programma C che:
- Acquisisca da tastiera numeri interi fintantoché i numeri immessi sono positivi.
- Determini (stampando a video un messaggio) se i numeri immessi sono pari oppure dispari
START
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
do {
// INPUT
printf("Dammi un numero: ");
scanf("%d",&n);
// ALGORITMO - OUTPUT
if (n % 2 == 0)
printf("%d:pari\n",n);
else
printf("%d:dispari\n",n);
Acquisizione numero n
e valutazione se
pari/dispari
} while (n > 0);
n>0?
STOP
system("pause");
exit(0);
}
Scarica

Eser 1.1