Sei sulla pagina 1di 9

2

Lo scopo

Il primo esperimento
Ver. 2.4

Si vuole scrivere un programma in linguaggio C che chieda allutente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video

2010 - Claudio Fornaro - Corso di programmazione in C

Soluzione informale

Le variabili

Le operazioni da svolgere saranno le seguenti, nellordine indicato (quindi costituiscono lalgoritmo di soluzione di questo problema):
1. Chiedere il primo numero 2. Chiedere il secondo numero 3. Calcolare la somma del primo numero e del secondo numero 4. Visualizzare il risultato

I numeri richiesti vengono immagazzinati nella memoria centrale del calcolatore (RAM) Ciascun numero sar immagazzinato in una piccola porzione di memoria detta variabile costituita da un certo numero di byte A ogni variabile il programmatore d un nome per potersi riferire ad essa

Le variabili

Le variabili

Allora la sequenza delle operazioni da svolgere pu essere descritta pi dettagliatamente come segue:
1. Chiedere il primo numero e metterlo in una variabile di nome A 2. Chiedere il secondo numero e metterlo in una variabile di nome B 3. Calcolare la somma di A e B 4. Visualizzare il risultato

Anche il risultato della somma dovr essere immagazzinato nella memoria del calcolatore in una variabile, quindi avremo:
1. Chiedere il primo numero e metterlo in una variabile di nome A 2. Chiedere il secondo numero e metterlo in una variabile di nome B 3. Calcolare la somma di A e B e mettere il risultato in una variabile di nome S 4. Visualizzare il contenuto della variabile S

Riduzione allessenziale

Input da tastiera

Riducendo al minimo indispensabile quanto scritto senza perdere alcuna informazione, si ha la seguente sequenza di operazioni:
Chiedere A Chiedere B A+BS Visualizzare S Input Input Elaborazione Output

Input significa mettere dentro


Le operazioni di input sono quelle tramite le quali il calcolatore riceve dei dati dallesterno Per leggere un numero dalla tastiera e memorizzarlo in una variabile si pu ad esempio utilizzare la funzione scanf: scanf("%d", &A) Notare che la variabile A preceduta dal carattere & La funzione precedente assegna ad A il valore intero (i dettagli in seguito) letto dalla tastiera

10

Output su video

Assegnazioni di variabili

Output significa mettere fuori


Le operazioni di output sono quelle tramite le quali il calcolatore mostra i risultati Per visualizzare il valore di una variabile si pu utilizzare ad esempio la funzione printf: printf("%d", S) Notare che la variabile S non preceduta dal carattere & La funzione precedente visualizza un numero intero: quello contenuto nella variabile A (i dettagli in seguito)

Assegnare un valore ad una variabile significa memorizzare in essa un valore Per assegnare un valore si usa il simbolo =: X = 12 Il valore pu essere il risultato di un calcolo: S = A+B questo indica che in S viene memorizzato il valore risultante dal calcolo A+B Il segno = significa prende il valore di:

S prende il valore del risultato di A+B

Ogni volta che si assegna un valore ad una variabile, il contenuto precedente viene perso

11

12

Bozza di soluzione

Punto e virgola

Con quanto visto, la sequenza di operazioni viste precedentemente diventa: scanf("%d", &A) scanf("%d", &B) S = A + B printf("%d", S) Ma mancano ancora alcune parti per essere un programma C completo

Le istruzioni devono terminare sempre con un punto e virgola: scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S);

13

14

Definizione delle variabili


Il programma principale

Tutte le variabili utilizzate nel programma devono essere definite Le definizioni vanno collocate tutte insieme prima delle istruzioni eseguibili: int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); int indica che A, B ed S sono variabili adeguate a contenere valori interi

Le istruzioni che costituiscono il programma devono essere racchiuse tra parentesi graffe per formare un blocco. Se questo lunico presente, deve essere chiamato main: main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); }

15

16

Il programma principale

I file di intestazione

Per far terminare il programma, si usa listruzione return (seguita da un numero, in genere 0) collocata alla fine del blocco main: main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); return 0; }

Per utilizzare le funzioni di input/output (I/O) necessario che allinizio del file C sia indicato il nome del file di intestazione che le descrive (stdio.h) con la direttiva #include: #include <stdio.h> main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); return 0; }

17

18

int main()

Compilazione

Sebbene non obbligatorio secondo lo standard, molti compilatori segnalano un errore se main non preceduto da int #include <stdio.h> int main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); return 0; }

Ora il programma pu essere compilato ottenendo il corrispondente file eseguibile Mandando in esecuzione leseguibile il programma chieder due numeri e dar come risultato il valore della somma
x
C:\>primo.exe 12 Attende linput (di A) 23 35 Attende linput (di B)

Visualizza S

19

20

Miglioramento input

Miglioramento input

Quando il programma parte, non informa lutente di essere in attesa che egli introduca due valori da sommare E utile far precedere ciascuna scanf da unistruzione printf che informi lutente su che cosa egli debba fare: printf("Introduci 1o valore: "); scanf("%d", &A); printf("Introduci 2o valore: "); scanf("%d", &B);

