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