...

Scarica appunti - Giuseppe Di Capua

by user

on
Category: Documents
26

views

Report

Comments

Transcript

Scarica appunti - Giuseppe Di Capua
Introduzione al linguaggio C++
Prof. Giuseppe Di Capua
Il linguaggio C ++:
STRUTTURA DI UN PROGRAMMA
Un programma in C++ è formato da una sezione di librerie, da una parte di
Dichiarazioni Globali, da una parte denominata main ( programma principale) e da
una seria di funzioni.
Si può così schematizzare:
1. ogni funzione è un insieme di dichiarazioni e di istruzioni racchiuse tra due
parentesi graffe;
2. la funzione main è sempre presente in un programma e gestisce le chiamate alle
altre funzioni;
3. ogni variabile deve essere dichiarata prima dell'utilizzo.
Il linguaggio C ++:
STRUTTURA DI UN PROGRAMMA
La struttura generale
di un programma C++
è:
Librerie
Dichiarazioni Globali
main(argomenti)
{
dichiarazioni locali
Funzione1()
}
Funzione1 (argomenti)
{
dichiarazioni locali
istruzioni
}
2.
SINTASSI
2.1 Alcune regole
1.
Tutte le istruzioni, fatte alcune eccezioni che si vedranno in seguito, terminano
con il ; (punto e virgola)
2.
Le variabili hanno nomi con caratteri maiuscoli o minuscoli (N.B.: Il C++ è
CASE SENSITIVE ovvero c’è differenza tra carattere maiuscolo e minuscolo nei
nomi delle variabili. La variabile Alfa è differente da alfa);
3. Il nome di una variabile non può essere composto da più parole (in tal caso si
utilizza il carattere speciale “_” chiamato underscore, per unire le parole);
4. Il primo carattere può essere o una lettera o “_”.
Esempio di nomi di
variabili corretti:
Esempio di nomi di
variabili NON corretti:
Numero_giorni
Datanascita
3Numero
Data di nascita
2.
SINTASSI
2.2 Identificatori
Gli identificatori particolari sono caratteri o parole particolari usate nel linguaggio.
Esse sono:
1. Le variabili
2. Parole del vocabario del linguaggio (main, if, else, while, for, …)
3. I commenti (sequenze di caratteri racchiuse tra i simboli /* e */ se su più
righe o dopo // se su singola riga).
Ad esempio
/* Questo è un commento di più
righe */
//questo è un commento singola riga
2.
SINTASSI
2.2 Variabili
Tutti gli identificatori variabili devono essere dichiarati prima di essere invocati.
La dichiarazione avviene indicando:
• il tipo di dato (cioè la quantità di memoria necessaria per la memorizzazione e le
operazioni consentite);
• il nome attraverso cui utilizzarlo;
• l’inizializzazione (optionale).
Esempio:
dichiarazioni semplici:
int i, j ;
char c;
float pigraco ;
double x;
dichiarazioni con inizializzazione
int i = 0;
char c = ‘b’ ;
double x = 5.789;
2.
SINTASSI
Le variabili
Le variabili rappresentano un’area di memoria. Ogni variabile viene identificata da un
nome
Si possono distinguere vari tipi di variabili in base alla posizione che occupano nel
corpo del programma, ai valori che possono assumere e alle operazioni che
supportano:
1.
variabili locali o automatiche (dichiarate all’interno di un blocco o funzione,
sono creata al momento della chiamata e distrutte al termine dell’esecuzione);
2.
variabili globali (dichiarate all’esterno di tutte le funzioni, sono visibili su tutto il
codice);
2.
SINTASSI
I tipi di dato
I tipi di dato presenti in C sono di due specie:
1.
tipi semplici (char, int, float, double, void);
2.
tipi strutturati (strutture, vettori,union).
int: si indica il tipo intero in complemento a due che, a seconda della versione C++
utilizzata, può essere a 16 o a 32 bit;
char : è il carattere, rappresentato in genere in ascii. le costamti di tipo char possono
essere dichiarate anche in base alla rappresentazione ottale premettendo al valore il
carattere "backslash". Ad esempio '\7' rappresenta il bell mentre '\0' il null;
double : è un numero rappresentato in virgola mobile; una costante di tipo double è un
numero dove compare il carattere <punto> , come ad esempio 12.3; tutte le costanti
dove compare il punto, o scritte in notazione scientifica ( 1e3 ) sono di tipo double; in
genere il compilatore utilizza più spazio per le variabili di tipo double rispetto alle
variabili di tipo float , per cui la precisione di calcolo risulta superiore.
3. OPERAZIONI
Il C++ ha molti operatori e poche parole chiavi.
Oltre alle parentesi tonde, che il C++ considera come operatoti, i restanti operatori
possono essere divisi nelle categorie principali che sono:
1.
2.
3.
4.
operatori
operatori
operatori
operatori
aritmetici;
relazionali e logici;
di assegnamento;
di incremento e decremento;
3. OPERAZIONI
3.1 Operazioni aritmetiche binarie
Gli operatori aritmetici binari sono:
+ addizione
- sottrazione
* moltiplicazione
/ divisione
% resto della divisione tra interi
Una espressione è una sequenza di costanti,variabili, operatori e chiamate di
funzioni che in genere determina un risultato.
Esempio:
3;
a + b;
3 * x;
2 * (a+b);
3. OPERAZIONI
3.2 Operatori relazionali e logici
Gli operatori relazionali sono utilizzati nelle espressioni e forniscono come risultato un
int di valore 0 per falso e 1 per vero.
Essi sono:
operatori relazionali
< minore
> maggiore
<= minore uguale
>= maggiore uguale
= = uguale
!= diverso
operatori logici
!
negazione
&&
and
||
or
L'unico operatore unario è la negazione (!); tutti gli altri sono binari.
Esempi.
9>7
ha valore VERO o 1
4+3 < 1+3
ha valore FALSO o 0
3*2 == 5+1
ha valore VERO o 1
3. OPERAZIONI
3.3 Assegnazione
Con l'assegnazione si assegna ad una variabile un valore (costante, contenuto di
variabile o il risultato di un'espressione). L’assegnazione richiede il punto e virgola
i = 0;
alfa = alfa + 1;
vuole dire porre 0 in i
significa incrementare di 1 il valore contenuto in alfa
Sono possibili assegnazioni multiple come la seguente :
a=b=c=d=3;
In questo caso le variabili ‘a’, ‘b’, ‘c’ e ‘d’ sono inizializzate tutte con 3. La valutazione
delle operazioni da svolgere avviene da destra a sinistra. La prima operazione è
l'assegnazione d=3 che produce come risultato 3; tale risultato viene assegnato alla
variabile c, producendo nuovamente come risultato 3, che viene assegnato alla variabile
b, e così via.
3. OPERAZIONI
3.3 Assegnazione
Sono, inoltre, possibili notazioni abbreviate:
alfa += 1;
var *= i ;
equivale a
equivale a
alfa = alfa + 1;
var = var * i ;
N.B.: Il C effettua una conversione implicita sul tipo degli operandi :se una variabile è
di tipo intero e l’espressione produce come risultato un valore reale, viene troncata e
portata al reale.
Esempio:
int num, oper2=10;
float oper1;
oper1= 3/2;
num = oper1* oper2;
Num=+=1;
3. OPERAZIONI
3.4 Operazioni di incremento e di decremento
Gli operatori di incremento e decremento “++” e “ --" sono operatori unari che
vengono utilizzati per incrementare o decrementare di 1 un’espressione.
Essi possono essere applicati sia prima che dopo la variabile da modificare, con effetto
diverso.
Esempio:
++a;
equivale a
a = a + 1;
--a;
equivale a
a = a - 1;
a++;
equivale a
x= a++;  x = a; a = a + 1;
a--;
equivale a
x= a--;  x = a; a = a - 1;
In situazioni semplici scrivere “a++” o “++a” è indifferente. Le cose cambiano quando
il risultato di tale operazione è utilizzato all'interno di un'altra espressione.
Esempio:
int a, b=0, c=0;
a = b++ + c++;
a = ++b + ++c;
/* avremo a = 0
/* avremo a = 2
b = 1
b = 1
c = 1
c = 1
*/
*/
5. OPERAZIONI DI INGRESSO/USCITA
Il C++ prevede numerose funzioni per gestire
l’input/output da tastiera, su video, su file, etc. Le
funzioni più comunemente usate, per l’input/output,
sono “cin” e “cout” appartenenti alla libreria standard
di I\O e richiamata attraverso la direttiva
#include <iostream.h> .
5. OPERAZIONI DI INGRESSO/USCITA
5.2 L’Input
La funzione per l’input è “cin”, essa legge i dati digitati da tastiera e li memorizza
nella variabile indicata
La sintassi di cin è la seguente: cin<<nomevariabile;
Esempio:
int a, b, c;
double x;
char val;
cin<< a; /*viene letto
cin<< b<<c; /*vengono
un numero e memorizzato nella variabile a*/
letti due numeri e memorizzati nelle variabili
b e c*/
cin<< val;
val*/
/*viene letto un carattere e memorizzato nella variabile
5. OPERAZIONI DI INGRESSO/USCITA
5.1 L’Output
La sintassi della funzione usata per l’output, “cout”, è:
cout<< variabile o stringa;
Esempio:
cout<<“Salve”;
cout<<a;
//stampa
//stampa a video la parola Salve
a video il contenuto della variabile a
cout<<“il valore di b = “<<b;
/*stampa a video la frase il valore di
b = e a seguire il contenuto della variabile b*/
cout<<c<<endl;
// stampa il contenuto della variabile c e poi va a capo
4. ISTRUZIONI
Si è già introdotta l’operazione di assegnazione, di seguito vengono elencate e poi
spiegate atre istruzioni possibili in C++:
1.
2.
3.
4.
istruzione composta;
istruzione vuota;
istruzione condizionale;
i cicli;
4. ISTRUZIONI
4.1 Istruzione composta
4.2 Istruzione vuota
Tutte le istruzioni terminano con il
carattere punto e virgola “ ;” .
L'istruzione vuota è rappresentata da un
singolo “;”.
L'istruzione composta è una sequenza di
istruzioni racchiusa tra due parentesi
graffe.
La si utilizza quando la sintassi richiede
un'istruzione ma non è richiesta alcuna
azione (specie nel ciclo for).
Esempio:
{
a = 1;
b = 2;
{
c = 3;
d = 4;
}
}
4. ISTRUZIONI
4.3 Istruzione condizionale SELEZIONE a una via
1.
L’istruzione condizionale “if “ ha la forma :
if ( espressione )
{
istruzione1;
istruzione2;
}
istruzione3;
dove l’espressione di condizione tra parentesi permette, se è vera (ovvero contiene un
valore diverso da 0), di eseguire le istruzioni tra parentesi graffe, altrimenti si eseguono
le istruzioni subito dopo l’if (istruzione3).
Se le istruzioni da eseguire nel caso di condizione VERA fosse stata solo una non erano
necessarie le parentesi graffe.
4. ISTRUZIONI
4.3 Istruzione condizionale SELEZIONE BINARIA
2.
L’istruzione condizionale “if – else” ha la forma:
if
{
( espressione )
istruzione1;
istruzione2;
}
else
{
istruzione3;
}
dove l’espressione di condizione tra parentesi permette, se è vera (ovvero contiene un
valore diverso da 0), di eseguire le istruzioni 1 e 2, altrimenti si esegue l’istruzione3.
Se le istruzioni da eseguire nel caso di condizione VERA o FALSA sono solo una non
sono necessarie le parentesi graffe.
4. ISTRUZIONI
4.3 Istruzione condizionale NIDIFICATA
Le istruzioni condizionali possono essere annidate una nell’altra, o possono essere
scritte una dietro l’altra. ma questo potrebbe potere a situazioni di ambiguità.
L’istruzione condizionale “if – else” NIDIFICATA ha la forma:
2.
if
{
( condizione1)
if (condizione2)
istruzione1;
else
istruzione2;
}
else
{
if (condizione3)
istruzione3;
else
istruzione4;
}
4. ISTRUZIONI
4.3 Istruzione condizionale a CASCATA
Le istruzioni condizionali possono essere annidate una nell’altra, o possono essere
scritte una dietro l’altra. ma questo potrebbe potere a situazioni di ambiguità.
L’istruzione condizionale “if ” A CASCATA ha la forma:
2.
if
{
( condizione1)
istruzione1;
}
if
{
( condizione2)
istruzione2;
}
if
{
( condizione3)
istruzione3;
}
4. ISTRUZIONI
4.3 Istruzione condizionale SELEZIONE MULTIPLA
Un’altra istruzione utilizzata per rendere più eleganti e strutturati i programmi, è quella
introdotta dalla parola chiave switch , per la selezione multipla. Con tale istruzione è
possibile testare un’espressione, che può avere diversi valori di tipo intero o carattere,
e per ogni caso individuare una serie di azioni da effettuare.
3.
l’istruzione condizionale “switch” ha la forma:
switch ( espressione )
{
case costante_1 : istruzione_1;
break;
case costante_2 : istruzione_2 ;
break;
case ... : ...... break;
case costante_n : istruzione_n;
break;
default : istruzioni ; break;
}
4. ISTRUZIONI
4.3 Istruzione condizionale
Esempi:
1. Assegnare a min il valore minore tra a e b.
if ( a< = b )
\*min = a < b ? a : b ; *\
min = a;
else
min = b;
2. Determinare il maggiore tra tre numeri.
if (a > b )
max = a;
else
max = b;
if( max < c )
max=c;
4. ISTRUZIONI
4.3 Istruzione condizionale
Esempi:
3. Dati due numeri max e min ordinarli.
if( max < min )
{
tmp = max;
max = min;
min = tmp ;
}
4. ISTRUZIONI
4.4 Istruzioni di ciclo
Ci sono tre istruzioni di ciclo:
1.
istruzione while (controllo in testa);
2.
istruzione do- while (controllo in coda);
3.
istruzione for (ciclo enumerativo).
1.
L’istruzione while permette di ripetere un blocco per tutto il tempo che la
condizione, posta tra parentesi, risulta vera.
Esempio:
int i = 0;
while ( i < 20)
{
cout<<“Il valore di i è :”<<i<<endl;
i= i+1;
}
\*stampa i numeri da 0…19*\
4. ISTRUZIONI
4.4 Istruzioni di ciclo
2.
L’istruzione do-while valuta l’espressione di condizione solo dopo avere
eseguito il corpo del ciclo.
Esempio:
int i = 0;
do
{
cout<< “Il valore di i è “<<i<<endl;
i= i+1;
} while( i < 20 );
\*stampa i numeri da 0…19*\
N.B.: CONTRARIAMENTE ALLA TEORIA SI CICLA PER VERO E SI ESCE
DAL CICLO PER FALSO!
4. ISTRUZIONI
4.4 Istruzioni di ciclo do-while
Esempio:
int b,h,a;
char risp;
do
{
cout<< “Inserisci base e altezza rettangolo”;
cin>>b;
cin>>h;
a=b*h;
cout<<“il valore dell’area è “<< a<<endl;
cout<<“altro calcolo? (S o N) “;
cin>>risp;
} while( risp ==‘s’);
\*Riesegue il programma finchè l’utente non risponde N alla
domanda*\
N.B.: CONTRARIAMENTE ALLA TEORIA SI CICLA PER VERO E SI ESCE
DAL CICLO PER FALSO!
4. ISTRUZIONI
4.4 Istruzioni di ciclo
1.
L’istruzione for permette di ripeter un blocco per un numero di volte specificato.
Essa ha la forma :
for (valore di inizializzazione;condizione;valore di incremento )
{
istruzione; }
Questo ciclo è equivalente al seguente:
valore di inizializzazione;
while (condizione )
{
istruzioni;
valore di incremento;
}
4. ISTRUZIONI
4.4 Istruzioni di ciclo
Esempi:
for (i=0; i<20; i++)
cout<<“Il valore di i è “<<i;
Se il corpo del FOR ha più di una istruzione allora richiede le parentesi graffe
In un ciclo for tutte e tre le espressioni possono anche essere l'istruzione vuota:
for( ; ; )
cout<<“questa riga viene ripetuta indefinitamente”;
6. ESEMPI DI SEMPLICI PROGRAMMI
Problema 1: Calcolare l'area di un rettangolo.
output:
area.
Input:
base,altezza.
limiti:
(base>0) && (altezza>0)
pseudo codice:
Inizio
leggi (base, altezza)
se ( (base > 0) && (altezza > 0) allora
area = base*altezza
scrivi (area)
altrimenti
scrivi (“Errore nei dati”)
fine
La codifica in C++ dell’algoritmo :
#include
<iostream.h>
main()
{
int base, altezza, area;
cout<<“Inserisci base e altezza”;
cin>>b>>h;
if (base > 0) && (altezza > 0)
{
area = base * altezza;
cout<<“Area = “<<area<<endl;
}
else
cout<<“ERRORE nei dati”;
system(“pause”);
}
Problema 2: Calcolare l'area del quadrato inscritto e circoscritto in una circonferenza.
obiettivo:
output:
Input:
limiti:
calcolare l'area dei due quadrati.
area_inscritta, area_circoscritta.
raggio.
(raggio>0).
Pseudo codice
Inizio
leggi (raggio)
se(raggio>0)
area_circoscritta = 4 * raggio * raggio
area_inscritta = 2 * raggio * raggio
scrivi (area_circoscritta)
scrivi (area_inscritta)
altrimenti
scrivi ("errore“)
fine
La codifica in C++ dell’algoritmo :
#include <iostream.h>
main()
{
int raggio, area_inscritta, area circoscritta;
cout<<“inserisci raggio “;
cin>>raggio;
if (raggio>0)
{
area_circoscritta = 4*raggio*raggio;
area_inscritta = 2*raggio*raggio;
cout<<area_circoscritta<<“ “<<area_inscritta<<endl;
}
else
cout<<“ERRORE";
system(“pause”);
}
Problema 3: Stampare i numeri pari da 0 a 100.
output:
numero di pari, numero di dispari;
input:
nessuno ;
algoritmo:
Inizio
c=0
mentre c<=100 esegui
scrivi (c)
c=c+2
finemetre
Fine
La codifica in C++ dell’algoritmo :
#include <iostream.h>
main()
{
int c;
while(c<=100)
{
cout<< c<<endl;
c+=2;
}
system(“pause”);
}
Problema 3: Contare tra N numeri quanti sono i numeri pari e quanti sono I dispari
output:
numero di pari, numero di dispari;
input:
Il numero N e gli N numeri
algoritmo:
leggi il numero n dei numeri;
ripeti n vote
leggi il prossimo numero;
se è pari, aggiorna il numero dei pari;
altrimenti aggiorna il numero dei dispari;
stampa il risultato.
Problema 3: Contare tra N numeri quanti sono i numeri pari e quanti sono I dispari
Pseudocodifica
Inizio
leggi(N)
c=1;
mentre c<=N esegui
leggi (numero)
se(numero MODULO 2==0) allora
pari = pari+1
altrimenti
dispari = dispari +1
finese
c=c+1
Finementre
Scrivi(pari)
Scrivi(dispari)
Fine
La codifica in C ++dell’algoritmo :
#include <iostream.h>
main()
{
int n,i, numero, pari=0, dispari=0;
cout<<"Inserisci numero dei valori da esaminare: ";
cin>>n;
for (i=1; i<=n; i++)
{
cout<<"Inserisci un valore “;
cin>>numero;
if ( numero % 2 == 0)
pari++;
else
dispari++;
}
cout<<"Pari = “<< pari<<endl;
cout<<“Dispari = “<< dispari<<endl;
system(“pause”);
}
Fly UP