La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Giovanni Farinella Corso di Robotica Residenza Universitaria Alcantara 20 Gennaio 2005 Modulo di Informatica: Introduzione alla programmazione.

Presentazioni simili


Presentazione sul tema: "Giovanni Farinella Corso di Robotica Residenza Universitaria Alcantara 20 Gennaio 2005 Modulo di Informatica: Introduzione alla programmazione."— Transcript della presentazione:

1 Giovanni Farinella Corso di Robotica Residenza Universitaria Alcantara 20 Gennaio 2005 Modulo di Informatica: Introduzione alla programmazione

2 Riferimenti Corso di Programmazione 1 (G. Gallo, G. Cincotti) Corso di Laurea in Informatica - Dipartimento di Matematica e Informatica - Università di Catania Corso di Fondamenti di Informatica(Calabrese), Facoltà di Ingegneria, Università di Parma Corso di Fondamenti di Informatica(A. Fantechi), Dipartimento di Sistemi e Informatica, Università di Firenze

3 Introduzione: Cosè linformatica? Informatica = Informazione + Automazione Si riferisce ai processi e alle tecnologie che rendono possibile limmagazzinamento e lelaborazione dellinformazione mediante macchine Calcolatore= esecutore di ordini o automa Programmatore= colui che individua la sequenza di ordini per risolvere un problema

4 Computer: Un modello Semplificato(grezzo) Dati in Ingresso Dati in Uscita Operazioni sui dati

5 Dati In maniera semplificata possiamo dire che i dati sono: Numeri Interi, decimali; Testi Sequenze Alfanumeriche Testi Formattati Sequenze alfanumeriche con codici che ne condizionano la apparenza Segnali digitali Imitano i segnali analogici a cui siamo abituati (suoni e immagini) Queste informazioni vengono rappresentate in un computer attraverso la codifica binaria ES: = codifica il numero decimale 9

6 Alfabeto Digitale Alfabeto Digitale = {0, 1} Una cifra binaria è pari ad un BIT (b) 8 cifre binarie sono pari ad un BYTE (B) 1024 BYTE sono pari ad 1 KiloByte (KB) 1024 KB sono pari ad 1 MegaByte (MB) 1024 MB sono pari ad 1 GigaByte (GB) 1024 GB sono pari ad 1 TeraByte (TB) :

7 Operazioni Un computer esegue operazioni logiche e aritmetiche Un programma contiene la descrizione di tutte le operazioni da eseguire

8 Programmazione Lattività di redigere programmi per i calcolatori è detta Programmazione Programmare è una attività che si apprende! Come fare? Da dove iniziare Analogia Come si fa ad imparare a guidare? Un po di Teoria (a cosa servono i pedali, le spie, ecc..), tanta pratica(quando frenare? Quanto velocemente si arresta lauto?).

9 Algoritmo Dato un problema, un algoritmo è una procedura, cioè una sequenza di passi, che può essere eseguita automaticamente da una macchina in modo da risolvere il problema dato. Non tutti i problemi sono risolvibili. Un problema risolvibile con un algoritmo si dice computabile

10 Esempio di Algoritmo La torta al cioccolato Abbiamo gli ingredienti (uova, farina, latte, ecc..) con le giuste quantità Seguiamo la ricetta Serviamo la torta

11 Altro esempio Kit di montaggio Procuriamo il kit e gli strumenti Apriamo la scatola Leggiamo le istruzioni Mettiamo insieme i pezzi

12 Risoluzione di un problema Generalmente la risoluzione di un problema consiste nel prendere alcuni dati iniziali (input) relativi al problema e nel fornire un risultato (output) che risolve questultimo Esecutore Input Output Algoritmo

13 Non è così facile come sembra! Per scrivere la giusta sequenza di passi bisogna essere un bravo cuoco e un bravo costruttore!

14 Infatti… Problema Risolutore Algoritmo Esecutore Processo di Esecuzione … la risoluzione automatica prevede una notevole componente umana!!!

15 Definizione di algoritmo (Formale) Un algoritmo è una sequenza ordinata e finita di passi (azioni o istruzioni) che producono un ben determinato risultato in un tempo finito

