10

Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

Introduzione allaProgrammazione

in C++Moreno Marzolla

[email protected]

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

Page 2: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v
Page 3: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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

Page 4: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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

Page 5: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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

Page 6: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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

Page 7: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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;

}

Page 8: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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;

}

Page 9: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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

Page 10: Introduzione alla Programmazione in C++...la porta alla vostra sinistra Ore 11:30—12:30 Chimica? Ore 12:30—13:30 Chimica ind + Sc. geologiche? via Paolotti v i a B e l zo n i v

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;

}