Fondamenti dell informatica Algoritmi e Strutture Dati

Documenti analoghi
Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Fasi di creazione di un programma

Dispensa di Informatica I.1

Lezione 8. La macchina universale

- Algoritmi ed esecutori di algoritmi - ALGORITMI MACCHINA DI VON NEUMANN

Informazione analogica e digitale

Architettura di un calcolatore

Informatica - A.A. 2010/11

I sistemi di numerazione

4 3 4 = 4 x x x 10 0 aaa

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica

Appunti di Sistemi Elettronici

Architettura dei computer

Laboratorio di Informatica

Architettura hardware

Nozione di algoritmo. Gabriella Trucco

Descrizione di un algoritmo

SISTEMI DI NUMERAZIONE E CODICI

FONDAMENTI di INFORMATICA L. Mezzalira

Appunti sulla Macchina di Turing. Macchina di Turing

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

Informatica. Rappresentazione dei numeri Numerazione binaria

C. P. U. MEMORIA CENTRALE

ISTITUTO TECNICO ECONOMICO MOSSOTTI

Introduzione al MATLAB c Parte 2

Convertitori numerici in Excel

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Introduzione alla programmazione in C

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Matematica in laboratorio

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore

Ing. Paolo Domenici PREFAZIONE

Guida Compilazione Piani di Studio on-line

LABORATORIO DI SISTEMI

All interno del computer si possono individuare 5 componenti principali: SCHEDA MADRE. MICROPROCESSORE che contiene la CPU MEMORIA RAM MEMORIA ROM

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Esame di INFORMATICA

Funzioni in C. Violetta Lonati

Architettura del calcolatore

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

NOZIONI ELEMENTARI DI HARDWARE E SOFTWARE

Sistema operativo: Gestione della memoria

Corso di Informatica

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

PROGETTO EM.MA PRESIDIO

Interesse, sconto, ratei e risconti

Strutturazione logica dei dati: i file

Scuola Secondaria di Primo Grado Anna Frank Nome Cognome classe anno sc. 2008/09 INFORMATICA

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Registratori di Cassa

Laboratorio di Informatica

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

CONCETTI BASE dell'informatica Cose che non si possono non sapere!

ALGEBRA DELLE PROPOSIZIONI

CPU. Maurizio Palesi

I file di dati. Unità didattica D1 1

Elementi di Informatica e Programmazione

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Introduzione. Informatica B. Daniele Loiacono

Struttura del calcolatore

ALGORITMI e PROGRAMMI Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

GUIDA AL CALCOLO DEI COSTI DELLE ATTIVITA DI RICERCA DOCUMENTALE

Gestione della memoria centrale

ARCHITETTURA DELL ELABORATORE

CORSO DI LAUREA IN SCIENZE ERBORISTICHE E DEI PRODOTTI NUTRACEUTICI

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Gli algoritmi: definizioni e proprietà

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Tecnologia dell Informazione

Uso di base delle funzioni in Microsoft Excel

INFORMATICA 1 L. Mezzalira

Elementi di Informatica. ( Lezione II, parte I ) Sistemi di numerazione: binario, ottale ed esadecimale

Come ragiona il computer. Problemi e algoritmi

Sistemi di Numerazione

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Linguaggi di programmazione

Funzionalità di un calcolatore

INFORMATICA, IT e ICT

Dispensa di Fondamenti di Informatica. Architettura di un calcolatore

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

II.f. Altre attività sull euro

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Hardware, software e periferiche. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre

Transcript:

Fondamenti dell informatica Algoritmi e Strutture Dati insegnamento di Gestione Informatica dei Dati CdL in Scienze Turistiche a cura di Bruno Bertaccini Materiale didattico a disposizione degli studenti, scaricabile all indirizzo http://www.ds.unifi.it/bertaccini. Sistemi di rappresentazione dei numeri (aritmetica degli elaboratori)

La rappresentazione dei numeri I sistemi di numerazione Un sistema di numerazione è un sistema utilizzato per esprimere i numeri e le operazioni che si possono effettuare su di essi. Per ovvi motivi, i più antichi sistemi di numerazione hanno base 10, con riferimento all'atto di contare con le dita delle mani. I sistemi di numerazione sono classificabili in base alle loro proprietà. Ad esempio, gli antichi Romani usavano un sistema additivo e non posizionale: ad esempio, il simbolo X rappresenta sempre il numero dieci, V il numero cinque, in qualunque posto del numero si trovino. La rappresentazione dei numeri Il sistema metrico decimale Il comune sistema metrico decimale, che tutti impariamo a scuola, è di tipo posizionale. Tale sistema ci è stato tramandato dagli Arabi. Nel sistema posizionale decimale ogni cifra assume un significato diverso a seconda della posizione in cui si trova (unità, decine, centinaia, ecc.): 2 1 0 133 1 10 3 10 3 10

La rappresentazione dei numeri I sistemi posizionali I sistemi posizionali sono caratterizzati da: una base b, ovvero un qualsiasi numero naturale b (diverso da zero e da uno); b simboli diversi dette cifre. In un sistema posizionale i numeri si compongono tenendo presente che il valore di ogni cifra va moltiplicato per: b 0 ( 1) se è l ultima cifra alla destra del numero considerato; 1 b se è la seconda cifra da destra; 2 b seèlaterzacifradadestra; n 1 b seèl n-esima cifra da destra. La somma di tutti i valori così ottenuti restituisce il numero che stiamo considerando in base dieci. La rappresentazione dei numeri Il sistema binario Il sistema di numerazione decimale si presta male ad essere trattato automaticamente. Il calcolatore è infatti costituito da componenti elettronici che hanno la caratteristica di rappresentare due stati opposti: un transistore può essere in stato di conduzione o di interdizione; un interruttore come un circuito può essere aperto o chiuso. Questi stati sono matematicamente rappresentabili tramite due sole cifre. Il più semplice sistema di numerazione è quello che usa due sole cifre (0 e 1). Tale sistema è detto binario elesuecifre sono dette bit (binary digit).

