Salvatore Cuomo Prolusione Lezione n. 1 Parole chiave: Algoritmo, Esecutore Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email Docente: salvatore.cuomo@unina. it A.A. 2009-2010 Introduzione al corso 2/2 Contatti con il docente, materiale didattico integrativo, informazioni ufficiali sul corso: http://www.docenti.unina.it/salvatore.cuomo http://www.dma.unina.it/~cuomo Email: [email protected] Testi consigliati: :: A. Murli, G. Giunta, G. Laccetti, M. Rizzardi – Laboratorio di Programmazione I – Ed. Liguori :: G. Criscuolo, F.P. Tramontano – Introduzione alla Programmazione, Parte Prima: Algoritmi Imperativi in C++ - Ed. Manna :: A. Murli – Lezioni di Laboratorio di Programmazione – Ed. Liguori :: G. Dromey – Algoritmi fondamentali – Ed. Jackson :: B. Kernighan, D.Ritchie – Linguaggio C – Ed. Jackson :: H.M. Deitel, P.J.Deitel – C Corso completo di programmazione – Ed. Apogeo :: H. Hahn – Guida a Unix seconda ed.– McGraw-Hill Principali obiettivi del corso Padronanza delle tecniche di Programmazione: • Conoscenze di base relative al calcolatore dal punto di vista del Hardware e Software • Nozioni di base sui principali Sistemi Operativi • Conoscenza dei paradigmi di programmazione • Conoscenza di alcuni linguaggi di programmazione ( Ansi C / C++ ) con particolare riferimento a: :: principali tipi di dato :: costrutti di controllo :: implementazione di algoritmi :: strutture dati :: funzioni e metodi :: … Al termine del corso si richiede di: Essere in grado di realizzare programmi in un linguaggio di programmazione imperativo. Introduzione al corso In questa prolusione richiamiamo brevemente alcune nozioni preliminari che riguardano il concetto di Algoritmo e di Esecutore per poi accennare brevemente alla architettura di un elaboratore. SOMMARIO • Concetto di Algoritmo • Il concetto di esecutore di Algoritmi • Brevi cenni sulla architettura di un calcolatore :: La memoria :: Unità logico aritmetica :: Unità di Input/Output Programmare Le attività sperimentali della programmazione sono rivolte allo sviluppo di concetti basilari, alla organizzazione logica di metodi risolutivi orientati allo sviluppo di codici automatici che più sinteticamente indicheremo come programmi (e piu’ in generale software) per la risoluzione di problemi del mondo reale. In altre parole, siamo interessati allo studio, all’ analisi e lo sviluppo di metodi di calcolo e di tecniche di programmazione finalizzate alla risoluzione dei problemi della vita reale. Figura1: Risoluzione dei problemi della scienza e della tecnica. Il concetto di Algoritmo L’organizzazione logica di metodi risolutivi di problemi della scienza e della tecnica si basa sul concetto di Algoritmo di cui diamo la seguente: Definizione L’algoritmo è successione logica di direttive elementari, interpretabili in maniera univoca, che svolte in un ordine prestabilito, consentono la soluzione di un assegnato problema in un numero predeterminato di passi. La definizione si basa sui seguenti punti fondamentali: • • • • la la le le sequenza di direttive deve essere finita; sequenza deve portare ad un risultato; direttive devono essere “possibili” ovvero eseguibili materialmente; direttive devono essere esposte in maniera non ambiguo. Dall’Algoritmo al linguaggio Il concetto di Algoritmo si basa sulla possibilità che le direttive vengano descritte da una serie di frasi non ambigue che costituiscono il programma. Le frasi con cui vengono scritte le direttive appartengono ad un linguaggio comprensibile a chi le deve eseguire, ovvero quello che chiameremo: il linguaggio di programmazione Generalmente, l’algoritmo viene descritto secondo uno pseudocodice che è un linguaggio artificiale e non formalizzato per esprimere le azioni che costituiscono l’algoritmo. I programmi scritti in pseudocodice scritti ed implementati dai programmatori. Essi risultano: :: un valido strumento o per descrivere gli algoritmi: :: un linguaggio semplice di rapida traduzione in un “vero” linguaggio di programmazione (Linguaggio C/C++, Java, Phyton, …) leggi dati in ingresso se fissata condizione: fai_qualcosa() altrimenti: fai_qualcosaltro() stampa messaggio Dall’Algoritmo all’esecutore Il concetto di Algoritmo si basa sulla possibilità che le direttive utilizzate per risolvere un fissato problema siano possibili ovvero eseguibili materialmente. Questo fa nascere, naturalmente, la necessità di un esecutore di tali direttive. Un esecutore di algoritmi deve essere realizzato in base alle seguenti specifiche: • Registrare i dati di ingresso, intermedi e di uscita • Registrare le istruzioni • Eseguire le operazioni logiche e aritmetiche sui dati in ingresso • Avere il controllo sulla sequenza delle suddette operazioni Esecutore di Algoritmi Abbiamo accennato alle specifiche fondamentali di un esecutore di Algoritmi. Da quanto detto, la macchina esecutrice può essere realizzata mediante uno schema di progettazione di calcolatori elettronici che prende nome dal matematico John von Neumann e che fu sviluppato per il sistema IAS machine e dell'Institute for Advanced Study a Princeton, New Jersey, U.S.A.. Figura 2: Esecutore Schema Uomo. In figura sono riportati due schemi di esecutore: l’uomo e l’importante schema dalle Macchina di Von Neumann Figura 3: La macchina di Von Neumann Il calcolatore 1/3 La macchina di Von Neumann è lo schema alla base dei moderni calcolatori elettronici (vedi figura 4). I componenti fondamentali alla base della macchina esecutrice sono: • La Memoria: E’ il dispositivo fisico in grado di immagazzinare le informazioni sotto forma di dati ed istruzioni su di essi. Figura 4: Un calcolatore elettronico In figura 5, viene mostrata una rappresentazione dalla memoria gerarchica di un calcolatore. Figura 5: Livelli di memoria di un calcolatore elettronico Il calcolatore 2/3 • L’ Unità di controllo: è il dispositivo deputato al coordinamento delle attività della macchina esecutrice. In particolare consente di prelevare dalla memoria le istruzioni, si occupa di trasferire i dati dalla memoria, assicura l’esecuzione della successiva istruzione. Un esempio di unità di controllo è mostrato nella figura 6. Figura 6: Unità di controllo • L’ Unità logico-aritmetica: è il dispositivo che consente l’esecuzione delle operazioni sui dati, sia aritmetiche, sia quelle logico-relazionali. Una schematizzazione di ALU è mostrata nella figura 7. Figura 7: Schema componenti base di una ALU Il calcolatore 3/3 • L’ Unità di input e output: e’ il dispositivo che consente di interfacciare la macchina esecutrice con il mondo esterno. In particolare sono unità di I/O tutte quelle periferiche che consentono di inserire i dati, di stamparli, di visualizzarli. Esso sono generalmente il video, le stampanti, le tastiere, la scheda di rete, lo scanner e molti altri dispositivi. Figura 8: Dispositivi di I/O Materiali di studio Testi Consigliati Alcuni contenuti della lezione sono tratti da: A. Murli – Lezioni di Laboratorio di Programmazione – Ed. Liguori Per un approfondimento teorico sugli argomenti trattati si consiglia di leggere: (a) A. Murli, G. Giunta, G. Laccetti, M. Rizzardi – Laboratorio di Programmazione I – Ed. Liguori Capitolo 1 (b) G. Criscuolo, F. Tramontano, Introduzione alla programmazione. Algoritmi iterativi in C++. Ed. Manna Capitolo 1