Fondamentidi Programmazione 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 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 Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere il calcolo desiderato
Concetti introduttivi Calcolatore 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 Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere il calcolo desiderato Algoritmo Algoritmo: Sequenza di azioni per svolgere il calcolo INPUT: dati iniziali INPUT: x,y,z AZIONI esempio: Somma x ed y Somma z al risultato OUTPUT: risultato OUTPUT: x+y+z
ALGORITMI e PROGRAMMI Algoritmo Algoritmo: Sequenza di azioni per svolgere il calcolo INPUT: dati iniziali INPUT: x,y,z AZIONI esempio: Somma x ed y Somma z al risultato OUTPUT: risultato OUTPUT: x+y+z Programma Programma: Algoritmo espresso in notazione formale (linguaggio di programmazione) Creazione programma: Fase 1 = algoritmo Fase2 = implementazione in dato linguaggio (C) SCOPO del CORSO: SCOPO del CORSO: metodi di costruzione di algoritmi e programmi
Introduzione al linguaggio C Istruzione Istruzione: Descrizione formale di unazione 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 Istruzione: Descrizione formale di unazione 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 Variabili: Non si usano numeri, ma NOMI che denotano oggetti dal valore variabile Allinizio 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 Assegnamento di un valore v ad una variabile x denotato con x=v Il valore v puo anche essere il valore assunto da unaltra variabile o combinazioni di variabili Esempio: z=x* y x ha valore 3, y ha valore 4 z assume valore 12
Espressioni Espressione: Espressione: formula (regola di calcolo) che specifica sempre un valore Esempio: espressione algebrica: z=x* y, (x+3)/5
Espressioni Espressione: 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: 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) ( i%j= i modulo j= resto di i diviso j)
Espressioni Espressione: 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) ( i%j= i modulo j= resto di i diviso j) Operatori Logici: AND (&&), OR (||), NOT (!), (su variabili booleane - valore vero/falso) (su variabili booleane - valore vero/falso) x AND y VERO se e solo se x,y VERE x AND y VERO se e solo se x,y VERE x OR y FALSO se e solo se x,y FALSE x OR y FALSO se e solo se x,y FALSE NOT x VERO se e solo se x FALSA 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: Assegnamento: x=E, Calcola il valore dellespressione 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: Assegnamento: x=E, Calcola il valore dellespressione 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 1) Composizione di Istruzioni: Esegui I 1, quando e terminata esegui I 2, quando e terminata … esegui I m. x=1; y=2; x=x+y; (x vale 3) y=x*y (y vale 6)
ISTRUZIONI Strutturate 2) Istruzioni Condizionali 2) Istruzioni Condizionali: If (C) I else I; C condizione, I ed I composizioni di istruzioni Es. Poni z=0 se x y if (x<=y) z=0 else x=x-y
ISTRUZIONI Strutturate 2) Istruzioni Condizionali 2) Istruzioni Condizionali: If (C) I else I; C condizione, I ed I composizioni di istruzioni Es. Poni z=0 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 y=0; for (x=1, x<=n, x++) y=y+x; x y = =6 …… n1+2+…+n x=1 I x++ X>n Vero, ESCI Falso
while ( C ) I; C e una condizione, I e una composizione di istruzioni x=1; y=0; while (x<=n) {y=y+x; x++} x y = =6 …… n1+2+…+n I C Falso, ESCI Vero
do I while (C); x=1; y=0; do y=y+x; x++ while (x<=n) y x = =64 …… 1+2+…+nn+1 (>n) I C Falso, ESCI Vero n=0?
Risolvere problema Scegliere astrazione: definire un Insieme di dati che rappresentano la realta (modello di dati) 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] :array di n componenti di tipo intero A[0]A[1]A[2] …A[n-1] Si accede ad una componente alla volta specificando lindice int X[5] X[0]=10; X[1]=7; X[2]=4; X[3]=3; X[4]=8; Crea larray di interi X:
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 larray int A[n] i=0; while (A[i]!=w) && (i < n) i++; if(i==n) non esiste /* altrimenti i contiene lindice cercato*/ A[0]A[1]A[2] …A[n-1] i=0 A[0]=w esci
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 larray int A[n] i=0; while (A[i]!=w) && (i < n) i++; if(i==n) non esiste /* altrimenti i contiene lindice cercato*/ A[0]A[1]A[2] …A[n-1] A[0]!=w i=1 se A[1]=w esci
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 larray int A[n] i=0; while (A[i]!=w) && (i < n) i++; if(i==n) non esiste /* altrimenti i contiene lindice cercato*/ A[0]A[1]A[2] …A[n-1] A[0]!=w A[1]!=w A[2]!=w … i=n-1 se A[i]=w, esci altr. i++, esci con i=n
STRUCT Permette di unire elementi di tipi differenti. Es. Vogliamo descrivere persone usando 3 campi: (NOME, COGNOME, DATA-NASCITA) Struct S {T1 M1; T2 M2; … Tn Mn} Definisce una struttura con n campi (M1, M2, …, Mn) Di tipo T1,T2,…,Tn, rispettivamente.
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 2) Struct data {int giorno; int mese; int anno} 3) Struct persona {alfa cognome; alfa nome; data data-nascita} Struct persona P P= (Mario, Rossi,(10,3,1980))
STRUCT Es. Struct persona P= (Mario, Rossi,(10,03,1980)) P.nome e larray 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 lintero 3 La componente i-ma di nome Mi della struttura S, S=(M1,…,Mi,…,Mn), si indica con S.Mi
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++;} E possibile combinare array e strutture
Una variabile di tipo puntatore contiene un indirizzo di memoria int x *p Definisce p come un puntatore alla variabile di tipo intero x PUNTATORI Px
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 lindirizzo 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 PUNTATORI
Programma Creazione di un programma Algoritmo (metodo) Implementazione in linguaggio dato test