La rappresentazione dei numeri Il sistema binario Secondo le regole dei sistemi posizionali esposte in precedenza: 2 1 0 101bin 1 2 0 2 1 2 4 0 1 5dec 4 3 2 1 0 bin 10110 1 2 0 2 1 2 1 2 0 2 16 0 4 2 0 22 Si osservi che la somma di tutte le moltiplicazioni per tutte le potenze del 2, eccetto 2 0, restituiscono SEMPRE un numero pari. Percui: un numero binario è pari se finisce con la cifra 0; dispari se finisce con la cifra 1. dec La rappresentazione dei numeri Il sistema binario Si è detto che le regole dei sistemi posizionali consentono di trasformare in base 10 un generico numero espresso in base b. Nel caso del sistema binario, l operazione inversa può essere ottenuta operando divisioni successive della cifra decimale per la base b = 2: 5dec 2 1 2 2 0 1 2 1 0

La rappresentazione dei numeri Il sistema binario Secondo queste semplici regole è possibile costruire la tabella di conversione delle prime 16 cifre decimali naturali: Dec Bin 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 0 11 1 0 1 1 12 1 1 0 0 13 1 1 0 1 14 1 1 1 0 15 1 1 1 1 La rappresentazione dei numeri I sistemi ottale ed esadecimale L'uso del sistema binario è in genere molto complesso. L elevata lunghezza che assumono i numeri in binario (ad esempio, la sola cifra 9 necessita di quattro posizioni 1001) comporta un elevata possibilità di errore nel manipolarli e nell'interpretarli. Per ovviare a questo problema esistono sistemi di numerazione, l ottale e, soprattutto, l'esadecimale, che presentano il vantaggio di essere più compatti del binario e immediatamente convertibili in esso. sistema ottale: cifre 0, 1, 2, 3, 4, 5, 6, 7 sistema esadecimale: cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

La rappresentazione dei numeri I sistemi ottale ed esadecimale Secondo le regole dei sistemi posizionali esposte in precedenza: 2 1 0 147oct 1 8 4 8 7 8 64 32 7 103dec 1 0 A3hes 10 16 3 16 160 3 163 dec Si osservi che le potenze dell 8 e del 16 sono a loro volta esprimibili in potenze del 2, per cui la somma di tutte le moltiplicazioni per tutte tali potenze, eccetto le cifre moltiplicate per 8 0 o16 0, restituiscono SEMPRE un numero pari. Percui: un numero ottale o esadecimale è pari se finisce con una cifra pari; dispari se finisce con una cifra dispari. La rappresentazione dei numeri I sistemi ottale ed esadecimale Come per il binario, nel caso dei sistemi ottale ed esadecimale, si può convertire un numero decimale in tali sistemi operando divisioni successive della cifra decimale per le base b = 8 o b = 16: 103dec 8 7 12 8 4 1 8 1 0

La rappresentazione dei numeri La tabella di conversione completa Dec Bin Oct Hes 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 2 0 0 1 0 0 2 2 3 0 0 1 1 0 3 3 4 0 1 0 0 0 4 4 5 0 1 0 1 0 5 5 6 0 1 1 0 0 6 6 7 0 1 1 1 0 7 7 8 1 0 0 0 1 0 8 9 1 0 0 1 1 1 9 10 1 0 1 0 1 2 A 11 1 0 1 1 1 3 B 12 1 1 0 0 1 4 C 13 1 1 0 1 1 5 D 14 1 1 1 0 1 6 E 15 1 1 1 1 1 7 F La rappresentazione dei numeri Da ottale/esadecimale a binario Dai sistemi ottale ed esadecimale al binario e viceversa la conversione è immediata. Nel sistema ottale, poiché 2 3 = 8, vanno effettuati raggruppamenti di tre cifre e ogni cifra ottale va sostituita dalla sua rappresentazione in tre bit. Nel sistema esadecimale, poiché 2 4 = 16, vanno effettuati raggruppamenti di quattro cifre e ogni cifra esadecimale va sostituita dalla sua rappresentazione in quattro bit. 147 001 100 111 1100111 oct A3 1010 0011 10100011 hes bin bin

La struttura degli elaboratori La struttura degli elaboratori Il concetto di elaboratore def: elaboratore elettronico: macchina elettronica, modulare, a stati discreti, programmabile. elettronica: macchina costituita da componenti elettroniche, che sono prevalenti, sia quantitativamente, che qualitativamente; modulare: le unità funzionali, che lo compongono, possono essere realizzate con unità fisiche suscettibili di variare come numero e caratteristiche; a stati discreti: i componenti elementari di un elaboratore potranno trovarsi, ai fini del nostro studio, in due sole condizioni: si/no, acceso/spento, 1/0; programmabile: sarà di volta in volta l'utilizzatore ad indicare alla macchina le operazioni da compiere per la risoluzione di differenti problemi o classi di problemi;

La struttura degli elaboratori Il concetto di elaboratore Quella esposta in queste dispense non è la vera e propria struttura fisica di un elaboratore, ma solo una sua schematizzazione logica. Tale struttura funzionale può essere diversamente realizzata, a seconda dei tipi e delle dimensioni delle macchine. Per struttura funzionale intendiamo un dispositivo capace di compiere operazioni sui dati che transiteranno nel sistema. La struttura degli elaboratori Struttura funzionale Ogni rettangolo rappresenta una unità funzionale dell'elaboratore che dovrà necessariamente essere presente, affinché la macchina possa svolgere il proprio lavoro. Ogni unità funzionale potrà essere, poi, costituita da uno o più dispositivi fisici di dimensioni e caratteristiche variabili.

La struttura degli elaboratori Unità di ingresso e uscita (I/O) Unità d ingresso: queste unità hanno lo scopo di immettere dati nel sistema elettronico. Dispositivi tipici usati per questo scopo sono: lettori ottici, tastiere, lettori di caratteri magnetici, penne luminose associate ad unità video, video «touchscreen». Unità di uscita: tale unità servono ad emettere dati all'esterno dati e risultati di elaborazioni compiute dall'elaboratore. Dispositivi tipici usati a questo scopo sono: schermi video, stampanti, plotter. La struttura degli elaboratori Memoria centrale La memoria centrale haloscopodiimmagazzinaredatie programmi. I dati inseriti in memoria centrale generalmente sono memorizzati per il tempo necessario alle elaborazioni e non conservati per future elaborazioni. Le moderne memorie centrali degli elaboratori, formate da circuiti integrati, consentono operazioni di lettura e scrittura con tempi dell ordine del nanosecondo e sono destinate a contenere, sia le istruzioni che l'utilizzatore fornisce alla macchina, sia i dati di immediato utilizzo, necessari, di volta in volta, per un determinato lavoro. La memorizzazione delle istruzioni fa sì che l'elaboratore esegua le elaborazioni "in maniera automatica", senza l'intervento umano e alla velocità che gli è propria.

