Algoritmi, Strutture Dati ed il linguaggio Fortran

Document Sample
Algoritmi, Strutture Dati ed il linguaggio Fortran Powered By Docstoc
					               Algoritmi, Strutture Dati
               ed il linguaggio Fortran

                            insegnamento di Informatica

                           CdL in Scienze Turistiche
                                    a cura di Bruno Bertaccini


Materiale didattico a disposizione degli studenti,
scaricabile all’indirizzo http://www.ds.unifi.it/bertaccini.
È vietata la riproduzione non autorizzata a fini commerciali.
                             La programmabilità
                              degli elaboratori




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
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
Bruno Bertaccini (mail to: brunob@ds.unifi.it)         È vietata la riproduzione non autorizzata a fini commerciali.
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)
Bruno Bertaccini (mail to: brunob@ds.unifi.it)             È vietata la riproduzione non autorizzata a fini commerciali.
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


Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
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




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)    È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori


         Le operazioni elementari

           Operazione Elementare (generalizzata)

                   codice operativo              operando

               indica il tipo di operazione             identifica i dati o i dispositivi
               da compiere                              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.



Bruno Bertaccini (mail to: brunob@ds.unifi.it)         È vietata la riproduzione non autorizzata a fini commerciali.
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.

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
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.




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
                                       Gli ALGORITMI




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 Gli Algoritmi


         Algoritmi: aspetti definitori

          I problemi umani la cui soluzione è demandata ad un
          elaboratore sono notoriamente MOLTO COMPLESSI.
          (es: f ( x)  2 x 2  3x  5 per x = 1.347)
          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?

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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


Bruno Bertaccini (mail to: brunob@ds.unifi.it)               È vietata la riproduzione non autorizzata a fini commerciali.
 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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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.




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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à.

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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).



Bruno Bertaccini (mail to: brunob@ds.unifi.it)         È vietata la riproduzione non autorizzata a fini commerciali.
 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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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.

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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.


Bruno Bertaccini (mail to: brunob@ds.unifi.it)           È vietata la riproduzione non autorizzata a fini commerciali.
 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.

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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
                                                                             n
                  Lettura del valore numerico n e calcolo di  2i
                                                                            i 0
                  Lettura di due valori numerici M e N (con M>=N)
                  e calcolo del M.C.D.
                  Ordinamento di una sequenza di numeri
Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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;
                  …
Bruno Bertaccini (mail to: brunob@ds.unifi.it)     È vietata la riproduzione non autorizzata a fini commerciali.
 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).




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
                                          Strutture dati

                                                 (fondamenti)




Bruno Bertaccini (mail to: brunob@ds.unifi.it)            È vietata la riproduzione non autorizzata a fini commerciali.
 Strutture dati


         Classificazione

            Variabili numeriche
                               Bit
                               Intere
                               Reali (razionali)
                                           precisione singola
                                           precisione doppia
                               Complesse


            Variabili carattere

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                  È vietata la riproduzione non autorizzata a fini commerciali.
 Strutture dati


         Strutture di memorizzazione


            Variabili singole
            Vettori: una sequenza indicizzabile di valori numerici
                     dello stesso tipo
                     es: stringa = vettore di caratteri
            Matrici: una sequenza indicizzabile di vettori dello
                     stesso tipo
            Array: matrici multidimensionali


            Liste: array differenziabili per tipo di valori memorizzabili

Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
                                         I DIAGRAMMI
                                           a BLOCCHI

                                (o Diagrammi di Flusso)



Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)     È vietata la riproduzione non autorizzata a fini commerciali.
 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.




Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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
Bruno Bertaccini (mail to: brunob@ds.unifi.it)                    È vietata la riproduzione non autorizzata a fini commerciali.
 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.


Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 1 : scambio di due valori numerici

                                            START
                                                       semplice scambio
                                                      di 2 valori numerici
                                           INPUT A
                                           INPUT B
                                                      immessi da tastiera
                                                      nelle variabili A e B

                                            AUX = B
                                             B=A
                                            A = AUX




                                           PRINT A
                                           PRINT B




                                             STOP