Dopo i miglioramenti indicati, allesecuzione si ottiene la seguente schermata:


x
C:\>primo.exe Introduci 1o valore: 12 Introduci 2o valore: 23 35

21

22

Miglioramento output

Risultato finale

Il risultato del calcolo viene mostrato a video come semplice numero, ma preferibile aggiungere una scritta che ne specifichi il significato Si pu aggiungere tale scritta tra le virgolette della stessa printf che visualizza S: printf("La somma vale: %d", S);

Dopo i miglioramenti indicati, si ottiene la seguente schermata:


x
C:\>primo.exe Primo valore: 12 Secondo valore: 23 La somma vale: 35

23

24

Soluzione finale
#include <stdio.h> int main() { int A, B, S; printf("Primo valore? "); scanf("%d", &A); printf("Secondo valore? "); scanf("%d", &B); S = A + B; printf("La somma vale: %d", S); return 0; }

Esercizi
1.

2.

Scrivere un programma che chieda di introdurre 3 numeri A, B e C dalla tastiera e successivamente visualizzi il risultato dei seguenti calcoli: 1) AB 2) AB+C 3) ABC Scrivere un programma che chieda due numeri e li memorizzi nelle variabili A e B. Il programma deve ora scambiare il contenuto di A e di B (es. se inizialmente A contiene 12 e B 27, dopo lo scambio A contiene 27 e B 12).
Suggerimento: si considerino 2 bicchieri, uno rosso che contiene acqua e uno blu che contiene aranciata, travasando opportunamente, si vuole che quello rosso contenga aranciata e quello blu acqua.

25

26

Soluzione esercizio 1
1.

Soluzione esercizio 1
(Continuazione) X = A-B; printf("Risultato 1 = %d\n", X); Y = AB+C; printf("Risultato 2 = %d\n", Y); Z = AB-C; printf("Risultato 3 = %d\n", Z); return 0; } Nota: \n fa s che la riga successiva venga visualizzata a capo ( il ritorno a capo)

Prima soluzione: #include <stdio.h> int main() { int A, B, C, X, Y, Z; printf("Primo valore? "); scanf("%d", &A); printf("Secondo valore? "); scanf("%d", &B); printf("Terzo valore? "); scanf("%d", &C);
continua...

27

28

Soluzione esercizio 1

Variazioni esercizio 1

Schermata risultante dallesecuzione:


x
C:\>primo.exe Primo valore? 44 Secondo valore? 23 Terzo valore? 4 Risultato 1 = 21 Risultato 2 = 25 Risultato 3 = 17 C:\>_

Poich i risultati dei calcoli sono memorizzati in variabili diverse, si possono eseguire prima i 3 calcoli e poi visualizzare i 3 risultati: X = AB; Y = AB+C; Z = ABC; printf("Risultato 1 = %d\n", X); printf("Risultato 2 = %d\n", Y); printf("Risultato 3 = %d\n", Z);

29

30

Variazioni esercizio 1

Variazioni esercizio 1

In questo esempio le variabili X, Y e Z dopo essere state visualizzate non vengono pi utilizzate, si pu allora risparmiare memoria definendo e utilizzando solo la X (ma non si possono fare prima i 3 calcoli e poi le 3 visualizzazioni): X = AB; printf("Risultato 1 = %d\n", X); X = AB+C; printf("Risultato 2 = %d\n", X); X = ABC; printf("Risultato 3 = %d\n", X);

Si possono utilizzare i valori intermedi: X = AB; printf("Risultato 1 = %d\n", X); qui X vale AB X = X+C; printf("Risultato 2 = %d\n", X); qui X vale AB+C X = XCC; printf("Risultato 3 = %d\n", X);

31

32

Variazioni esercizio 1

Soluzione esercizio 2

Si possono indicare i calcoli anche nella funzione printf(): printf("Ris 1 = %d\n", AB); printf("Ris 2 = %d\n", AB+C); printf("Ris 3 = %d\n", ABC); In questo esercizio una soluzione utile in quanto i valori calcolati non servono ad altro e non serve memorizzarli

Non si pu scrivere: A = B; B = A; Eseguendo listruzione A=B: il (vecchio) valore di A viene perso e A assume il (vecchio) valore di B Nella successiva istruzione B=A: B assume il nuovo valore di A (appena assegnato, cio il vecchio B); Quindi alla fine entrambe le variabili contengono il vecchio valore di B

33

34

Soluzione esercizio 2

Soluzione esercizio 2

Serve una variabile temporanea di scambio: Temp = A; salva il vecchio A in Temp A = B; copia in A il vecchio B copia in B il vecchio A salvato B = Temp; in Temp
A Temp B

La soluzione con 2 variabili temporanee meno efficiente (usa una variabile in pi ed esegue unoperazione di assegnamento in pi) e non quindi preferibile: TempA = A; TempB = B; A = TempB; B = TempA;

Il codice completo nel file con le soluzioni