16 Caratteristiche di un algoritmo 1. Azioni eseguibili e non ambigue 1. Non sono ammessi un pò e a piacere, che non sono termini adatti ad una macchina 2. Deterministico 1. Fatto un passo, il successivo è uno ed uno solo, ben determinato. Alternative sono possibili, ma la scelta deve essere unica 3. Numero finito di passi 4. Terminazione 1. Lesecuzione prima o poi deve finire e produrre un risultato in tempo finito 2. Osservazione: la 3 non implica la 4

17 Esempio di non terminazione 1. Si consideri il numero N 2. Scrivere N 3. Scrivere il numero successivo ad N 4. Ripetere il passo precedente

18 Esempio di non terminazione 1 se nellespansione decimale di ci sono più X che Y O altrimenti Non esiste un programma che riesce a dare una risposta in tempo finito (Numero finito di passi) F(X,Y)= Lespasione decimale di è infinita!

19 Codifica dellAlgoritmo Affinchè una macchina riesca a comprendere ed eseguire i passi specificati da un algoritmo, questultimo deve essere prima codificato in un opportuno programma scritto in un linguaggio ad alto livello (che verrà successivamente compilato/interpretato) AlgoritmoTraduzioneProgramma

20 Risoluzione di un problema: Esecuzione Automatica Luomo descrive lalgoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dal compilatore) Macchina Input Output Problema

21 Scomposizione in sottoproblemi Ricetta del pollo alle mandorle Abbiamo gli ingredienti (pollo, olio, mandorle, ecc..) con le giuste quantità (150g di pollo, 3 cucchiai dolio, ecc..) Seguiamo la ricetta Serviamo il piatto

22 Scomposizione in sottoproblemi Ricetta del pollo alle mandorle Preparare il soffritto e aggiungervi il pollo Unire le mandorle pelate al soffritto Mescolare fino a quando il pollo sarà ben cotto Aggiungere il pepe Rosolare con il vino bianco per 3 minuti Aggiungere lolio Se preferisci salato, allora aggiungi il sale

23 Scomposizione in sottoproblemi La ricetta precedente è un esempio di cosa significa scomporre un problema in sottoproblemi (Top-Down) Ogni sottoproblema può essere scomposto in problemi via via più elementati Preparare il soffritto e aggiungervi il pollo Si può ancora scomporre in Sbucciare le carote Pulire il pollo :

24 Descrizione di un algoritmo Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi. La descrizione avviene mediante: Pseudo-Codice, oppure Diagramma di flusso

25 Diagramma di Flusso I diagrammi di flusso permettono di descrivere in modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione. Ogni azione elementare è rappresentata da un blocco. Esistono 4 tipi di blocchi

26 Diagrammi di flusso (1) Istruzioni di inizio e fine Inizio Fine In degree: 0 Out degree: 1 In degree: 1 Out degree: 0

27 Diagrammi di flusso (2) Operazioni di lettuta (input) e scrittura (output) Leggi DatoScrivi Dato In degree: 1 Out degree: 1 In degree: 1 Out degree: 1

28 Diagrammi di flusso (3) Istruzioni imperative (azioni oppure operazioni) Calcola: 10+2 In degree: arbitrario Out degree: 1

29 Connettori I singoli diagrammi devono essere uniti tramite i connettori. Lesecuzione delle istruzioni deve essere fatta sequenzialemente, ovvero sequendo i connettori. Quando si scrive lalgoritmo bisogna fare molta attenzione alla direzione del flusso di esecuzione.

30 Istruzione di Assegnamento Una variabile numerica è una entità caratterizzata da Un nome, e Un valore (contenuto) Può cambiare nel tempo Una costante numerica è una entità caratterizzata da Un nome, e Un valore (contenuto) Non può cambiare nel tempo Unespressione è una combinazione di operatori aritmetici, costanti e variabili che può essere calcolata generando un singolo valore numerico ES: X, X+1X+(Y*3) Istruzione di assegnamento: Variabile Espressione ES: Z 3Z X+3

31 Esempio Descrivere mediante diagrammi di flusso, un algoritmo che calcoli la somma di due numeri letti in input