Bruno Bertaccini (mail to: brunob@ds.unifi.it)        È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 1 : scambio di due valori numerici

                                           START
                                                      semplice scambio
                                                     di 2 valori numerici
                                           INPUT A
                                           INPUT B
                                                     immessi da tastiera
                                                     nelle variabili A e B

                                           Scambia      dove              Scambia
                                           A con B                        A con B




                                           PRINT A
                                           PRINT B                        AUX = B
                                                                           B=A
                                                                          A = AUX




                                            STOP


Bruno Bertaccini (mail to: brunob@ds.unifi.it)       È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 2 : scambio di due valori numerici
                                            START


                                                                scambio di 2 valori
                                           INPUT A
                                           INPUT B
                                                               numerici immessi da
                                                           tastiera nelle variabili A e B
                                                           solo se il primo è maggiore
                                                                   del secondo
                                                      No
                                             A>B


                                                 Sì


                                           Scambia
                                           A con B




                                           PRINT A
                                           PRINT B




                                             STOP

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                  È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 3 : somma dei valori di un vettore
                                            START




                                            INPUT N
                                                                            Somma di una certa
                                                                             sequenza di valori,
                                                                            immessi da tastiera
                                                                          all’interno di un vettore
                                            DIM V[N]




                                          INPUT V[1]
                                              …
                                          INPUT V[N]




                                             J=1
                                             S=0




                                                           No
                                             J <= N             PRINT S            STOP


                                                      Sì


                                          S = S + V[J]

                                            J=J+1

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                               È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 3 : somma dei valori di un vettore


                                  Somma                          Somma degli elementi
                                  vettore
                                                                     di un vettore V
                                  START
                                                                già presente in memoria


                                   J=1
                                   S=0




                                                 No
                                  J <= N              PRINT S         STOP


                                           Sì


                                S = S + V[J]

                                 J=J+1




Bruno Bertaccini (mail to: brunob@ds.unifi.it)                     È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 4 : ricerca del minimo di un vettore
                                           Minimo di
                                           un vettore

                                                                     Ricerca del minimo
                                            START
                                                                       di un vettore V
                                                                  già presente in memoria
                                          min = V[1]
                                         N = length(V)
                                             J=2




                                                          No   PRINT
                                            J <= N                                  STOP
                                                                min


                    J = J +1                         Sì


                                  No
                                           V[J] < min

                                                     Sì


                                           min = V[J]


Bruno Bertaccini (mail to: brunob@ds.unifi.it)                         È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 5 : somma, media, min e max di un vettore

                      START                           A

                                                                Somma, media, min e max
                                                                 di una sequenza di valori,
                                                 media = S/N
                     INPUT N
                                                                     immessi da tastiera
                                                                  all’interno di un vettore
                                                   PRINT
                     DIM V[N]                      media




                    INPUT V[1]                   Minimo di un
                        …                          vettore
                    INPUT V[N]



                      Somma                      Massimo di
                      vettore                    un vettore




                         A                          STOP


Bruno Bertaccini (mail to: brunob@ds.unifi.it)                    È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 6 : calcolo di una serie parziale

                                START
                                                                Lettura del valore numerico
                                                                       n e calcolo di
                                                                                      n

                                                                                   2
                               INPUT N
                                                                                               i

                                                                                    i 0
                                 J=0
                                 S=0




                                                 No
                                J <= N                PRINT S            STOP


                                         Sì


                             S = S + 2^J

                               J=J+1