La struttura degli elaboratori Memoria centrale La memoria centrale è anche detta memoria ad accesso casuale (RAM = Random Access Memory), in quanto l elaboratore può direttamente arrivare all'indirizzo di memoria desiderato, senza dover scorrere altri indirizzi di memoria, cioè, appunto, in maniera casuale odiretta.talememoriaèvolatile, ovvero le informazioni in essa contenute si perdono ogniqualvolta l'elaboratore viene spento. Ci sono però altre zone di memoria in cui vengono immesse informazioni (dati od istruzioni) in maniera permanente, fin dal momento della costruzione dell'elaboratore; queste informazioni servono a scopi ben precisi e possono venir solo lette, senza possibilità di modifica: tale parte della memoria è detta memoria a sola lettura (ROM = Read Only Memory). La struttura degli elaboratori Memoria centrale La memoria centrale è schematizzabile come un insieme finito, ordinato e numerato di celle o posizioni, ciascuna delle quali, da sola od in gruppo, può contenere un'informazione in forma binaria. Il numero delle celle rappresenta la capacità della memoria. La dimensione di una cella è equivalente al numero di bit da cui essa è composta: generalmente una cella di memoria corrisponde ad un byte ovvero è formata da 8 bit. Il byte è pertanto l'unità di misura delle memorie degli elaboratori (comprese quelle ausiliarie). L'utilizzo pratico comporta, spesso, l'uso di celle di dimensioni maggiori. Ogni cella è individuata da un suo numero d'ordine, che ne rappresenta l'indirizzo, a cui si fa riferimento per accedere all'informazione memorizzata o per inserire l'informazione (dato l elevato numero di celle, gli indirizzi sono rappresentati in formato esadecimale).

La struttura degli elaboratori Memorie ausiliarie Le memorie ausiliarie esterne (dette anche memorie secondarie o di massa) sono memorie deputate alla memorizzazione di tutti gli archivi che vogliamo conservare per future consultazioni, nonché i programmi realizzati o acquisiti. Gli archivi possono anche essere il risultato di elaborazioni in corso, e venire poi eliminati al termine del processo elaborativo, o possono essere costituiti dal risultato di precedenti elaborazioni. Il tempo di accesso, ossia il tempo necessario alla lettura o alla scrittura di un insieme elementare di dati, è variabile a seconda dell'unità fisica impiegata e del sistema di organizzazione dei dati usato. Sono esempi di memorie ausiliare gli hard-disk, i supporti magnetici rimovibili (floppy, CD e DVD), le moderne flash-memory. La struttura degli elaboratori Ordini di grandezza delle memorie degli elaboratori 1 byte = 8 bit I simboli K, M, G, T sono usati per indicare multipli del byte. 10 1 Kbyte = 2 ( 1024) byte, ovvero la potenza del 2 3 più vicina al Kilo ( 10 ( 1000) ) 1 Mbyte = 1024 Kbyte =, 10 10 10 10 20 1024 1024 2 2 2 2 ( 1048576) byte 6 ovvero la potenza del 2 più vicina al Mega ( 10 ( 1000000) ) 1 Gbyte = 1024 Mbyte = 30 2 byte, ovvero la potenza del 2 9 più vicina al Giga ( 10 ) 40 1 Tbyte = 1024 Gbyte = 2 byte, ovvero la potenza del 2 12 più vicina al Tera ( 10 )

La struttura degli elaboratori CPU: central processing unit La CPU è l unità centrale di elaborazione tradizionalmente composta da 2 componenti, che possono essere, o meno, fisicamente separati (l'unità di controllo e l'unità aritmetico-logico). L'unità di controllo (CU) è il dispositivo che provvede a controllare l'attività di elaborazione. Il suo ruolo è quello di decodificare e far eseguire le istruzioni presenti in memoria centrale, nonché di supervisionarne l'esecuzione. Questa unità non esegue, quindi, le istruzioni: il suo compito è quello di leggere le istruzioni, una alla volta, prelevandole dalla memoria centrale, di interpretarle, cioè di capirne il significato, di provvedere a che vengano eseguite, dando gli opportuni comandi alle varie unità interessate. La struttura degli elaboratori CPU: central processing unit L'unità aritmetico-logica (ALU) è il dispositivo che esegue le operazioni aritmetiche e logiche. Per far ciò si serve, oltre che di appositi circuiti elettronici, di particolari registri, fra cui alcuni che possono essere specificamente dedicati alla manipolazione aritmetica e logica dei dati, detti accumulatori. Oltre che dalla capacità di memoria, la potenza di un elaboratore dipende, anche dalle caratteristiche della unità logico-aritmetica, quali la sua velocità e le operazioni che essa può eseguire, per altro legate alle capacità e velocità dell'unità di controllo.

La struttura degli elaboratori Unità canale (BUS) Nella descrizione della struttura funzionale di un elaboratore è stato precisato che la CPU comunica con le altre unità, comprese quelle di input/output, attivandole affinché effettuino le operazioni che sono loro proprie. I moderni sistemi elettronici sono anche dotati di una o più unità di elaborazione distinte dall'unità centrale (processori esterni), alle quali quest'ultima affida il compito di comunicare direttamente con le periferiche. In questo modo è possibile gestire al meglio le operazioni di ingresso e di uscita. Tali unità si chiamano canali. I canali sono, in pratica, unità di elaborazione che hanno un accesso diretto alla memoria e sono in grado di trasferire i dati fra la CPU, la memoria centrale e le periferiche con le quali comunicano. La programmabilità degli elaboratori

La programmabilità degli elaboratori Introduzione Gli elaboratori elettronici sono macchine programmabili: l utilizzatore deve fornire loro un insieme di istruzioni che indichino le operazioni da compiere ed i dati su cui operare. Un insieme coerente di tali istruzioni si chiama PROGRAMMA Tali istruzioni, una volta memorizzate nella memoria centrale, verranno prese in considerazione dalla CPU che si occuperà dell attivazione dei dispositivi necessari alla loro elaborazione La programmabilità degli elaboratori Introduzione Un elaboratore elettronico, a differenza di quanto ci si potrebbe aspettare, è in grado di compiere SOLO operazioni estremamente semplici (es: una radice quadrata, una funzione trigonometrica richiedono programmi specifici) OPERAZIONI ELEMENTARI Tuttavia un elaboratore è molto veloce e può eseguire un gran numero di operazioni nell unità di tempo (la velocità dipende anche dal fatto che le operazioni sono appunto elementari)

