• Non ci sono risultati.

Moreno Marzolla

N/A
N/A
Protected

Academic year: 2021

Condividi "Moreno Marzolla"

Copied!
10
0
0

Testo completo

(1)

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

(2)
(3)

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

(4)

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

Area

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

(5)

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

(6)

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:30—12:30 Chimica?

 Ore 12:30—13: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

(7)

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;

}

(8)

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;

}

(9)

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

(10)

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;

}

Riferimenti

Documenti correlati

 Scrivere una funzione inverti() che accetta come parametro un vettore di interi a[] e la sua dimensione dim_a; la funzione inverte gli. elementi di a[] (cioè scambia il

Stabilire i vincoli del progetto Stimare i parametri del progetto Definire milestones e deliverables. While (il progetto è completato o cancellato) loop Definire

 I diagrammi delle classi mostrano anche gli attributi e le operazioni di una classe, e le restrizioni che si applicano al modo con cui gli oggetti sono collegati tra loro.

 Ma in questo caso, i casi di prova devono essere scelti in base al profilo operazionale del sistema, piuttosto che scelti in modo da individuare il maggior numero di errori.

 I diagrammi delle classi mostrano anche gli attributi e le operazioni di una classe, e le restrizioni che si applicano al modo con cui gli oggetti sono collegati tra loro.

relazioni commerciali attraverso tecnologie di trasferimento elettronico di fondi e dati. Moreno Marzolla Tecnologie

Rete privata, basata sulle tecnologie WEB, che ospita le applicazioni Internet su una rete locale E' sostanzialmente una versione “chiusa” di Internet, messa in piedi per agevolare

Le prestazioni di alcuni server degradano pauro- samente all'aumentare del numero di accessi Vi sono tipi di pagine (pagine dinamiche) che vengono gestite meno efficientemente da