Bruno Bertaccini (mail to: brunob@ds.unifi.it)                    È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 7 : calcolo del MCD (algoritmo di Euclide)

                                                 START
                                                                        Lettura di due valori
                                                                          numerici M e N
                                                 INPUT N                    (con M>=N)
                                                                        e calcolo del M.C.D.
                                                 INPUT M



                                                           No
                                                                Scambia
                                                  M>N
                                                                M con N

                                            Sì


                                            Q = INT(N/M)

                                            R = N - M*Q




                   N=M              No                     Sì
                                                                  PRINT
                                                  R=0                                        STOP
                                                                ”MCD :”, M
                   M=R

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                        È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 7 : calcolo del MCD (algoritmo inefficiente)

                                                                       Lettura di due valori
                                        START




                                     INPUT N
                                                                         numerici M e N
                                     INPUT M                               (con M>=N)
                                                                       e calcolo del M.C.D.
                                                                       con un algoritmo
                                                    No
                                                         Scambia
                                        M>N
                                                         M con N

                                   Sì                                      inefficiente

                                        J=M




                                   Q = INT(N / J)
                                    R = N - J*Q


            J=J-1

                            No                      Sì
                                                           PRINT
                                        R=0                                  STOP
                                                         ”MCD :”, J

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                        È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 8 : radici di un polinomio di 2° grado

                                                        Ricerca delle due radici
                                                          reali x1 e x2, di una
                                                          equazione del tipo
                                                          ax  bx  c  0
                                                                  2

              se     a, b, c 
                                                             b  
                                                 >0 :     x
                                                                2a
                                                             b
               b  4ac      2
                                                 =0 :     x
                                                             2a
                                                 <0 :    non esistono radici reali

Bruno Bertaccini (mail to: brunob@ds.unifi.it)          È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         es. 8 : radici di un polinomio di 2° grado
                                                         START

                                                                           Ricerca delle due radici
                                                         INPUT
                                                          A,B,C              reali x1 e x2, di una
                                                                             equazione del tipo
                                                          delta =
                                                        B*B-4*A*C                  ax  bx  c  0
                                                                                            2


                                     PRINT         <0               >0
                                                                            rad =
             STOP                 ”non esistono           delta
                                                                          SQRT(delta)
                                   radici reali”
                                                              =0

                                                         rad = 0


                                                                               X1 =
                                                                         (-B + rad)/(2*A)

                                                                               X2 =
                                                                         (-B - rad)/(2*A)



                                                                             PRINT
                                                                             X1, X2




                                                                             STOP
Bruno Bertaccini (mail to: brunob@ds.unifi.it)                            È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         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
Bruno Bertaccini (mail to: brunob@ds.unifi.it)                È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         La traduzione del diagramma
                   a blocchi in pseudolinguaggio
            Condizioni:


                             IF (condizione) THEN
                                                   [blocco istruzioni]
                                            ELSE IF (condizione) THEN
                                                   [blocco istruzioni]
                                            ELSE
                                                   [blocco istruzioni]



Bruno Bertaccini (mail to: brunob@ds.unifi.it)                 È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         La traduzione del diagramma
                   a blocchi in pseudolinguaggio

            Condizioni:                          SWITCH (espressione)
                                                       CASE (condizione1):
                      NON                                     [blocco istruzioni]
                    in tutti i                         CASE (condizione2):
                 linguaggi di
                                                              [blocco istruzioni]
               programmazione
                                                       CASE (condizione3):
                                                              [blocco istruzioni]
                                                       …
                                                       OTHER:
                                                              [blocco istruzioni]



Bruno Bertaccini (mail to: brunob@ds.unifi.it)                  È vietata la riproduzione non autorizzata a fini commerciali.
 I Diagrammi a Blocchi


         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
Bruno Bertaccini (mail to: brunob@ds.unifi.it)             È vietata la riproduzione non autorizzata a fini commerciali.
                                       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.
Bruno Bertaccini (mail to: brunob@ds.unifi.it)   È vietata la riproduzione non autorizzata a fini commerciali.
 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          Scrivere un programma FORTRAN che legga un valore
            C          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)          occorre assegnare un formato con 2 cifre decimali
                       end                     al risultato, in quanto la conversione in euro
                                                           prevede al massimo 2 cifre decimali (i centesimi)