La programmabilità degli elaboratori Le operazioni elementari Classificazione delle istruzioni elementari in base alla diversità delle funzioni svolte dall elaboratore e agli effetti che queste hanno sui dati. 1. Istruzioni aritmetiche e logiche 2. Istruzioni di trasferimento 3. Istruzioni di input-output 4. Istruzioni di controllo 5. Istruzioni ausiliarie La programmabilità degli elaboratori Le operazioni elementari Istruzioni Aritmetiche e Logiche. servono ad eseguire operazioni aritmetiche ( +,-, *, / ) e logiche (NOT, AND, OR) sui dati presenti nella memoria centrale Istruzioni di Trasferimento. permettono lo spostamento dei dati all interno della memoria centrale e tra questa e i registri presenti nella unità aritmetico logica (ALU) della CPU

La programmabilità degli elaboratori Le operazioni elementari Istruzioni Input-Output. consentono l immissione e l emissione dei dati nella e dalla memoria centrale; il dialogo avviene generalmente con in i dispositivi di I/O e e con le memorie ausiliarie. Istruzioni di Controllo. guidano lo svolgimento dell elaborazione controllando l ordine di esecuzione delle istruzioni elementari; sono eseguite dalla unità di controllo (CU) della CPU. Istruzioni Ausiliarie. sono deputate a riordinare alcuni dispositivi fisici dell elaboratore e a controllarne lo stato. La programmabilità degli elaboratori Le operazioni elementari Operazione Elementare (generalizzata) codice operativo operando indica il tipo di operazione da compiere identifica i dati o i dispositivi che interessano l operazione L insieme dei codici operativi e le regole che guidano il modo di esprimere gli operatori costituiscono un sistema di programmazione, un sistema completo per gestire il funzionamento dell elaboratore ed indirizzarlo alla risoluzione di un determinato problema.

La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Tale sistema è detto LINGUAGGIO MACCHINA perché è il SOLO comprensibile dall unità di controllo dell elaboratore. Il Linguaggio Macchina varia da elaboratore ad elaboratore ed è estremamente complicato da utilizzare ed interpretare da parte dell utilizzatore. Generalmente vengono utilizzati altri linguaggi di programmazione, i cosiddetti LINGUAGGI SIMBOLICI, basati su una modalità di espressione di operatori ed operandi più simili ai criteri usati dal linguaggio umano. La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Un programma espresso per mezzo di un linguaggio simbolico non è direttamente utilizzabile dall unità di controllo dell elaboratore; sarà prima necessario TRADURLO per mezzo di un apposito programma nell unico linguaggio comprensibile alla CU: il linguaggio macchina appunto.

Gli ALGORITMI Gli Algoritmi Algoritmi: aspetti definitori I problemi umani la cui soluzione è demandata ad un elaboratore sono notoriamente MOLTO COMPLESSI. 2 (es: per x = 1.347) f( x) 2x 3x 5 Ma un elaboratore è in grado di svolgere SOLO OPERAZIONI ELEMENTARI e NON operazioni complesse. Come è possibile allora utilizzare un elaboratore per risolvere un problema complesso?

Gli Algoritmi Algoritmi: aspetti definitori Occorre SCOMPORRE il problema complesso in una serie di operazioni elementari in grado di poter essere compiute da un esecutore che non riesce ASSOLUTAMENTE a prendere in considerazione il problema nella sua interezza. Tale procedimento è detto PROCESSO ALGORITMICO ed il risultato di tale processo è detto ALGORITMO Gli Algoritmi Algoritmi: aspetti definitori L ALGORITMO è una serie finita e completa di operazioni elementari ordinate alla soluzione di un problema, da effettuare meccanicamente, ossia attraverso una esecuzione precisa delle regole, senza implicare alcuna conoscenza del caso da trattare. Le operazioni in cui viene scomposto il processo risolutivo del problema devono essere comprensibili ed eseguibili dall entità cui l algoritmo è destinato, entità che può non necessariamente essere l elaboratore. In pratica esisterà sempre un limite preciso al numero di istruzioni che possono comporre l algoritmo e al tempo di esecuzione dello stesso, limite dettato dalle caratteristiche dell elaboratore.

Gli Algoritmi Algoritmi: caratteristiche Un ALGORITMO adatto ad essere utilizzato da un elaboratore deve rispondere ad alcune proprietà essenziali; deve cioè essere: effettivo; definito e non ambiguo; generale; finito. Gli Algoritmi Algoritmi: caratteristiche Deve avere un punto di partenza e deve essere EFFETTIVO cioè deve avere un punto di partenza ed ogni operazione deve produrre un certo e ben determinato risultato ogni volta che si presentano le stesse condizioni. Deve essere DEFINITO e NON AMBIGUO è necessario ciò che sia stato previsto ogni aspetto che il problema può assumere durante la fase risolutiva e che ogni espressione sia interpretabile in maniera univoca senza ambiguità.

Gli Algoritmi Algoritmi: caratteristiche Deve essere GENERALE ossia utilizzabile per una serie o classe di problemi. Dominio dell algoritmo: insieme dei dati che possono essere elaborati e le condizioni che ne permettono l elaborazione Deve essere FINITO deve cioè poter giungere al suo termine dopo che sia stato eseguito un numero anche elevatissimo ma finito di istruzioni (poiché spesso le istruzioni possono essere eseguite in modo ciclico loop -, sarà necessario che non sia possibile prevedere loop non aventi limite finito). Gli Algoritmi Analisi e Programmazione ANALISI: fase di comprensione del problema, in base all obiettivo da perseguire. Conduce ad un disegno articolato del problema stesso. Ogni problema che l uomo si pone comporta una serie di azioni ( decisioni ) stabilite in base allo stato dell informazione disponibile all insorgere del problema stesso: si effettua una rassegna degli elementi determinanti alla soluzione, elencando gli elementi necessari e quelli disponibili. Vengono decise le azioni da compiere e la loro sequenza temporale.

