Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Introduzione allaProgrammazione
in C++Moreno Marzolla
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
> ./HelloWorldHello, world!
Moreno Marzolla Fondamenti di Informatica 12
VariabiliVariabili
� 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
AssegnamentiAssegnamenti
� 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 Area
float Base = 10.0;float Altezza = 20.0;float Area;
Area = (Base * Altezza) / 2.0;
Moreno Marzolla Fondamenti di Informatica 14
AttenzioneAttenzione
� 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
AttenzioneAttenzione
� 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 numeroif ( 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 confrontoOperatori di confrontoX >= Y Vero se X è maggiore o uguale di YX > Y Vero se X è maggiore di YX <= Y Vero se X è minore o uguale di Yx < Y Vero se X è minore di YX != Y Vero se X è diverso da YX == 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 5X vale 4X vale 3X vale 2X vale 1Fine ciclo
L'output generato
Moreno Marzolla Fondamenti di Informatica 20
Il nostro Il nostro primoprimo secondo programma 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
ImplementazioneImplementazione
#include <iostream>using namespace std;
int main( void ){
int N; // quandi numeri sommareint somma = 0; // la somma accumulataint num; // il numero inserito dall'utentecout << �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 / 1Laboratorio 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:30�12:30 Chimica?� Ore 12:30�13:30 Chimica ind + Sc. geologiche?
via Paolotti
via
Be
lzon
i
via
Marz
olo
LAB
Noi siamoqui
Moreno Marzolla Fondamenti di Informatica 23
Laboratorio guidato / 2Laboratorio 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 / 3Laboratorio 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
verafalsa
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
EsercizioEsercizio
� 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 trovatoint num; // il numero inserito dall'utentedo {
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 trovatoint num; // il numero inserito dall'utentedo {
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
ImplementazioneImplementazione
� 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 trovatoint num; // il numero inserito dall'utentedo {
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) finaleImplementazione (quasi) finale
#include <iostream>using namespace std;
int main( void ){
int minimo = 1000000; // il minimo fin qui trovatoint num; // il numero inserito dall'utentedo {
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 trovatoint num; // il numero inserito dall'utentedo {
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 casaEsercizi 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 / 1Calcolo 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 xcin >> y; // Legge yif ( 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 / 2Calcolo 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 / 3Calcolo 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 zif ( x > z ) {
cout << �Il massimo è � << x << endl;} else {
cout << �Il massimo è � << z << endl;}
} else {// trovo il max tra y e zif ( y > z ) {
cout << �Il massimo è � << y << endl;} else {
cout << �Il massimo è � << z << endl;}
}return 0;
}