32 Diagramma di flusso: Somma Inizio Leggi X Leggi Y Z X+Y Scrivi Z Fine

33 Esempio Descrivere, mediante diagrammi di flusso, un algoritmo che scambi i valori di due variabili lette in input.

34 Diagramma di flusso: Somma Inizio Leggi X Leggi Y Aux Y Y X X Aux Scrivi Y Scrivi X Fine

35 Flusso di esecuzione Si possono avere casi in cui nel flusso di esecuzione si deve scegliere tra diverse direzioni La direzione da scegliere è subordinata al verificarsi di una condizione La condizione può assumere due stati: Vero, Falso In questi casi si parla di istruzione condizionale

36 Digrammi di flusso (4) Istruzioni condizionali Condizione Vero Falso In degree: arbitrario Out degree: 2 I connettori Out Sono etichettati

37 Esempio Descrivere mediante diagramma di flusso, un algoritmo che determini il massimo tra due numeri letti in input

38 Diagramma di Flusso: Max Inizio Leggi X Leggi Y X>Y Scrivi Y Scrivi X Falso Vero Fine

39 Esempio Descrivere mediante diagrammi di flusso, un algoritmo che determini se un numero è pari o dispari

40 Diagramma di flusso: Pari o Dispari Inizio Leggi X Dividi X per 2 Resto=0 Scrivi N è pari Scrivi N è dispari Vero Supponiamo lo 0 sia un numero pari Falso Fine

41 Esempio Descrivere, mediante diagramma di flusso, un algoritmo che scriva 10 volte Ciao Mondo!

42 Diagramma 10 volte Ciao Mondo Inizio X 1 X<=10 Scrivi Ciao Mondo! Vero Falso Fine X X+1 - Ciclo - Ripetizione - Fino a Quando - Per 10 Volte

43 Strutture di controllo While Do-While If-else No/Si Si/No Input Output Input No/Si Si/No No/Si Output Input

44 Risoluzione di un problema: esecuzione Automatica Luomo descrive lalgoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dal compilatore) Macchina Input Output Problema

45 Risoluzione di un problema: esecuzione Automatica Luomo descrive lalgoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dal compilatore) Macchina Input Output Problema

46 DallAlgoritmo al programma Dato un algoritmo ottengo il corrispondente programma attraverso la fase di traduzione Fase di scrittura di un algoritmo in un insieme ordinato di istruzioni scritte in un qualche linguaggio di programmazione, che specificano le azioni che il calcolatore deve svolgere Il testo del programma è scritto in accordo alla sintassi e alla semantica del linguaggio di programmazione scelto Il programma, a seconda del linguaggio, verrà compilato ed eseguito o interpretato (esistono vie di mezzo)

47 Linguaggi di Programmazione Notazione formale per limplementazione degli algoritmi Linguaggio artificiale Compromesso tra uomo-macchina

48 Sintassi e Semantica Sintassi: Insieme delle regole per la costruzione di frasi corrette Semantica: Insieme di regole per lattribuzione di un significato alle frasi Una frase può essere sintatticamente corretta e tuttavia non avere significato

49 Livelli di un linguaggio Rappresenta la posizione del linguaggio fra il programmatore e la macchina Linguaggi Macchina Assembly C/C++ Linguaggi Naturali

50 Linguaggio Macchina Insieme delle operazioni elementari eseguibili da un calcolatore Diverse per ogni processore Codice Numerico (binario) Difficoltà di utilizzo e comprensione

51 Assembly Sostituzione del codice binario con simboli mnemonici Start: Mov AX, BX CMP AX, 12h MUL BX, 10d :

52 Linguaggi ad alto livello (di astrazione) Linguaggi macchina e corrispondenti assembly linguaggi a basso livello Linguaggi ad alto livello Mascherano il calcolatore Maggiore leggibilità e comprensibilità Necessita di traduzione portabilità

53 Tipi di linguaggi ad alto livello Esistono differenti tipi di linguaggi ad alto livello Imperativi Logici Funzionali Orientati agli ogetti Ognuno provvede le forme espressive appropriate per problemi specifici