Gli Algoritmi Analisi e Programmazione Generalizzazione della fase d Analisi: definizione dei dati in ingresso; definizione dei risultati in uscita; individuazione dei termini del problema e dei possibili metodi risolutivi; determinazione della necessità e della disponibilità di risorse (di calcolo e memorizzazione); generalizzazione del problema (definizione di una classe di problemi da risolvere); descrizione informale dell algoritmo o degli algoritmi necessari a risolvere la procedura. Gli Algoritmi Analisi e Programmazione PROGRAMMAZIONE: ha lo scopo di descrivere le operazioni che l elaboratore deve eseguire per risolvere il problema. Fase della programmazione insieme delle attività e delle funzioni che trasformano il bisogno (necessità di risolvere il problema con un elaboratore) in una richiesta di formulazione, costruzione e definizione delle regole di comportamento per la soluzione di classi di processi di elaborazione, fatte ad un insieme di risorse di calcolo.

Gli Algoritmi Analisi e Programmazione Tecnica TOP-DOWN: si definiscono inizialmente un insieme d azioni a grandi linee (macro istruzioni) e si procede per raffinamenti successivi, fino ad arrivare ad operazioni elementari che l esperienza designa come indipendenti dal linguaggio di programmazione utilizzato per scrivere il programma. Tecnica BOTTOM-UP: parte dai singoli dati e dalle operazioni elementari da compiere su di essi, arrivando, per aggregazione, ad una o più procedure automatiche. Gli Algoritmi Analisi e Programmazione Indipendentemente dalla tecnica usata, la programmazione si concretizza nei seguenti passi: definizione formale dell algoritmo, spesso in forma grafica tramite un diagramma a blocchi; stesura del programma nel linguaggio di programmazione prescelto; prova del programma. La programmazione è sicuramente un processo creativo non vincolato da regole, che deve tenere in considerazione alcuni criteri di ottimizzazione quali i tempi di calcolo e l occupazione delle memorie.

Gli Algoritmi Esempi di algoritmi Una ricetta di cucina. Lettura di due valori numerici e stampa del maggiore tra i due Lettura di due valori numerici A e B e stampa di (A-B)^2 Lettura del valore numerico n e calcolo di Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. Ordinamento di una sequenza di numeri n i 0 2 i Gli Algoritmi Algoritmi rilevanti Progetto Genoma Umano per la mappatura dei 100000 geni del DNA umano; Navigazione Internet: percorsi ottimali che i dati devono percorrere in rete per il rapido accesso a grandi quantità di informazioni e motori di ricerca; Percorso stradale minimo data una certa rete viaria (es: mappe in internet); Compressione del testo, crittografia e firme digitali; Allocazione ottimale dei prodotti negli scaffali di un supermercato (P. L. e Game Theory); Gestione delle code;

Gli Algoritmi Efficienza di un Algoritmo Quand è che un Algoritmo è EFFICIENTE? quando è CORRETTO: cioè produce il risultato atteso; quando è VELOCE (in termini di tempo impiegato per produrre il risultato); quando è PARSIMONIOSO (in termini di risorse allocate per produrre il risultato). Strutture dati (fondamenti)

Strutture dati Classificazione Variabili numeriche Bit Intere Reali (razionali) precisione singola precisione doppia Complesse Variabili carattere Strutture dati Strutture di memorizzazione Variabili singole: singole celle di memoria cui fare riferimento sfruttando un etichetta definita dal programmatore es: A, pippo, tot Vettori: una sequenza indicizzabile di variabili dello stesso tipo accomunate da una stessa etichetta definita dal programmatore es: vett[1] consente di accedere alla prima cella di memoria del vettore denominato vett ab[10] consente di accedere alla 10 cella di memeoria del vettore denominato ab

Strutture dati Strutture di memorizzazione Matrici: una sequenza indicizzabile di vettori dello stesso tipo; una matrice di fatto si configura come un insieme di celle di memoria dello stesso tipo organizzate in righe e colonne, accumunate da una stessa etichetta definita dal programmatore es: mat[1,3] consente di accedere alla cella collocata all intersezione tra la prima riga e la terza colonna della matrice denominata mat; M[2,2] consente di accedere alla cella collocata all intersezione tra la seconda riga e la seconda colonna della matrice denominata M; I DIAGRAMMI a BLOCCHI (o Diagrammi di Flusso)

I Diagrammi a Blocchi Aspetti definitori I Diagrammi a Blocchi sono uno strumento molto utilizzato in informatica per una chiara e semplice esposizione in forma grafica degli algoritmi. Sono uno strumento fondamentale per l analista (servono a definire in modo schematico il processo algoritmico di scomposizione di un problema), danno una visione immediata dell iter risolutivo e facilitano il controllo di correttezza logica dell algoritmo. Inoltre hanno anche uno scopo comunicativo: la documentazione di un algoritmo nel tempo. È infatti molto più facile leggere un algoritmo schematizzato mediante un diagramma a blocchi che leggerne la sua traduzione in uno specifico linguaggio di programmazione. I Diagrammi a Blocchi Aspetti definitori Requisiti essenziali di un Diagramma a Blocchi: deve esistere un solo blocco di inizio; deve essere previsto almeno un blocco di fine; il diagramma può esibire un numero finito di blocchi di controllo; il diagramma può prevedere un numero finito di blocchi relativi sia ad operazioni aritmetiche e logiche che di I/O.

I Diagrammi a Blocchi Simboli e regole di costruzione Punto di Inizio e punti di Fine Operazioni Aritmetiche e Logiche Operazioni di Input/Output Decisioni Sottoprogrammi Connessioni ad un qualsiasi punto del diagramma I Diagrammi a Blocchi Simboli e regole di costruzione Regole di implementazione: ogni blocco logico/aritmetico o di I/O deve avere una sola linea in ingresso e una sola in uscita; ogni blocco di controllo deve avere una sola linea in ingresso e due (o più) linee in uscita; una linea può inserirsi in un blocco o in un altra linea; dall unico blocco iniziale parte una sola linea, seguendo la quale, attraverso un insieme non vuoto di blocchi deve potersi raggiungere uno dei blocchi finali.

I Diagrammi a Blocchi es. 1 : scambio di due valori numerici START INPUT A INPUT B semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B AUX = B B = A A = AUX PRINT A PRINT B STOP I Diagrammi a Blocchi es. 1 : scambio di due valori numerici START INPUT A INPUT B semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B Scambia A con B dove Scambia A con B PRINT A PRINT B AUX = B B = A A = AUX STOP

I Diagrammi a Blocchi es. 2 : scambio di due valori numerici START INPUT A INPUT B A > B No scambio di 2 valori numerici immessi da tastiera nelle variabili A e B solo se il primo è maggiore del secondo Sì Scambia A con B PRINT A PRINT B STOP I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore Somma di una certa sequenza di valori, immessi da tastiera all interno di un vettore

