Introduzione alla Programmazione
in C++
Moreno Marzolla
moreno.marzolla@pd.infn.it
Moreno Marzolla Fondamenti di Informatica 2
Copyright © 2006 Moreno Marzolla
This work is licensed under the Creative Commons Attribution- Noncommercial-Share Alike 2.5 Italy License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc- sa/2.5/it/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Moreno Marzolla Fondamenti di Informatica 3
Il vostro primo programma in C++
Il vostro primo programma in C++
1: // Primo esempio di programma in C++
2: /* Stampa Hello World! (senza virgolette) */
3: #include <iostream>
4: using namespace std;
5: int main( void ) 6: {
7: cout << Hello, world! << endl;
8: return 0;
9: }
Moreno Marzolla Fondamenti di Informatica 10
E ora che facciamo?
E ora che facciamo?
Questo programma è solo un file di testo; il computer non sa cosa farci
Il computer è in grado solamente di eseguire sequenze di istruzioni codificate come byte (o parole), come avevamo visto
Occorre qualcosa che traduca il programma
leggibile in sequenze di istruzioni macchina
Tale qualcosa è il compilatore C++
Nel nostro caso si chiama g++
Moreno Marzolla Fondamenti di Informatica 11
Quindi?
Quindi?
Supponiamo che il file che contiene il codice sorgente si chiami HelloWorld.cc
Il comando sopra invoca il compilatore
Il compilatore legge il file HelloWorld.cc, e lo traduce
Il risultato (programma eseguibile) viene messo in un nuovo file HelloWorld
Ora è possibile eseguire il programma
> g++ HelloWorld.cc -o HelloWorld
> ./HelloWorld Hello, world!
Moreno Marzolla Fondamenti di Informatica 12
Variabili Variabili
Una variabile è una etichetta a cui è assegnato un valore di un certo tipo
Le variabili hanno un nome
Il nome è una sequenza di caratteri o numeri che inizia con un carattere alfabetico
Es: Nome, XX, XX_1, pippo1
Tipi predefiniti dal C++
int, float, double, char, bool
int XX = 0;
char l = 'a';
float pigreco = 3.14;
double e = 2.47;
int pippo1;
Attenzione: il valore iniziale di pippo1 è indefinito
Moreno Marzolla Fondamenti di Informatica 13
Assegnamenti Assegnamenti
In generale è possibile scrivere cose come:
Questo viene valutato come segue:
Prima si valuta l'espressione a destra dell'operatore di assegnamento (il simbolo '=')
Poi il risultato dell'espressione diventa il valore della variabile a sinistra del simbolo '='
Il codice sopra assegna il valore 100 a
Areafloat Base = 10.0;
float Altezza = 20.0;
float Area;
Area = (Base * Altezza) / 2.0;
Moreno Marzolla Fondamenti di Informatica 14
Attenzione Attenzione
Quanto vale:
X=X+1, vista come equazione aritmetica, non è risolvibile...
...ma questo è C++ !
Prima si valuta la parte destra (X+1 vale 10+1=11)
Poi si assegna tale valore alla parte sinistra
Dopo l'assegnamento, il nuovo valore di X è 11
int X = 10;
X = X + 1;
Moreno Marzolla Fondamenti di Informatica 15
Attenzione Attenzione
Quanto vale
Valgono le solite regole di precedenza degli operatori
Il prodotto ha precedenza maggiore della somma
X*(2+Y) 7*X = 10*(2+12) - 7*2 =
10*14 7*2 = 140 - 14 = 126
int X = 10; int Y = 12;
int Z = 2; int Risultato;
Risultato = X*(2 + Y) - 7*Z;
Moreno Marzolla Fondamenti di Informatica 16
Istruzione condizionale if-then-else
Istruzione condizionale if-then-else
Condizione
Parte then Parte else
vera falsa
int X = 10, Y = 15;
if ( X >= Y ) {
cout << X maggiore o uguale a Y << endl;
} else {
cout << X minore di Y << endl;
}
if ( condizione ) { // parte then
} else {
// parte else
}
In C++
Moreno Marzolla Fondamenti di Informatica 17
Istruzione condizionale if-then
Istruzione condizionale if-then
Il ramo else è opzionale e si può omettere
int num;
cin >> num; // L'utente deve digitare un numero if ( num > 0 && num < 2 ) {
cout << num vale 1 << endl;
}
cout << Procediamo... << endl;
Condizione
Parte then
vera falsa
Moreno Marzolla Fondamenti di Informatica 18
Operatori di confronto Operatori di confronto
X >= Y Vero se X è maggiore o uguale di Y X > Y Vero se X è maggiore di Y
X <= Y Vero se X è minore o uguale di Y x < Y Vero se X è minore di Y
X != Y Vero se X è diverso da Y X == Y Vero se X è uguale a Y
Le condizioni possono essere combinate
Esempi
A && B Vero se entrambe A e B sono vere (AND) A || B Vero se A oppure B sono vere (OR)
!A Vero se A è falso (NOT)
int X = 10, Y = 15, Z=-2;
(X>0 && Y>0) // Vero (X>0 || Y>20) // Vero
( (X<0 || Y<0) && (Z>3) ) // Falso
!(X>Y) // Vero
Moreno Marzolla Fondamenti di Informatica 19
Ciclo while-do
Ciclo while-do
Condizione
Corpo vera
falsa
int X = 5;
while ( X > 0 ) {
cout << X vale << X << endl;
X = X-1;
}
cout << Fine ciclo << endl;
while ( condizione ) { // Corpo
}
In C++
X vale 5 X vale 4 X vale 3 X vale 2 X vale 1 Fine ciclo
L'output generato
Moreno Marzolla Fondamenti di Informatica 20
Il nostro
Il nostro primo secondo programma primo secondo programma
Chiedere all'utente un intero N>0
Chiedere all'utente N numero interi
Stampare la somma dei numeri inseriti
dall'utente
Moreno Marzolla Fondamenti di Informatica 21
Implementazione Implementazione
#include <iostream>
using namespace std;
int main( void ) {
int N; // quandi numeri sommare int somma = 0; // la somma accumulata int num; // il numero inserito dall'utente cout << Digita N << endl;
cin >> N;
while ( N > 0 ) {
cout << Digita un intero << endl;
cin >> num;
somma = somma + num;
N = N-1;
}
cout << La somma vale << somma << endl;
}
Moreno Marzolla Fondamenti di Informatica 22
Laboratorio guidato / 1 Laboratorio guidato / 1
Aula C, piano terra dip. di Matematica
Entrate dall'ingresso in via Paolotti, prima porta a destra (dove c'è lo scivolo); siete in un piccolo atrio, l'aula C è la porta alla vostra sinistra
Ore 11:3012:30 Chimica?
Ore 12:3013:30 Chimica ind + Sc. geologiche?
via Paolotti
via Belzoni via Marzolo
LAB
Noi siamo qui
Moreno Marzolla Fondamenti di Informatica 23
Laboratorio guidato / 2 Laboratorio guidato / 2
Per poter accedere ai computer, è necessario avere un proprio nume utente (username) e password
La prima volta vi verranno assegnati automaticamente (le volte successive li riutilizzate), con la seguente procedura
Quando accendete il computer, vi compare una schermata che vi richiede nome utente e password
In entrambe le caselle, digitate iscriz (senza virgolette)
Vi compare una schermata in cui viene richiesto l'inserimento del vostro Nome e Cognome, Corso di studi e Numero di Matricola
Cliccando (tasto sinistro del mouse) sul pulsante, il sistema vi fa comparire il vostro nome utente e password
Ricopiate con cura username e password su un pezzo di carta (se li perdete, non potete più collegarvi!!)
Chiudete la finestra; tornerete alla schermata iniziale, in cui potete ora inserire il vostro nome utente e password
Moreno Marzolla Fondamenti di Informatica 24
Laboratorio guidato / 3 Laboratorio guidato / 3
Aprite una finestra di terminale
Vi farò vedere come si fa
Utilizzate l'editor emacs per scrivere il vostro programma che chiamerete ad es. prog1.cc
Arrivate col vostro programma già scritto su un pezzo di carta, che ricopierete
Per compilare
Per eseguirlo
emacs prog1.cc &
g++ prog1.cc -o prog1 ./prog1
Moreno Marzolla Fondamenti di Informatica 25
Ciclo do-while
Ciclo do-while
Condizione Corpo
vera
falsa
int X;
do {
cin >> X;
} while ( X < 0 );
cout << Hai scritto << X << endl;
do { // Corpo
} while ( condizione );
In C++
Richiede all'utente un numeroX; se viene inserito un numero negativo, ripete la richiesta.
Moreno Marzolla Fondamenti di Informatica 26
Esercizio Esercizio
Chiedere all'utente una sequenza di interi, terminata con un intero negativo qualsiasi (es.
-1)
Visualizzare il minimo tra tutti gli interi inseriti dall'utente (ad esclusione del numero negativo finale)
Moreno Marzolla Fondamenti di Informatica 27
Implementazione (bozza 1...) Implementazione (bozza 1...)
#include <iostream>
using namespace std;
int main( void ) {
int minimo = ???; // il minimo fin qui trovato int num; // il numero inserito dall'utente do {
cout << Digita un intero << endl;
cin >> num;
if ( num >= 0 ) { if ( num < minimo ) {
minimo = num;
} }
} while ( num >= 0 );
cout << Il minimo vale << minimo << endl;
}
Moreno Marzolla Fondamenti di Informatica 28
Implementazione (bozza 2...) Implementazione (bozza 2...)
#include <iostream>
using namespace std;
int main( void ) {
int minimo = ???; // il minimo fin qui trovato int num; // il numero inserito dall'utente do {
cout << Digita un intero << endl;
cin >> num;
if ( (num >= 0) && (num < minimo) ) { minimo = num;
}
} while ( num >= 0 );
cout << Il minimo vale << minimo << endl;
}
Moreno Marzolla Fondamenti di Informatica 29
Implementazione Implementazione
Cosa scriviamo al posto di ???
Che succede se poniamo minimo=0?
Che succede se poniamo minimo=-1?
Che succede se poniamo minimo=+ infinito?
#include <iostream>
using namespace std;
int main( void ) {
int minimo = ???; // il minimo fin qui trovato int num; // il numero inserito dall'utente do {
cout << Digita un intero << endl;
cin >> num;
if ( (num >= 0) && (num < minimo) ) { minimo = num;
}
} while ( num >= 0 );
cout << Il minimo vale << minimo << endl;
} Moreno Marzolla Fondamenti di Informatica 30
Implementazione (quasi) finale Implementazione (quasi) finale
#include <iostream>
using namespace std;
int main( void ) {
int minimo = 1000000; // il minimo fin qui trovato int num; // il numero inserito dall'utente
do {
cout << Digita un intero << endl;
cin >> num;
if ( (num >= 0) && (num < minimo) ) { minimo = num;
}
} while ( num >= 0 );
cout << Il minimo vale << minimo << endl;
}
Moreno Marzolla Fondamenti di Informatica 31
Pero'...
Pero'...
Che succede se l'utente, guarda caso, inserisce tutti numeri maggiori di 1000000?
Il programma non funziona!
Facciamo così:
Inizializziamo minimo a -1
Se minimo==-1, vuol dire che nessun elemento e' stato inserito; quindi, quando minimo==-1, il primo intero non negativo inserito dall'utente diventa il nuovo minimo
Se minimo != -1, procediamo come prima
Moreno Marzolla Fondamenti di Informatica 32
Implementazione finale!
Implementazione finale!
#include <iostream>
using namespace std;
int main( void ) {
int minimo = -1; // il minimo fin qui trovato int num; // il numero inserito dall'utente do {
cout << Digita un intero << endl;
cin >> num;
if ( num >= 0 ) { if ( minimo == -1 ) {
minimo = num;
} else {
if ( num < minimo ) { minimo = num;
} } } // (*)
} while ( num >= 0 );
cout << Il minimo vale << minimo << endl;
}
Moreno Marzolla Fondamenti di Informatica 34
Esercizi per casa Esercizi per casa
Scrivere un programma che calcola il prodotto di due interi positivi x e y utilizzando la somma
Cioè, x*y deve essere calcolato come x+x+... (y volte)
Scrivere un programma che, dati in input tre interi x, y, z visualizza il massimo tra questi
Nel caso esistano più massimi, ne visualizza uno qualsiasi
Scrivere un programma che chiede in input un intero positivo N e stampa la somma dei numeri interi pari compresi tra 0 e N
Es: se N=13, stampare la somma di 2+4+6+8+10+12
Es: se N=1, deve stampare 0
Moreno Marzolla Fondamenti di Informatica 35
Soluzione:
Soluzione:
Calcolo del massimo di tre interi / 1 Calcolo del massimo di tre interi / 1
Nota 1
max( x, y, z ) = max( max(x, y), z )
Ossia: trovo prima il massimo tra x e y...
...poi il massimo tra quanto appena trovato e z
Come calcolo il max( x, y )?
x > y
Il max è x Il max è y
#include <iostream>
using namespace std;
int main( void ) {
int x; int y;
cin >> x; // Legge x cin >> y; // Legge y if ( x > y ) {
cout << Il massimo è << x << endl;
} else {
cout << Il massimo è << y << endl;
} return 0;
}
Vero Falso
Moreno Marzolla Fondamenti di Informatica 36
Soluzione:
Soluzione:
Calcolo del massimo di tre interi / 2 Calcolo del massimo di tre interi / 2
x > y
Il max è x Il max è z
Falso Vero
y > z x > z
Il max è y Il max è z
Moreno Marzolla Fondamenti di Informatica 37
Soluzione:
Soluzione:
Calcolo del massimo di tre interi / 3 Calcolo del massimo di tre interi / 3
#include <iostream>
using namespace std;
int main( void ) {
int x; int y; int z;
cin >> x; cin >> y; cin >> z;
if ( x > y ) {
// trovo il max tra x e z if ( x > z ) {
cout << Il massimo è << x << endl;
} else {
cout << Il massimo è << z << endl;
} } else {
// trovo il max tra y e z if ( y > z ) {
cout << Il massimo è << y << endl;
} else {
cout << Il massimo è << z << endl;
} } return 0;
}