54 Linguaggio Imperativo Diretta evoluzione del linguaggio macchina Elenco di istruzioni da eseguirsi in sequenza Operazioni di trasferimento Operazioni Aritmetiche Operazioni di controllo di flusso Concetto di variabile Macchina di von Neumann C, Fortran, Pascal, Basic

55 Linguaggio C (Cenni) Il linguaggio C venne sviluppato nel 1973 da Ritchie, dellAT&T Bell Labs, come linguaggio di programmazione di sistema Il linguaggio doveva essere Un linguaggio di livello sufficientemente alto per garantire ai programmi leggibilità e mantenibilità Un linguaggio sufficientemente semplice da stabilire una corrispondenza immediata con la macchina sottostante Nel 1983, lAmerican National Standards Institute (ANSI), costituì una commissione per la standardizzazione del linguaggio; La versione finale dello standard fu approvata nel 1989.

56 Elementi di Base del Linguaggio C Il nucleo del linguaggio si fonda su un set ricco di: Tipi di dati Base Derivati Strutture di controllo Selezione (strutture decisionali) Iterative Costrutti di decomposizione del programma Funzione Unità di compilazione(Modulo) Librerie Standard di corredo al compilatore Standard di I/O Gestione di stringhe Gestione Dinamica della Memoria Funzioni Matematiche Altre

57 Componenti base di un Programma Dichiarazione di variabili In C le variabili devono essere dichiarate prima di essere utilizzate. Le dichiarazioni specificano il tipo e il nome di una variabile Es: int i; E sempre consigliabile inizializzare le variabili ES: i=0; Statement Esempi: printf(Hello World!); scanf(…); result = sum(n); return 0; int i; Il ; è un terminatore di statement; deve essere aggiunto alla fine di ogni statement

58 Componenti base di un Programma Commenti Si affiancano a dichiarazioni di variabili o parti del programma per indicarle lo scopo e lutilizzo (leggibilità e mantenimento delle applicazioni) Parentesi Graffe Delimitano i blocchi di codice e costituiscono il costrutto primario di raggruppamento Costanti #define max 10

59 Componenti base di un Programma Prototipi di funzione Dicono al compilatore quale sarà il formato di una funzione Devono apparire prima che la funzione sia utilizzata Un prototipo di una funzione è diverso dalla sua definizione: Il primo descrive linterfaccia della funzione La seconda descrive limplementazione della funzione Definizione di Funzione Codifica lalgoritmo corrispondente alla funzione (solitamente una subroutine)

60 Componenti base di un Programma Le librerie standard contengono delle funzioni utili per il programmatore printf(Hello World); Appartiene alla libreria di I/O Per ogni gruppo di funzioni (es: quelle di I/O) esiste un file sorgente, chiamato file header contenente le informazioni necessarie per utilizare le funzioni stdio.h La funzione appartenente ad una libreria può essere utilizzata includendo un file header in un programma (preprocessore) #include

61 La funzione main Ogni programma eseguibile deve contenere una funzione speciale chiamata main(), che indica il punto da cui inizia il programma

62 Il Primo Programma #include #define ok 1 #define nok 0 int main() { int i; i=10; printf(Valore della variabile: %d,i); return val; }

63 Il Primo Programma #include #define ok 1 #define nok 0 int main() { int i; i=10; printf(Valore della variabile: %d,i); return val; } Inclusione delle librerie Definizione delle Costanti Corpo del programma Definizione delle Variabili

64 I Tipi: Scalari I tipi fondamentali sono char: rappresenta uno dei caratteri del set locale int: un intero, il cui valore dipende dallampiezza degli interi sulla macchina utilizzata float: floating-point in singola precisione double: floating point in doppia precisione Le dimensioni sono contenute nei file limit.h e float.h char: 1 byte int: 4 byte float: 4 byte double: 8 byte

65 Altri tipi Enumerativi Enum {red, green, blue} color; Tipi definiti dal programmatore :

66 Strutture di Controllo if-else Scelta in base ad una condizione switch Vari casi di scelta while Ciclo secondo il valore di una condizione for Ciclo ripetuto esattamente un numero n di volte