I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore Somma vettore START Somma degli elementi di un vettore V già presente in memoria J = 1 S = 0 J <= N No PRINT S STOP Sì S = S + V[J] J = J + 1 I Diagrammi a Blocchi es. 4 : ricerca del minimo di un vettore Minimo di un vettore START Ricerca del minimo di un vettore V già presente in memoria min = V[1] N = length(v) J = 2 J <= N No PRINT min STOP J = J +1 Sì No V[J] < min Sì min = V[J]

I Diagrammi a Blocchi es. 5 : somma, media, min e max di un vettore START INPUT N DIM V[N] A media = S/N PRINT media Somma, media, min e max di una sequenza di valori, immessi da tastiera all interno di un vettore INPUT V[1] INPUT V[N] Minimo di un vettore Somma vettore Massimo di un vettore A STOP I Diagrammi a Blocchi es. 6 : calcolo di una serie parziale Lettura del valore numerico n e calcolo di n i 0 2 i

I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo di Euclide) START INPUT N INPUT M Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. Sì M > N No Scambia M con N Q = INT(N/M) R = N - M*Q N = M M = R No R = 0 Sì PRINT MCD :, M STOP I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo inefficiente) START INPUT N INPUT M Sì M > N No Scambia M con N Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. con un algoritmo inefficiente J = M Q = INT(N / J) R = N - J*Q J = J - 1 No R = 0 Sì PRINT MCD :, J STOP

I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2 grado se abc,, b 2 4ac >0 : =0 : Ricerca delle due radici reali x 1 e x 2, di una equazione del tipo 2 ax bx c b x 2a b x 2a 0 <0 : non esistono radici reali I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2 grado Ricerca delle due radici reali x 1 e x 2, di una equazione del tipo 2 ax bx c 0

PSEUDO-LINGUAGGIO Pseudo-linguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Condizioni: IF (condizione) THEN inizio blocco ( { ) istruzione 1 istruzione 2 fine blocco ( } ) ELSE inizio blocco ( { ) istruzione 1 istruzione 2 fine blocco ( } )

Pseudo-linguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Condizioni nidificate (una dentro l altra): IF (condizione) THEN { [blocco istruzioni] } ELSE IF (condizione) THEN { [blocco istruzioni] } ELSE { [blocco istruzioni] } Pseudo-linguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Iterazioni: FOR (variabile) = (inizio) TO (fine) (step) inizio blocco ( { ) istruzione 1 istruzione 2 fine blocco ( } ) WHILE (condizione) inizio blocco ( { ) istruzione 1 istruzione 2 fine blocco ( } )

Pseudo-linguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Iterazioni nidificate (una dentro l altra): FOR (variabile1) = (inizio) TO (fine) (step) { FOR (variabile2) = (inizio) TO (fine) (step) { istruzione 1 istruzione 2 } } Pseudo-linguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Esempio di confronto tra FOR e WHILE FOR I = 1 TO 10 { istruzione 1 istruzione 2 } I=1 WHILE (I<=10){ istruzione 1 istruzione 2 I = I + 1 }

Pseudo-linguaggio Lettura delle diapositive successive Le diapositive successive illustrano esempi di soluzione degli algoritmi proposti. Si osservi che solo per i primi algoritmi sarà fatto un parallelo tra gli schemi risolutivi tipici del diagramma a blocchi e la sintassi propria dello pseudo-linguaggio. Man mano che la complessità algoritmica aumenterà, si abbandoneranno i diagrammi a blocchi per utilizzare solo ed esclusivamente la sintassi dello pseudo-linguaggio. Diagrammi a blocchi e pseudo-linguaggio es. 1 : scambio di due valori numerici START semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B INPUT A INPUT B start AUX = B B = A A = AUX PRINT A PRINT B read A,B AUX=B B=A A=AUX write A,B STOP stop

Diagrammi a blocchi e pseudo-linguaggio es. 2 : scambio di due valori numerici START INPUT A INPUT B A > B PRINT A PRINT B STOP Sì Scambia A con B No scambio di 2 valori numerici immessi da tastiera nelle variabili A e B solo se il primo è maggiore del secondo start read A,B if (A>B) then { AUX=B B=A A=AUX } write A,B stop Diagrammi a blocchi e pseudo-linguaggio es. 3 : somma dei valori di un vettore Somma di una certa sequenza di valori, immessi da tastiera all interno di un vettore start read N S=0 for I=1 to N{ read VETT[I] S=S+VETT[I] } write S stop

Pseudo-linguaggio es. 3 : somma di valori (variante) Somma di una certa sequenza di valori, immessi da tastiera senza ricorrere al vettore start read N S=0 for I=1 to N{ read A S = S + A } write "totale: ", S stop Pseudo-linguaggio es. 4 Leggere un numero da tastiera tra 50 e 90 e produrre la somma di tutti i numeri dispari tra 49 ed il valore letto start write "inserisci numero tra 50 e 90: " read N if (N<50 or N>90) then { write ("errore") stop } S=0 for I = 49 to N step 2{ S = S + I } write "totale: ", S stop NB: in questa forma, l algoritmo si ferma in caso di errore (condizione numero tra 50 e 90 non rispettata per cui l IF fa eseguire lo STOP) senza dare la possibilità all utente di inserire un nuovo numero

Pseudo-linguaggio es. 4 (variante) Leggere un numero da tastiera tra 50 e 90 e produrre la somma di tutti i numeri dispari tra 49 ed il valore letto start N=0 while (N<50 or N>90){ write "inserisci numero tra 50 e 90: " read N if (N<50 or N>90) then { write ("errore") } } S=0 for I = 49 to N step 2{ S = S + I } write "totale: ", S stop Per ovviare al problema precedente (uscita forzata al primo errore) si utilizza il WHILE: per far sì che l algoritmo entri nel WHILE si preassegna ad N (variabile che conterrà il numero da leggere) un valore NON compreso tra 50 e 90 (nell esempio si parte con N=0). Finchè l utente continuerà ad inserire valori NON compresi tra 50 e 90, il WHILE continuerà ad eseguire le istruzioni tra parentesi graffe Pseudo-linguaggio es. 5: successione semplice Produrre la somma dei primi 20 numeri della successione: 1, 3, 7, 15, 31 (a n+1 = 2*a n +1) start A=0 SUM=0 for I = 1 to 20{ A = 2*A + 1 SUM = SUM + A } write SUM stop Partendo da 0, il primo elemento generato della successione all interno del FOR è 1, come richiesto dall esercizio

