I Dati
i tipi di.dati possono essere classificati in:
tipi semplici o elementari
tipi strutturati al cui interno vi è un’aggregazione di dati;
ogni linguaggio di programmazione mette a disposizione
un set di tipi di dati le cui proprietà e struttura sono
definite da esso: essi prendono il nome di tipi di dati
predefiniti, ma lascia anche l’opportunità al
programmatore di definirne altri che prendono il nome di
dati definiti dall’utente
Il tipo intero
Rappresenta un sottoinsieme dell’insieme Z dei numeri
relativi la cui estensione è determinata dal numero dei bit
(N) che il linguaggio mette a disposizione per rappresentarlo
secondo la regola -2N-1, +2N-1 con un bit riservato al
segno.
Qualora il risultato di un’operazione esce fuori da questo
intervallo si genera un errore di overflow o underflow. Un
altro errore che si può verificare è la divisione by 0. questi
errori che si possono verificare durante l’esecuzione di un
programma vengono segnalati come errori di run-time.
Il tipo intero
Le operazioni che si possono eseguire su questi dati sono
le quattro operazioni algebriche la cui divisione deve dare
risultato intero (10/4=2) con l’accorgimento di evitare una
divisione per 0.
Essi permettono anche l’aritmetica modulare che
rappresenta il resto delle divisione intera.
Le operazioni di confronto sono comuni a tutti i tipi di dati il
cui dominio è totalmente ordinato e sono >, >=, <,<=, = e !=
che indica il diverso o not=.
Il risultato delle operazioni di confronto è un valore vero o
falso.
Il tipo reale
Il tipo reale è rappresentato in virgola mobile dove una
serie di bit sono destinati alla mantissa che rappresenta
le cifre che compongono il numero e una parte
destinata all’esponente che determina la posizione
della virgola se N sono i bit destinati alla mantissa e M
quelli per l’esponente il loro range sarà -2N-1*10 -exp,
+2N-1*10 –exp dove exp vale 2M-1.
Con i dati di tipo reale si possono effettuare tutte le
operazioni degli interi tranne la divisione intera che
diventa decimale e il modulo. Ma si allarga ad esso
tutte le operazioni di potenza, esponente, e si
definiscono tutte le funzioni matematiche che hanno
per dominio e condominio i valori reali. Anche in questo
insieme sono definite le operazioni di confronto e gli
errori di run-time degli interi.
Il tipo carattere
Rappresentano tutti i caratteri disponibili nel computer. Su
di essi si possono effettuare le operazioni di confronto,
essendo un insieme totalmente ordinato.
Ma quale valore essi assumono? Assumono tutti i valori
definiti nel codice ASCII, il quale ad ogni carattere fa
corrispondere un valore numerico
Per distinguere il carattere 1 dal numero 1 i caratteri vano
racchiusi tra apici cosi ‘1’ è il carattere che è diverso dal
valore intero o numerico 1.
Del resto con il simbolo a si intende una variabile che può
contiene la lettera ‘a’.
Va anche sottolineato che ‘a’ è diversa da’A’, infatti il loro
codice differisce di un valore di 32 (97 la prima, 65 la
seconda).
Il tipo booleano
Le variabili booleane possono assumere due soli valori
costanti: vero o falso; questi tipi di dati sono importanti
nella definizione delle condizioni e dei risultati dei confronti.
Le operazioni che si possono effettuare sono l’or, l’and e il
not:
l’operatore not nega il valore di verità dell’operando su cui
agisce.
L’operatore or richiede due operandi e dà come risultato
vero se almeno una dei due operandi è vero
L’operatore and richiede due operandi e dà come risultato
vero se entrambi gli operandi sono veri.
Le istruzioni
• La sequenza
• La selezione
• L’iterazione
La sequenza
Lettura cin>>a;
Scrittura cout<<“questo è un messaggio”
Assegnamento a=3; a=b; a=b+4;
Incremento a++; a--; a=a+b;
Richiamo di funzioni a=sqrt(b);
Richiamo di procedure line(3,3,10,10);
La selezione
Binaria
Permette di modificare il flusso dell’algoritmo tra due
possibili vie:
Una relativa al verificarsi della condizione testata e l’altra al
caso falso
Multipla
Permette di modificare il flusso dell’algoritmo tra diverse
possibili alternative ognuna relativa ad un valore
dell’espressione che si valuta:
La selezione Binaria
if (condizione)
{
blocco_istruzione_caso_vero
}
else
{
blocco_istruzione_caso_falso
}
La selezione Binaria
La condizione è un’espressione booleana
a==b
a!=b
a>b && a<c
a<b ||a>=c
La selezione Binaria
Il ramo della condizione falsa (caso else) è opzionale
E può avere la seguente sintassi
if (condizione)
{
blocco_istruzione_caso_vero
}
La selezione Binaria
il blocco istruzione contiene istruzioni in sequenza e può
contenere al suo interno un’altra istruzione di selezione:
Infatti il blocco di selezione è considerato un’unica
istruzione
if (condizione)
{
if (condizione)
{
blocco_istruzione_caso_vero
}
else
{
blocco_istruzione_caso_falso
}
}
else
{
blocco_istruzione_caso_falso
}
La selezione multipla
Permette di modificare il flusso dell’algoritmo tra diverse
possibili alternative ognuna relativa ad un valore
dell’espressione che si valuta:
La selezione multipla
Ha la seguente sintassi:
Switch (espressione){
Case 1:{
blocco_istruzione_caso_1
}
break;
Case 2:{
blocco_istruzione_caso_2
}
break ;
Case 3:{
blocco_istruzione_caso_3
}
break;
Default {
blocco_istruzione
}
}
La selezione multipla
Come si nota a differenza della selezione binaria non si
valuta una condizione, ma un’espressione che può
assumere diversi valori di tipo numerico, carattere o di
valori costanti
Il caso default è opzionale
L’iterazione
Con controllo in testa while
Con controllo in coda do.. while
Con contatore for
L’iterazione while
La sintassi è la seguente:
while (condizione)
{
blocco istruzione
}
Il blocco di istruzione viene ripetuto fino a quando la condizione risulta
vera
Quante volte viene ripetuto il ciclo?
L’iterazione while
Quante volte viene ripetuto il ciclo?
Questo dipende da come viene espressa la condizione e la modalità di
modificarne il valore di verità
Vi sono dei cicli che non vengono mai eseguiti
nel caso la condizione risulta falsa al primo test
Esempio
Int a=0
While (a<0)
{
cout <<a;
}
L’iterazione while
Quante volte viene ripetuto il ciclo?
Vi sono dei cicli che non terminano mai
nel caso la condizione risulta sempre vera
Esempio
Int a=0;
While (a==0)
{
cout <<a;
}
L’iterazione while
Quante volte viene ripetuto il ciclo?
Vi sono dei cicli di cui possiamo dire quante volte vengono eseguiti
nel caso la condizione ha un valore iniziale e un valore finale
Esempio
Int a=0;
While (a<10)
{
cout <<a;
a++;
}
Il ciclo verrà eseguito esattamente 10 volte
L’iterazione while
Quante volte viene ripetuto il ciclo?
Vi sono dei cicli che non possiamo prevedere quante volte vengono eseguiti
nel caso la condizione diventa falsa al verificarsi di un certo evento che non
possiamo prevedere
Esempio
while(!kbhit());
Int ,n,a=0;
While (a<100)
{
cin>>n;
a=a+n;
}
cout<<a;
L’iterazione do… while
Viene definito con controllo in coda perché prima esegue il blocco di
istruzione e poi valuta se lo deve ripetere:
La sintassi è la seguente:
do
{
blocco _struzione
}
while (condizione);
Il blocco di istruzione viene ripetuto fino a quando la condizione risulta
vera
Quante volte viene ripetuto il ciclo?
la risposta è almeno una volta
Il numero preciso dipende da come viene posta la condizione
secondo i criteri visti per il While
Con il do…while non si può implementare il caso che il ciclo non
venga mai eseguito.
L’iterazione
In realtà si può affermare che ogni ciclo while si può
tradurre in un ciclo do..while e viceversa, con opportuni
accorgimenti
Vediamo alcuni esempi:
L’iterazione
Int a=0;
While (a<10)
{
cout <<a;
a++;
}
Int a=0;
do
{
cout <<a;
a++;
}
While (a<10);
L’iterazione: un uso particolare costruire menù di scelta:
bool continua = true;
int scelta;
int main(){
do{
cout<<“inserire un numero tra 1 e 3 , 0 per terminare”
cin>>scelta;
switch(scelta){
case 1: cout<<endl<<“hai premuto 1”; break;
case 2: cout<<endl<<“hai premuto 2”; break;
case 3: cout<<endl<<“hai premuto 3”; break;
case 0: continua = false; break;
default cout<<endl<<“scelta errata”;
}
//fine switch
} while (continua);
return 0;
}
// fine main
L’iterazione for
Detto anche ciclo con contatore
Si utilizza quando è noto il numero delle volte che si vuole eseguire il ciclo
La sintassi è la seguente:
for (contatore = valore_iniziale; condizione_di_uscita; incermento/decremento )
{
blocco istruzione
}
L’iterazione for
Contatore = valore_iniziale
Vuol dire che devo attribuire alla variabile che funge da contatore del
ciclo un valore iniziale
Es cont=0;
cont=1;
cont=1000;
cont=-30;
L’iterazione for
Condizione di uscita
Esprime la condizione di uscita del ciclo, cioè il valore finale che deve
assumere la variabile contatore
Es
cont<100;
cont<=100;
cont>0;
cont>=1;
cont>= -10;
cont <-100:
L’iterazione for
Incremento/decremento
Indica ad ogni ciclo di quanto (il passo) la variabile contatore deve essere
incrementata o decrementata.
Di solito il passo è unitario
E si incrementa quando il valore iniziale della variabile contatore è minore
del valore finale, altrimenti si decrementa
Esempi
for(cont=0; cont<100; cont++)
//cont è di tipo int
{
}
for(cont=10; cont>0; cont--)
{
}
for(cont=0; cont<100; cont+=2)
{
}
for(cont=0; cont<100; cont+=0.20) // cont è di tipo float
{
}
L’iterazione for
Il ciclo for può essere tradotto nel while e viceversa?
La risposta è si
Vediamo alcuni esempi
Int a=10;
while (a>0)
{
cout <<a;
a--;
}
for (int a=10; a>0; a--)
cout<<a;
L’iterazione for
Il ciclo for può essere tradotto nel while e viceversa?
La risposta è si
Vediamo alcuni esempi
char c=‘a’;
while (c<=‘z’)
{
cout <<c;
c++;
}
for (char c=‘a’; c<=‘z’; c++)
cout<<c<<“ “;
L’iterazione for
Anche questo costrutto si può nidificare vediamo il codice che calcola e
stampa a video la tavola pitagorica
for (i=1;i<=10;i++){
for (j=1;J<=10;j++)
cout<<i*j<<“ “;
cout<<endl;
}
Esercizio
Scrivere un programma C++ che permette di scegliere una delle seguenti
funzionalità
1. Visualizzare i primi n numeri
2. Visualizzare i primi n numeri pari
3. Visualizzare i primi n numeri dispari
4. Visualizzare i primi n numeri primi
5. Visualizzare i primi n numeri della serie di Fibonacci
6. Dato in input n calcolare n!
7. Dato in input n stampare le prime n righe del triangolo di Tartaglia
Il compito deve essere consegnato non oltre la prima ora di lunedì 7 maggio
Indicazioni e suggerimenti per lo svolgimento
Nelle pagine successive
Indicazioni
Il programma deve essere realizzato con l’uso di:
Selezione multipla e deve contenere un ciclo continuo fino a quando l’utente
decide di uscire dal programma
Ogni caso di scelta deve essere realizzato con un sottoprogramma
Ogni caso deve essere realizzato con il ciclo for
Suggerimenti
Serie di Fibonacci
0 1 1 2 3 5 8 13……
n!
è il fattoriale di n esso assume i seguenti valori
se
n=0 fatt(n)=1
Altrimenti fatt(n(= n*n-1*n-2*
*2*1
cioè è il prodotto dei numeri da 1 a n
Triangolo di Tartaglia
Ogni elemento è dato da j!/(k!*(j-k)!
Con J che va da 0 a n dove n è il numero delle righe
e k va da 0 a j
Scarica

i dati e le istruzioni fondamentali