Corso: Fondamenti di Programmazione
Classe: PARI-DISPARI
Docente: Prof. Luisa Gargano
Testo: Aho, Ulman,
Foundations of Computer Science –C Edition
W.H. Freeman and Company, NY, 1994
Finalita’: introduzione alla programmazione
Concetti introduttivi
Calcolatore: “Oggetto” in grado di
1) accedere a grandi quantita’ di informazioni
2) eseguire un insieme di operazioni elementari
(es. aritmetiche) in modo preciso e rapido
Programmazione: Lavoro che si fa per costruire sequenze
di istruzioni (operazioni) adatte a svolgere il calcolo
“desiderato”
Concetti introduttivi
Calcolatore: “Oggetto” in grado di
1) accedere a grandi quantita’ di informazioni
2) eseguire un insieme di operazioni elementari
(es. aritmetiche) in modo preciso e rapido
Programmazione: Lavoro che si fa per costruire sequenze
di istruzioni (operazioni) adatte a svolgere il calcolo
“desiderato”
Algoritmo: Sequenza di azioni per svolgere il calcolo
INPUT: dati iniziali
AZIONI
OUTPUT: risultato
INPUT: x,y,z
esempio:
Somma x ed y
Somma z al risultato
OUTPUT: x+y+z
ALGORITMI e PROGRAMMI
Algoritmo: Sequenza di azioni per svolgere il calcolo
INPUT: dati iniziali
AZIONI
OUTPUT: risultato
INPUT: x,y,z
esempio:
Somma x ed y
Somma z al risultato
OUTPUT: x+y+z
Programma: Algoritmo espresso in notazione formale
(linguaggio di programmazione)
Creazione programma:
Fase 1 = algoritmo
Fase2 = implementazione in dato linguaggio (C)
SCOPO del CORSO:
metodi di costruzione di algoritmi e programmi
Introduzione al linguaggio C
Istruzione: Descrizione formale di un’azione
esempio: Moltiplica due numeri, indica il prodotto con z
Per ogni coppia di numeri il programma deve
descrivere il processo di moltiplicarli
input: 3, 4
 Output: z = 12
input: 2, 9
 Output: z = 18
Introduzione al linguaggio C
Istruzione: Descrizione formale di un’azione
esempio: Moltiplica due numeri, indica il prodotto con z
Per ogni coppia di numeri il programma deve
descrivere il processo di moltiplicarli
input: 3, 4
 Output: z = 12
input: 2, 9
 Output: z = 18
Variabili: Non si usano numeri, ma NOMI che denotano
oggetti dal valore variabile
All’inizio del programma bisogna assegnare i
valori alle variabili
esempio: Moltiplica due numeri, indica il prodotto con z
variabili: x,y,z
x,y prendono i valori input
z assume il valore output
Introduzione al linguaggio C
Assegnamento di un valore v ad una variabile x
denotato con x=v
Il valore v puo’ anche essere il valore assunto da
un’altra variabile o combinazioni di variabili
Esempio: z=x* y
x ha valore 3, y ha valore 4  z assume valore 12
Espressioni
Espressione: formula (regola di calcolo) che specifica
sempre un valore
Esempio: espressione algebrica: z=x* y, (x+3)/5
Espressioni
Espressione: formula (regola di calcolo) che specifica
sempre un valore
Esempio: espressione algebrica: z=x* y, (x+3)/5
Espressione composta da: Operatori
Operandi (costanti, variabili,…)
Espressioni
Espressione: formula (regola di calcolo) che specifica
sempre un valore
Esempio: espressione algebrica: z=x* y, (x+3)/5
Espressione composta da: Operatori
Operandi (costanti, variabili,…)
Operatori Algebrici: +, -, *, /, - unario, ++, --, %
( i%j= i modulo j= resto di i diviso j)
Espressioni
Espressione: formula (regola di calcolo) che specifica
sempre un valore
Esempio: espressione algebrica: z=x* y, (x+3)/5
Espressione composta da: Operatori
Operandi (costanti, variabili,…)
Operatori Algebrici: +, -, *, /, - unario, ++, --, %
( i%j= i modulo j= resto di i diviso j)
Operatori Logici: AND (&&), OR (||), NOT (!),
(su variabili booleane - valore vero/falso)
x AND y VERO se e solo se x,y VERE
x OR y
FALSO se e solo se x,y FALSE
NOT x VERO se e solo se x FALSA
Espressioni
Operatori di confronto:
Uguale “==“: x==y da VERO sse x e y hanno stesso valore
Diverso “!=“: x!=y da VERO sse x e y hanno dalori diversi
Minore “<“
Minore o Uguale “<=“
Maggiore “>”
Maggiore o uguale “>=“
ISTRUZIONI
Assegnamento: x=E, Calcola il valore dell’espressione E
e lo assegna alla variabile x
Esempio: x=x+y calcola il valore di x+y e lo assegna ad x
se x vale 5 e y vale 3, x=x+y da ad x valore 8
ISTRUZIONI
Assegnamento: x=E, Calcola il valore dell’espressione E
e lo assegna alla variabile x
Esempio: x=x+y calcola il valore di x+y e lo assegna ad x
se x vale 5 e y vale 3, x=x+y da ad x valore 8
Istruzioni Strutturate:
1) Composizione di Istruzioni:
I 1;
I 2;