Pseudo-linguaggio es. 5: successione di Fibonacci start write "quanti numeri: " read M if (M<2) then { write ("errore") stop } vett[1]=0 vett[2]=1 SUM=1 for I = 3 to M{ vett[i] = vett[i-1] + vett[i-2] SUM = SUM + vett[i] } write SUM stop Produrre la somma dei primi M numeri della successione di Fibonacci: 0, 1, 1, 2, 3, 5, 8 (a n+1 = a n + a n-1 ) Ogni nuovo elemento della successione è funzione dei due precedenti, per cui in questo caso conviene usare un vettore ed impostare le prime due celle dello stesso a 0 e 1 (prime due cifre della successione) In questo caso si parte da 1 perché la somma delle prime due cifre della successione è 1 Il ciclo FOR in questo caso parte da 3 perché i primi due valori della successione risultano assegnati all esterno del ciclo Pseudo-linguaggio es. 6: gestione di un archivio In un archivio sono memorizzati i seguenti campi relativi alla gestione di un ristorante: n pasti cucinati all ora di pranzo; n pasti cucinati all ora di cena. Ogni record è relativo ad un certo giorno dell anno, ma non è detto che il ristorante sia rimasto aperto per tutti i giorni dell anno. Sapendo che il costo di ogni pasto è di 3 e che viene venduto ad un prezzo di 5.10, e sapendo che i costi fissi ammontano a 59000, realizzare un algoritmo in grado di calcolare se nell anno di riferimento si è verificato un utile oppure una perdita.

Pseudo-linguaggio es. 6: gestione di un archivio start ARCH=open("ristorante.txt") DA=dim(ARCH) NREC=DA[1] TOT=-59000 for I = 1 TO NREC { TOT = TOT + (ARCH[I,1]+ARCH[I,2])*2.1 } if (TOT<0) then{ write ("si è verificato una perdita di: ", TOT) } else{ write ("si è verificato un utile di: ", TOT) } stop L istruzione OPEN consente di leggere un archivio dalla memoria ausiliaria (hard disk) e trasferirlo nella RAM. Un archivio si configura come una matrice (è organizzato in righe dette record, ciascuna delle quali è composta da più colonne dette campi) per cui viene trasferito nella RAM sotto tale forma. L istruzione DIM restituisce un vettore di due elementi: il primo valore è pari al numero di righe della matrice, il secondo al numero di colonne. IL LINGUAGGIO FORTRAN Selezione di esercizi svolti tratti dagli esami degli appelli precedenti Note per la lettura: i nomi delle variabili sono scritti in maiuscolo; le istruzioni FORTRAN sono scritte in minuscolo; nei riquadri, sono riportati alcuni commenti aggiuntivi che non sono codice FORTRAN e non devono essere confusi con esso, e che hanno il solo scopo fornire chiarimenti sul flusso delle istruzioni.

Il linguaggio FORTRAN 5 giugno 2008 es. 1 le istruzioni iniziano a colonna 7; una C a colonna 1 indica che stiamo scrivendo un commento che non verrà considerato dal compilatore C C Scrivere un programma FORTRAN che legga un valore da tastiera in lire e lo converta in euro (1 = 1936,27 L.) write (*,*) "inserire valore in lire" read (*,*) V le variabili utilizzate rispettano i criteri imposti dalla V2 = V/1936.27 dichiarazione implicita: V e V2 sono di tipo reale write (*,20) 'il valore in euro:', V2 stop 20 format (f10.2) end occorre assegnare un formato con 2 cifre decimali al risultato, in quanto la conversione in euro prevede al massimo 2 cifre decimali (i centesimi) Il linguaggio FORTRAN 18 giugno 2008 es. 1 C Si scriva un programma FORTRAN che legga da tastiera C in sequenza 15 numeri naturali (interi non negativi) e, C al termine, stampi a video il valore massimo tra i 15 C valori inseriti. MAX=0 0 è i più piccolo numero naturale ciclo per la sequenza dei 15 valori do I=1,15 write (*,*) 'inserisci (', I, ' ) numero naturale:' read (*,*) N if (N.GT. MAX) MAX=N end do write (*,*) 'massimo valore inserito', MAX stop end appena viene individuato un numero più grande di MAX, MAX viene riassegnato a quel numero anche in questo caso le variabili utilizzate rispettano i criteri imposti dalla dichiarazione implicita.

Il linguaggio FORTRAN 24 gennaio 2008 es. 1 C C C Si scriva un programma FORTRAN che legga da tastiera in sequenza 10 numeri interi e, al termine, stampi a video la loro somma e il loro valore medio. integer SUM real MEAN in questo caso invece occorre dichiarare esplicitamente le variabili SUM e MEAN che non rispettano la convenzione implicita: la somma di interi è una variabile intera, la loro media è una variabile reale ciclo per la sequenza dei 10 valori SUM=0 variabile totalizzatore inizializzata a zero (zero è l elemento neutro per la somma) do I=1,10 write (*,*) 'inserisci (', I, ' ) numero intero:' read (*,*) N SUM = SUM + N end do tutti i numeri inseriti vengono di volta in volta cumulati nel totalizzatore essendo MEAN reale, se SUM, che è intera, venisse MEAN = SUM / 10.0 divisa per 10 restituirebbe un risultato di tipo intero e non reale come invece accade dividendo per 10.0 write (*,*) 'somma:', SUM, '; media:', MEAN stop end Il linguaggio FORTRAN luglio 2007 es. 1 C Scrivere un programma FORTRAN che legga da tastiera i C valori N e M, controllando che siano compresi fra 10 e 90; C Il programma deve poi procedere a calcolare: C 1. il prodotto di tutti i numeri tra il maggiore dei due ed C il minore dei due (estremi compresi); C 2. la somma di tutti i numeri interi positivi più piccoli C (cioè fino al valore 1) del minore dei due. PROD e SUM sono dichiarate intere di 8 byte per integer*8 PROD, SUM contenere numeri interi molto grandi 10 write (*,*) 'inserisci primo numero:' read (*,*) N if (N.lt. 10.or. N.gt. 90) goto 10 15 write (*,*) 'inserisci secondo numero:' read (*,*) M if (M.lt. 10.or. M.gt. 90) goto 15 controllo sul rispetto dei vincoli per i valori inseriti C continua a pag. successiva