67 if - else if (espressione_bool) { istruzione1; istruzione2; : } else { istruzione1; istruzione2; : } If-else Si/No No/Si Output Input Lespressione viene valutata in esecuzione; Se vera viene eseguito il blocco if altrimenti viene eseguito il blocco else opzionale

68 if – else: esempio #include int main() { if (n>0) { if (a>b) z=a; else z=b } else { z=a+b; } printf(valore della variabile z: %d,z) }

69 switch switch (espressione-variabile) { case espressione-costante: { istruzioni break; } case espressione-costante: { istruzioni } case espressione-costante: { istruzioni break } default: { istruzioni break; } Se il valore di espressione-variabile coincide con uno di quelli dei vari casi, allora lesecuzione inizia dal blocco di istruzioni relative a quel caso Se il valore di espressione-variabile non coincide con quello dei vari casi vengono eseguire le espressioni di default Listruzione break provoca luscita immediata dallo switch. Se non presente, lesecuzione dei casi è sequenziale

70 switch: esempio switch (n) { case 0: { printf(zero); break; } case 1: { printf(uno); break; } default: { printf(numero maggiore di uno); break; }

71 while while (espressione_bool) { istruzioni } While Si/No Input Output Lespressione viene valutata; se il suo valore è vero viene eseguito il blocco di istruzioni e viene valutata nuovamente la condizione Se lespressione è falsa, lesecuzione del Programma riprende dalla prima istruzione dopo il while

72 for for(espr_1; espr_2; espr_3) { istruzioni } Inc; count count Vero Input Output Falso istruzioni In generale: espr_1 è un assegnamento espr_2 è una espressione relazionale espr_3 incrementa la variabile contatore

73 for: esempio for(count=1, n=0; count<3; count=count+1) { printf(ciclo: %d, count); n=n+1; printf(valore di n: %d, n); }

74 Esempio: Fattoriale di un Numero Lalgoritmo si basa sulla proprietà del fattoriale N!=N*(N-1)!= N*(N-1)*(N-2)*…*2*1 Con un ciclo si scorrono tutti i numeri da 1 a N, ricalcolando il fattoriale ogni volta secondo la formula precedente

75 Diagramma di flusso Inizio Leggi N Fatt=1 i=2 i<=n Fatt=Fatt*i i=i+1 vero falso Scrivi Fatt Fine

76 Codice del programma #include int main() { int i, n, fattoriale; printf(Numero: ); scanf(%d,&n); fattoriale=1; for(i=2; i<=n; i=i+1) { fattoriale=fattoriale*i; } printf(Fattoriale di %d = %d\n, n, fattoriale); }

77 Risoluzione di un problema: esecuzione Automatica Luomo descrive lalgoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dal compilatore) Macchina Input Output Problema

78 Risoluzione di un problema: esecuzione Automatica Luomo descrive lalgoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero in codice binario (ad esempio dal compilatore) Macchina Input Output Problema

79 Riepilogo delle fasi di programmazione Dato un problema 1. Individuare lalgoritmo 2. Scrittura/Modifica del programma 3. Compilazione 4. Esecuzione 5. Debug e ritorno al punto 2 6. Consegna Prodotto

80 Strumenti per la programmazione Dato un problema 1. Esperienza e Capacità 2. Editor 3. Compilatore Debugger 6.

81 Editor Strumento che permette al programmatore di scrivere agevolmente un programma Il codice sorgente del programma è un file di testo (ASCII) Alcuni Editor sono orientati alla programmazione (sintassi, rientri, …)

82 Compilatore Strumento che dal programma sorgente genera il linguaggio macchina Controllo della sintassi Segnalazione errori e anomalie Ottimizzazione Supporto sistema operativo Non segnalano errori di run time

83 Debugger Permette lesecuzione controllata di un programma Esecuzione Passo a Passo Ispezione dei dati Breackpoint Visualizzazione grafica strutture dati

84 Fine Modulo


Scaricare ppt "Giovanni Farinella Corso di Robotica Residenza Universitaria Alcantara 20 Gennaio 2005 Modulo di Informatica: Introduzione alla programmazione."

Presentazioni simili


Annunci Google