Bruno Bertaccini (mail to: brunob@ds.unifi.it)                       È vietata la riproduzione non autorizzata a fini commerciali.
 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

                          do I=1,15
                            write (*,*) 'inserisci (', I, ' ) numero naturale:'
  ciclo                     read (*,*) N
  per la
                                                                               appena viene individuato un
  sequenza                  if (N .GT. MAX) MAX=N                              numero più grande di MAX, MAX
  dei 15
                          end do                                               viene riassegnato a quel numero
  valori
                        write (*,*) 'massimo valore inserito', MAX
                        stop
                        end
                                                    anche in questo caso le variabili utilizzate rispettano
                                                    i criteri imposti dalla dichiarazione implicita.


Bruno Bertaccini (mail to: brunob@ds.unifi.it)                        È vietata la riproduzione non autorizzata a fini commerciali.
 Il linguaggio FORTRAN

        24 gennaio 2008 – es. 1

            C          Si scriva un programma FORTRAN che legga da tastiera
            C          in sequenza 10 numeri interi e, al termine, stampi a video
            C          la loro somma e il loro valore medio.
                                                 in questo caso invece occorre dichiarare esplicitamente le variabili
                       integer SUM               SUM e MEAN che non rispettano la convenzione implicita: la somma
                       real MEAN                 di interi è una variabile intera, la loro media è una variabile reale

                       SUM=0                     variabile totalizzatore inizializzata a zero
                                                 (zero è l’elemento neutro per la somma)
                         do I=1,10
 ciclo                     write (*,*) 'inserisci (', I, ' ) numero intero:'
 per la                    read (*,*) N
 sequenza
 dei 10                                                            tutti i numeri inseriti vengono di volta
 valori
                           SUM = SUM + N
                                                                   in volta cumulati nel totalizzatore
                         end do
                                                                  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
Bruno Bertaccini (mail to: brunob@ds.unifi.it)                              È vietata la riproduzione non autorizzata a fini commerciali.
 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

Bruno Bertaccini (mail to: brunob@ds.unifi.it)              È vietata la riproduzione non autorizzata a fini commerciali.
 Il linguaggio FORTRAN

        luglio 2007 – es. 1 (continua)

                          MAX=M
                          MIN=N                             dei due valori inseriti, inizialmente si suppone
                          if (MAX .lt. MIN) then            che M sia il più grande e N sia il più piccolo;
                                                            poi si controlla se ciò e vero ed in caso
                              MAX=N                         contrario si inverte l’assegnazione
                              MIN=M
                          endif

                          PROD=1                 variabile moltiplicatore inizializzata a 1
                                                 (uno è l’elemento neutro per il prodotto)
                          do I=MIN,MAX
                              PROD=PROD*I
                          end do
                                                  variabile totalizzatore inizializzata a zero
                          SUM=0
                                                  (zero è l’elemento neutro per la somma)
                          do I=1,(MIN-1)
                              SUM=SUM+I
                          end do

                          write (*,*) SUM, PROD

                          end

Bruno Bertaccini (mail to: brunob@ds.unifi.it)                  È vietata la riproduzione non autorizzata a fini commerciali.
 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.