Il linguaggio FORTRAN luglio 2007 es. 1 (continua) MAX=M MIN=N if (MAX.lt. MIN) then MAX=N MIN=M endif dei due valori inseriti, inizialmente si suppone che M sia il più grande e N sia il più piccolo; poi si controlla se ciò e vero ed in caso contrario si inverte l assegnazione PROD=1 do I=MIN,MAX PROD=PROD*I end do SUM=0 do I=1,(MIN-1) SUM=SUM+I end do variabile moltiplicatore inizializzata a 1 (uno è l elemento neutro per il prodotto) variabile totalizzatore inizializzata a zero (zero è l elemento neutro per la somma) write (*,*) SUM, PROD end Il linguaggio FORTRAN luglio 2007 es. 2 Testo dell esercizio Scrivere un programma FORTRAN che legga da un file relativo alle vendite di un outlet in un certo periodo due variabili da ogni record (senza conoscere a priori il numero di record da leggere). Le due variabili sono rispettivamente: a. il prezzo intero del capo d abbigliamento venduto (espresso in con due decimali, il campo è di 6 byte); b. lo sconto percentuale che è stato praticato (un numero intero, in un campo di 2 cifre). A esempio, il valore 30 indica che è stato praticato uno sconto del 30%. Qualora siano presenti valori superiori a 70 sono da considerare come errori e devono essere rimpiazzati dal valore 70. Dopo aver letto tutto l archivio si vuole stampare il totale incassato, in con due decimali.

Il linguaggio FORTRAN luglio 2007 es. 2 (continua) TOTI=0.0 open (5, file= vendite.dat') 10 read (5,*,END=40) PI, SC if (SC.gt. 70) SC=70 tutte le variabili utilizzate sono reali e non devono essere dichiarate perché rispettano le regole della convenzione implicita TOTI=TOTI+PI*(100-SC)/100 goto 10 40 write (*,45) 'totale incassato:', TOTI stop controllo sul valore dello sconto come richiesto dall esercizio gli sconti vengono applicati al prezzo intero ed il risultato viene immediatamente cumulato nella variabile totale incassato TOTI 45 format (f8.2) end formato di visualizzazione del totale incassato con 2 cifre decimali: 8 caratteri totali disponibili per l output di cui uno riservato alla virgola e 2 ai decimali, per cui solo cinque sono riservati alla parte intera Il linguaggio FORTRAN 10 luglio 2008 es. 2 Testo dell esercizio Un indagine campionaria vuole accertare la passione dei fiorentini per la cinematografia: agli intervistati è stato chiesto di indicare il numero di proiezioni cinematografiche cui hanno assistito nel corso del 2007. I risultati dell indagine sono memorizzati in un archivio il cui tracciato record può essere esemplificato dalla seguente tabella: n proiezioni n intervistati 0 2130 1 3412 2 5323 Scrivere un programma FORTRAN che produca in output: a. il totale degli proiezioni cinematografiche cui hanno assistito gli intervistati; b. il numero medio di proiezioni cui ha assistito ciascun intervistato.

Il linguaggio FORTRAN 10 luglio 2008 es. 2 (continua) integer TOTPR, TOTI real MEDIAPR TOTPR=0 TOTI=0 queste variabili devono essere dichiarate perché non rispettano i criteri della convenzione implicita i totalizzatori devono sempre essere azzerati open (5, file= archivio.dat ) 10 read (5,*,END=35) NUMP, NUMI al file (device o dispositivo) contenente le informazioni viene assegnato l etichetta 5 TOTI = TOTI + NUMI TOTPR = TOTPR + NUMP*NUMI goto 10 si continua a leggere dal file finché non se ne raggiunge la fine (eof = end of file); quando cò avviene, l esecuzione riprende dalla riga 35 35 MEDIAPR = 1.0*TOTPR/TOTI il rapporto tra due interi è intero; poiché la media è reale occorre premoltiplicare per 1.0 write (*,*) 'totale proiezioni:', TOTPR write (*,*) 'media proiezioni per intervistato:', MEDIAPR stop end Il linguaggio FORTRAN 24 gennaio 2008 es. 2 Testo dell esercizio Una catena di grande distribuzione gestisce in città 4 supermercati (codificati rispettivamente con i numeri da 1 a 4). In un archivio sono memorizzati, per ciascun supermercato e per ciascun mese del 2007, il numero degli scontrini emessi (vedi esempio sotto riportato) e il totale incassato. Supermercati Mese Scontrini Incasso 1 1 1200 201103 2 1 1106 202123 3 1 1154 312234 4 1 1183 254321 1 2 1233 342167 Produrre un programma FORTRAN che produca in output: a. il totale degli scontrini emessi per tutto il 2007; b. il totale incassato per tutto il 2007; c. il valore dello scontrino medio per i mesi estivi del 2007 (giugno, luglio e agosto).

Il linguaggio FORTRAN 24 gennaio 2008 es. 2 (continua) integer*4 S, TOTS, TOTSE real I, MEDIASE TOTS=0 TOTI=0.0 TOTSE=0 TOTIE=0.0 queste variabili devono essere dichiarate perché non rispettano i criteri della convenzione implicita; alle variabili scontrino (S) e totali scontrino (TOTS e TOTSE) viene riservato una zona di memoria di 4 byte totale incasso e totale scontrini per i mesi estivi open (7, file= supermarket.dat') 15 read (7,*,END=65) A, M, S, I TOTS = TOTS + S TOTI = TOTI + I if (M.gt. 5.and. M.lt. 9) then TOTSE = TOTSE + S TOTIE = TOTIE + I endif goto 15 65 MEDIASE = 1.0*TOTIE/TOTSE write (*,70) 'totale scontrini:', TOTS write (*,72) 'totale incasso:', TOTI write (*,72) 'scontrino medio mesi estivi:', MEDIASE stop 70 format (a28,i9) 72 format (a28,f12.2) end si continua a leggere dal file finché non se ne raggiunge la fine (eof = end of file); quando ciò avviene, l esecuzione riprende dalla riga 65 come esercizio precedente a28: formato di un output di tipo carattere (28 carat. disponibili) i9: formato di un output di tipo intero (9 carat. disponibili) f12.2: formato di un output di tipo reale (12 carat. disponibili di cui uno per la virgola e 2 per la parte decimale)