Im;
Esegui I1, quando e’ terminata
esegui I2, quando e’ terminata
…
esegui Im.
x=1;
y=2;
x=x+y; (x vale 3)
y=x*y (y vale 6)
ISTRUZIONI Strutturate
2) Istruzioni Condizionali:
If (C) I’ else I’’;
C condizione, I’ ed I’’ composizioni di istruzioni
Es.
Poni z=0 se x<=y; poni z=x-y se x>y
if (x<=y) z=0 else x=x-y
ISTRUZIONI Strutturate
2) Istruzioni Condizionali:
If (C) I’ else I’’;
C condizione, I’ ed I’’ composizioni di istruzioni
Es.
Poni z=0 se x<=y; poni z=x-y se x>y
if (x<=y) z=0 else x=x-y
Poni z=0 se x<=y; altrimenti lascia il valore di z inalterato
if (x<=y) z=0
If (C) I;
Istruzioni Ripetitive
For (x=1, x<=n, x++) I;
I e’ una composizione di istruzioni
Poni x=1 esegui I
Modifica x (x=2), esegui I
…
Modifica x (x=n), esegui I
x
1
2
3
…
n
y
0
1
1+2=3
1+2+3=6
…
1+2+…+n
y=0;
for (x=1, x<=n, x++) y=y+x;
x=1
X>n
Vero, ESCI
Falso
I
x++
while ( C ) I;
C e’ una condizione, I e’ una composizione di istruzioni
x=1; y=0;
while (x<=n) {y=y+x;
x++}
C
Falso, ESCI
Vero
x
1
2
3
…
n
y
0
1
1+2=3
1+2+3=6
…
1+2+…+n
I
do I while (C);
I
Falso, ESCI
C
Vero
n=0?
x=1;
y=0;
do y=y+x; x++ while (x<=n)
y
0
1
1+2=3
1+2+3=6
…
1+2+…+n
x
1
2
3
4
…
n+1 (>n)
Scegliere astrazione: definire un
Insieme di dati che rappresentano
la realta’ (modello di dati)
Risolvere problema
Scegliere rappresentazione della
informazione (struttura dati)
Algoritmo e programma
Es. Archivio impiegati contiene insieme di dati rilevanti
(astrazione) su ogni impiegato
Rilevanti: Nome, stipendio, mansione
Non rilevanti: altezza, peso, colore occhi, colore capelli
Tipi di dati
Principio di base: Programma ha accesso a
Scatole (box): ogni box ha associato un tipo (intero, reale,…)
si possono conservare solo oggetti di tale tipo
Nome: ogni box e’ identificata da un nome
Tipi Base (in C): intero (int), reale (real), carattere (char)
Definizioni di variabili
int x definisce x come variabile di tipo intero
Definizioni di Variabili
ARRAY formato da componenti dello stesso tipo
le componenti sono individuate da un indice
int A[n]
A[0]
:array di n componenti di tipo intero
A[1]
…
A[2]
A[n-1]
Si accede ad una componente alla volta specificando l’indice
int X[5]
X[0]=10;
X[1]=7;
X[2]=4;
X[3]=3;
X[4]=8;
Crea l’array di interi X:
10
7
4
3
8
Array
Es. cerca il minimo indice i di una componente di un array
A[n] avente valore w.
idea: confronta w con A[0], A[1],… finche’ non trovi
w oppure non hai esaminato tutto l’array
int A[n]
i=0;
while (A[i]!=w) && (i < n) i++;
if(i==n) ‘’non esiste’’
/* altrimenti i contiene l’indice cercato*/
A[0]
A[1]
i=0
A[0]=w esci
A[2]
…
A[n-1]
Array
Es. cerca il minimo indice i di una componente di un array
A[n] avente valore w.
idea: confronta w con A[0], A[1],… finche’ non trovi
w oppure non hai esaminato tutto l’array
int A[n]
i=0;
while (A[i]!=w) && (i < n) i++;
if(i==n) ‘’non esiste’’
/* altrimenti i contiene l’indice cercato*/
A[0]
A[0]!=w
A[1]
A[2]
i=1
se A[1]=w esci
…
A[n-1]
Array
Es. cerca il minimo indice i di una componente di un array
A[n] avente valore w.
idea: confronta w con A[0], A[1],… finche’ non trovi
w oppure non hai esaminato tutto l’array
int A[n]
i=0;
while (A[i]!=w) && (i < n) i++;
if(i==n) ‘’non esiste’’
/* altrimenti i contiene l’indice cercato*/
A[0]
A[0]!=w
A[1]
A[2]
A[1]!=w A[2]!=w
…
…
A[n-1]
i=n-1
se A[i]=w, esci
altr. i++, esci con i=n
STRUCT
Permette di “unire” elementi di tipi differenti.
Struct S
{T1 M1;
T2 M2;
…
Tn Mn}
Definisce una struttura con n campi
(M1, M2, …, Mn)
Di tipo T1,T2,…,Tn, rispettivamente.
Es. Vogliamo descrivere persone usando 3 campi:
(NOME, COGNOME, DATA-NASCITA)
STRUCT
Es. Vogliamo descrivere persone usando 3 campi:
(NOME, COGNOME, DATA-NASCITA)
1) typedef char alfa[10]
definisce il tipo alfa
come un array di 10 caratteri
3) Struct persona
{alfa cognome;
alfa nome;
data data-nascita}
2) Struct data
{int giorno;
int mese;
int anno}
Struct persona P
P= (Mario, Rossi,(10,3,1980))
STRUCT
La componente i-ma di nome Mi della struttura S,
S=(M1,…,Mi,…,Mn), si indica con S.Mi
Es. Struct persona
P= (Mario, Rossi,(10,03,1980))
P.nome e’ l’array contenete Mario
P.nome[1] e’ il carattere a
P.data-nascita e’ la struttura di tipo data
(10,3,1980)
P.data-nascita.mese e’ l’intero 3
E’ possibile combinare array e strutture
Es. Array di struct di tipo persona
persona A[n]
array di n componenti A[0],…,A[i],…,A[n-1]
A[i] e’ una struct di tipo persona
E’ possibile combinare array e strutture
Es. Array di struct di tipo persona
persona A[n]
array di n componenti A[0],…,A[i],…,A[n-1]
A[i] e’ una sruct di tipo persona
Cerca il numero di persone nate a maggio
{int count;
count=0;
for(i=0,i<n,i++) if (A[i].data.mese=5) count++;}
PUNTATORI
Una variabile di tipo puntatore contiene un indirizzo
di memoria
int x *p
Definisce p come un puntatore alla variabile di tipo
intero x
P
x
PUNTATORI
Una variabile di tipo puntatore contiene un indirizzo
di memoria
int x *p
definisce p come un puntatore alla variabile di tipo
intero x
P=&x assegna a p l’indirizzo di memoria di x
y=*p assegna a y il contenuto della variabile puntata
da p
Es. {p=&x; y=*p} risulta valore di x = valore di y
Creazione di un programma
Algoritmo (metodo)
Programma
Implementazione in linguaggio dato
test