Bruno Bertaccini (mail to: brunob@ds.unifi.it)                È vietata la riproduzione non autorizzata a fini commerciali.
 Il linguaggio FORTRAN

        luglio 2007 – es. 2 (continua)

                                                 tutte le variabili utilizzate sono reali e non devono essere dichiarate
                                                 perché rispettano le regole della convenzione implicita

                       TOTI=0.0

                       open (5, file=„vendite.dat')
            10         read (5,*,END=40) PI, SC
                                                                       controllo sul valore dello sconto come richiesto
                           if (SC .gt. 70) SC=70
                                                                       dall’esercizio
                           TOTI=TOTI+PI*(100-SC)/100                         gli sconti vengono applicati al prezzo intero
                                                                             ed il risultato viene immediatamente cumulato
                           goto 10
                                                                             nella variabile totale incassato TOTI
            40         write (*,45) 'totale incassato:', TOTI
                       stop
                                                       formato di visualizzazione del totale incassato con 2 cifre
            45         format (f8.2)
                                                       decimali: 8 caratteri totali disponibili per l’output di cui
                                                       uno riservato alla virgola e 2 ai decimali, per cui solo
                       end                             cinque sono riservati alla parte intera



Bruno Bertaccini (mail to: brunob@ds.unifi.it)                              È vietata la riproduzione non autorizzata a fini commerciali.
 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.




Bruno Bertaccini (mail to: brunob@ds.unifi.it)                      È vietata la riproduzione non autorizzata a fini commerciali.
 Il linguaggio FORTRAN

        10 luglio 2008 – es. 2 (continua)
                       integer TOTPR, TOTI                       queste variabili devono essere dichiarate perché non
                       real MEDIAPR                              rispettano i criteri della convenzione implicita

                       TOTPR=0
                                                                 i totalizzatori devono sempre essere azzerati
                       TOTI=0

                       open (5, file=“archivio.dat”)                                al file (device o dispositivo) contenente le
            10         read (5,*,END=35) NUMP, NUMI                                 informazioni viene assegnato l’etichetta 5


                           TOTI = TOTI + NUMI
                           TOTPR = TOTPR + NUMP*NUMI
                                                 si continua a leggere dal file finché non se ne raggiunge la fine
                       goto 10
                                                 (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


Bruno Bertaccini (mail to: brunob@ds.unifi.it)                                 È vietata la riproduzione non autorizzata a fini commerciali.
 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).



Bruno Bertaccini (mail to: brunob@ds.unifi.it)                 È vietata la riproduzione non autorizzata a fini commerciali.
 Il linguaggio FORTRAN

        24 gennaio 2008 – es. 2 (continua)
                    integer*4 S, TOTS, TOTSE                   queste variabili devono essere dichiarate perché non
                    real I, MEDIASE
                                                               rispettano i criteri della convenzione implicita; alle
                    TOTS=0                                     variabili scontrino (S) e totali scontrino (TOTS e
                    TOTI=0.0                                   TOTSE) viene riservato una zona di memoria di 4 byte
                    TOTSE=0
                    TOTIE=0.0

                    open (7, file=„supermarket.dat')
           15       read (7,*,END=65) A, M, S, I

                       TOTS = TOTS + S
   totale              TOTI = TOTI + I
   incasso e           if (M .gt. 5 .and. M .lt. 9) then
   totale                  TOTSE = TOTSE + S
   scontrini               TOTIE = TOTIE + I
   per i mesi          endif
                                    si continua a leggere dal file finché non se ne raggiunge la fine
   estivi              goto 15
                                         (eof = end of file); quando ciò avviene, l’esecuzione riprende dalla riga 65
           65       MEDIASE = 1.0*TOTIE/TOTSE                       come esercizio precedente

                    write (*,70) 'totale scontrini:', TOTS
                    write (*,72) 'totale incasso:', TOTI
                    write (*,72) 'scontrino medio mesi estivi:', MEDIASE
                    stop                     a28: formato di un output di tipo carattere (28 carat. disponibili)
           70       format (a28,i9)
                                             i9: formato di un output di tipo intero (9 carat. disponibili)
           72       format (a28,f12.2)
                                             f12.2: formato di un output di tipo reale (12 carat. disponibili di cui uno
                    end
                                                               per la virgola e 2 per la parte decimale)
Bruno Bertaccini (mail to: brunob@ds.unifi.it)                                  È vietata la riproduzione non autorizzata a fini commerciali.