SlideShare a Scribd company logo
Abilità Informatiche
  Ingegneria Chimica

Lezione 3 del 29/02/2012




 Prof. Antonino Stelitano
Docente        Antonino Stelitano

Tutor
Lezioni        Lunedì               14:00 – 17:30     aula 16
                                    Lab. Paolo Ercoli – via Tiburtina 205
               Mercoledì
                                    15:45 – 19:00     aula 5
                                    Viale del C. Laurenziano
Ricevimento:   Per appuntamento antonino.stelitano@uniroma1.it

                                    stelitano.a@libero.it
Sito web:      Sarà attivo al più presto
Linguaggio di programmazione

• E’ usato per rappresentare le azioni di un algoritmo e la loro
  concatenazione
   – È composto da tipi di dato (con cui rappresentare i “dati” del
     programma) e di istruzioni con cui rappresentare le azioni


• Tipi di linguaggio
   – Imperativo: fortran, pascal, C
   – Funzionale: Lisp, ML
   – Ad oggetti: Java, C++, SmallTalk
Programmazione imperativa
• E’ un paradigma di programmazione secondo cui un
  programma viene inteso come un insieme di istruzioni
  (dette anche direttive, comandi)
• Ciascuna istruzione può essere pensata come un
  "ordine" che viene impartito alla macchina virtuale del
  linguaggio di programmazione utilizzato.
• Da un punto di vista sintattico, i costrutti di un
  linguaggio imperativo sono spesso identificati da verbi
  all'imperativo
• per esempio:
   – 1: input i
   – 2: print i
   – 3: goto 1
Programmazione funzionale

• E’ un paradigma di programmazione in cui il flusso di
  esecuzione del programma assume la forma di una
  serie di valutazioni di funzioni matematiche.
• Viene usato maggiormente in ambiti accademici
  piuttosto che industriali.
• Il punto di forza principale di questo paradigma è la
  mancanza di effetti collaterali (side-effect) delle
  funzioni, il che comporta una più facile verifica della
  correttezza e della mancanza di bug del programma e la
  possibilità di una maggiore ottimizzazione dello stesso.
Programmazione ad oggetti

• La programmazione orientata agli oggetti (OOP,
  Object Oriented Programming) è un paradigma di
  programmazione, che prevede di raggruppare in
  un'unica entità (la classe) sia le strutture dati che le
  procedure che operano su di esse, creando per
  l'appunto un "oggetto" software dotato di proprietà
  (dati) e metodi (procedure) che operano sui dati
  dell'oggetto stesso.
• La modularizzazione di un programma viene realizzata
  progettando e realizzando il codice sotto forma di
  classi che interagiscono tra di loro.
Programma

• algoritmo scritto in un linguaggio di programmazione al fine di
  comunicare al calcolatore elettronico le azioni da intraprendere
• è la traduzione dell'algoritmo.
   –Il calcolatore non è in grado di eseguire direttamente il
   programma che noi scriviamo
   –Il calcolatore capisce solo il linguaggio macchina
Esempio
    Linguaggio ad alto livello               Linguaggio macchina
    Sposta il <blocco> in <posizione>        (put <blocco> <posizione>)
    Sposta <blocco1> su <blocco2>            (on <blocco1><blocco2>)



• Input (dati in ingresso): Configurazione iniziale
   – A su P1, B su A, C su B, P2 vuoto, D su P3
• Problema: vogliamo il blocco A sul blocco D
                       C
                       B
                       A                               D
                      P1                P2             P3
Linguaggio ad alto livello      Linguaggio macchina
Esempio
                Sposta il blocco in <posizione> (put <blocco> <posizione>)
                Sposta <blocco1> su <blocco2> (on <blocco1><blocco2>)
      C
      B
      A                           D
      P1          P2               P3

ALGORITMO 1
                                                       PROGRAMMA
1. Libera il blocco A
2. Metti il blocco A sul blocco D                      (put C P2)
                                                       (on B C)
ALGORITMO                                              (on A D)

1.1 Metti il blocco C in P2
1.2 Metti il blocco B sul blocco C
2. Metti il blocco A sul blocco D
Problema                   Algoritmo            Programma

                                   Due fasi




1. Analisi                                              2. Specifica
dei dati                                                della soluzione
• Identificazione dei dati           • Scomposizione del problema in
  (ingresso e uscita)                  sottoproblemi
• Analisi del loro tipo e del        • Identificazione di una soluzione per i
  loro dominio                         sottoproblemi
• Scelta delle modalità di           • Identificazione dei passi risolutivi
  rappresentazione                   • Concatenazione dei passi
Algoritmo: somma dei primi 100 numeri

Problema:                         somma dei primi 100 numeri.
Dati di ingresso:                 i numeri 1 e 100
Uscita:                           la somma dei 100 numeri

• Analisi dei dati
   – Ingresso: generazione dei 100 numeri
         • i: è una variabile che usiamo sia per generare i numeri che per
           contare quante volte abbiamo sommato
         • i è detto contatore
   – Uscita: somma dei primi 100 numeri
         • somma: all’inizio vale 0 (zero), alla fine il risultato finale, ma ad
           ogni iterazione contiene il risultato parziale
Algoritmo: somma dei primi 100 numeri

  Inizializzare somma (somma=0)
  Inizializzare i (i=1)
  Per i che va da 1 a 100
            Aggiungi i a somma e ponila uguale a somma
               (somma=somma+i)
            Incrementa i di 1
               (i=i+1)
  Quando i =100 stampa somma


• La limitazione di questo algoritmo è che funziona solo per i primi cento numeri
• Non è abbastanza generale, ma è
   – non ambiguo
   – termina in tempo finito
   – è eseguibile
Tracciamento
I   SOMMA      Istruzione
?     0       Somma=0
1     0           I=1
1     1     Somma=somma+I
2     1          I=I+1
2     3     Somma=somma+I
3     3          I=I+1
3     6     Somma=somma+I
4     6          I=I+1
4    10     Somma=somma+I
5    10          I=I+1
5    15     Somma=somma+I
6    15          I=I+1
6    21     Somma=somma+I
…                I=I+1
Algoritmo: somma dei numeri da N a M

• Problema: somma dei numeri da N a M

• Dati di ingresso: i numeri N e M
• Uscita: la somma dei numeri da N a M

• Analisi dei dati
   – Ingresso:
       • N,M: lettura dei due numeri
       • i: per contare da N a M

   – Uscita: somma dei numeri
      • somma: all’inizio vale N, alla fine il risultato richiesto, ma ad ogni iterazione
        contiene un valore parziale
Algoritmo: somma dei numeri da N a M

 Leggi il numero di partenza N
 Leggi il numero di arrivo M
 Inizializzare somma (somma=0)
 Inizializzare i (i=N)

  Per i che va da N a M

 Aggiungi i a somma e ponila uguale a somma
        (somma=somma +i)
  Incrementa i di 1
        (i=i+1)
  Quando i=M stampa somma

Abbiamo reso il programma più generale
Ora provaci tu!
Tracciamento con N=3 e M = 6
 N M SOMMA I      Istruzione
Il processo di risoluzione di un programma

•Algoritmo:
   –Analisi dei dati
   –Specifica della soluzione

•Programma:
   –dichiarazione dei dati
   –specifica della sequenza di istruzioni
       • il modo in cui le istruzioni sono organizzate dipende dal
         linguaggio (imperativo, funzionale, ad oggetti)
Dati


• I dati sono la materia prima del trattamento
  dell’informazione
• Si possono elaborare dati di ogni genere
   – numeri, parole, funzioni, grafici, etc.
   – L’importante è trovare la giusta rappresentazione

• Due classi di dati
  – Semplici o primitivi
    • Numeri interi, numeri reali, caratteri
    • Dipendono dal linguaggio
  – Complessi, definiti a partire dai dati primitivi
    • Numeri immaginari, matrici
    • Dipendono dal linguaggio
Dati

• Un dato può essere:
  – costante: rimane immutabile per tutto il
    programma
  – variabile: cambia valore durante l’esecuzione

• Variabili e costanti hanno un nome, ossia un
    • IDENTIFICATORE

   – N, M sono costanti di tipo intero
   – i, somma sono variabili di tipo intero
Istruzioni: tre classi

•Istruzioni di lettura e scrittura (I/O)
  – Prendi un dato dall’esterno (canali di input, lettura)
  – Manda un dato all’esterno (canali di output, scrittura)
•Istruzioni di assegnazione
  – Assegna un valore ad una variabile
        • I valori assegnati possono essere semplici o espressioni di
          qualsiasi livello di complessità
        • Non puoi assegnare un valore ad una costante, già ha un
          valore che non può essere cambiato
•Istruzioni di controllo
  – Determinano il flusso del programma
        • Indicano come le istruzioni sono eseguite
        • C’è ne sono di diversi tipi
Linguaggi: Istruzioni e Dati

•Ogni linguaggio ha sue istruzioni e strutture di dati
  – dipendono dallo scopo per cui è stato progettato il
    linguaggio

•Alcune istruzioni fanno parte del linguaggio base, altre sono
 definite a partire da altre istruzioni
  – Il tipo di astrazione dipende dal linguaggio

•La maggior parte dei linguaggi permette astrazioni funzionali
  – L’utente scrive delle funzioni che possono essere riusate più
     volte all’interno del programma (o anche esportate in altri
     programmi)
       • le “famose” black-box
Pseudo-codice
• Linguaggio artificiale per scrivere algoritmi in modo non ambiguo

Tipi di istruzioni dello pseudo-codice

1. Istruzioni di lettura e scrittura
         • Scambiano dati tra il programma e l’ambiente esterno
2. Istruzione di assegnazione
         • Modifica i valori delle variabili
3. Istruzioni di controllo
     – Istruzione composta
        • Sequenza di istruzioni
    – Istruzione condizionale
        • Ramificazione del controllo del programma secondo il valore di una
          espressione booleana
    – Istruzione di iterazione
        • Esegue ripetutamente una istruzione (anche composta) fino a che una data
          espressione booleana rimane vera

More Related Content

What's hot

Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
Pasquale Paola
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)STELITANO
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: FunzioniMajong DevJfu
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)STELITANO
 
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
Marcello Missiroli
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 

What's hot (7)

Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)Lezione 2 (29 febbraio 2012)
Lezione 2 (29 febbraio 2012)
 
L'algoritmo
L'algoritmoL'algoritmo
L'algoritmo
 
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 

Viewers also liked

Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricercaSTELITANO
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012STELITANO
 
Run for Innovation!
Run for Innovation!Run for Innovation!
Run for Innovation!
Abdulla Al Babul, MBA(HRM)
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012STELITANO
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamentiSTELITANO
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteSTELITANO
 

Viewers also liked (8)

Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012
 
Run for Innovation!
Run for Innovation!Run for Innovation!
Run for Innovation!
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parte
 

Similar to Lezione 3 (29 febbraio 2012)

Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
Marcello Missiroli
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decoding
danielenicassio
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)STELITANO
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Ecdl - Modulo 1 - Concetti di base dell'ICT
Ecdl - Modulo 1 - Concetti di base dell'ICTEcdl - Modulo 1 - Concetti di base dell'ICT
Ecdl - Modulo 1 - Concetti di base dell'ICT
Nino Lopez
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai ProgrammiMajong DevJfu
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
I.S.I.S. "Antonio Serra" - Napoli
 
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corsoAlgoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
Pier Luca Lanzi
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
I.S.I.S. "Antonio Serra" - Napoli
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
Programmazione in C (corso 12BHD Informatica)
Programmazione in C (corso 12BHD Informatica)Programmazione in C (corso 12BHD Informatica)
Programmazione in C (corso 12BHD Informatica)
Fulvio Corno
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
Pietro Di Bello
 
concetti chiave coding.pdf
concetti chiave coding.pdfconcetti chiave coding.pdf
concetti chiave coding.pdf
Laura Antichi
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 

Similar to Lezione 3 (29 febbraio 2012) (20)

Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decoding
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)
 
02 algo programmi
02 algo programmi02 algo programmi
02 algo programmi
 
1 Programmazione
1   Programmazione1   Programmazione
1 Programmazione
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Ecdl - Modulo 1 - Concetti di base dell'ICT
Ecdl - Modulo 1 - Concetti di base dell'ICTEcdl - Modulo 1 - Concetti di base dell'ICT
Ecdl - Modulo 1 - Concetti di base dell'ICT
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corsoAlgoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
Algoritmi e Calcolo Parallelo 2012/2013 - Introduzione al corso
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Programmazione in C (corso 12BHD Informatica)
Programmazione in C (corso 12BHD Informatica)Programmazione in C (corso 12BHD Informatica)
Programmazione in C (corso 12BHD Informatica)
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
 
concetti chiave coding.pdf
concetti chiave coding.pdfconcetti chiave coding.pdf
concetti chiave coding.pdf
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 

More from STELITANO

Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012STELITANO
 
Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisiSTELITANO
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteSTELITANO
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettoriSTELITANO
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatoriSTELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3STELITANO
 

More from STELITANO (20)

Risultati
RisultatiRisultati
Risultati
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012
 
Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisi
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parte
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettori
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3
 

Lezione 3 (29 febbraio 2012)

  • 1. Abilità Informatiche Ingegneria Chimica Lezione 3 del 29/02/2012 Prof. Antonino Stelitano
  • 2. Docente Antonino Stelitano Tutor Lezioni Lunedì 14:00 – 17:30 aula 16 Lab. Paolo Ercoli – via Tiburtina 205 Mercoledì 15:45 – 19:00 aula 5 Viale del C. Laurenziano Ricevimento: Per appuntamento antonino.stelitano@uniroma1.it stelitano.a@libero.it Sito web: Sarà attivo al più presto
  • 3. Linguaggio di programmazione • E’ usato per rappresentare le azioni di un algoritmo e la loro concatenazione – È composto da tipi di dato (con cui rappresentare i “dati” del programma) e di istruzioni con cui rappresentare le azioni • Tipi di linguaggio – Imperativo: fortran, pascal, C – Funzionale: Lisp, ML – Ad oggetti: Java, C++, SmallTalk
  • 4. Programmazione imperativa • E’ un paradigma di programmazione secondo cui un programma viene inteso come un insieme di istruzioni (dette anche direttive, comandi) • Ciascuna istruzione può essere pensata come un "ordine" che viene impartito alla macchina virtuale del linguaggio di programmazione utilizzato. • Da un punto di vista sintattico, i costrutti di un linguaggio imperativo sono spesso identificati da verbi all'imperativo • per esempio: – 1: input i – 2: print i – 3: goto 1
  • 5. Programmazione funzionale • E’ un paradigma di programmazione in cui il flusso di esecuzione del programma assume la forma di una serie di valutazioni di funzioni matematiche. • Viene usato maggiormente in ambiti accademici piuttosto che industriali. • Il punto di forza principale di questo paradigma è la mancanza di effetti collaterali (side-effect) delle funzioni, il che comporta una più facile verifica della correttezza e della mancanza di bug del programma e la possibilità di una maggiore ottimizzazione dello stesso.
  • 6. Programmazione ad oggetti • La programmazione orientata agli oggetti (OOP, Object Oriented Programming) è un paradigma di programmazione, che prevede di raggruppare in un'unica entità (la classe) sia le strutture dati che le procedure che operano su di esse, creando per l'appunto un "oggetto" software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell'oggetto stesso. • La modularizzazione di un programma viene realizzata progettando e realizzando il codice sotto forma di classi che interagiscono tra di loro.
  • 7. Programma • algoritmo scritto in un linguaggio di programmazione al fine di comunicare al calcolatore elettronico le azioni da intraprendere • è la traduzione dell'algoritmo. –Il calcolatore non è in grado di eseguire direttamente il programma che noi scriviamo –Il calcolatore capisce solo il linguaggio macchina
  • 8. Esempio Linguaggio ad alto livello Linguaggio macchina Sposta il <blocco> in <posizione> (put <blocco> <posizione>) Sposta <blocco1> su <blocco2> (on <blocco1><blocco2>) • Input (dati in ingresso): Configurazione iniziale – A su P1, B su A, C su B, P2 vuoto, D su P3 • Problema: vogliamo il blocco A sul blocco D C B A D P1 P2 P3
  • 9. Linguaggio ad alto livello Linguaggio macchina Esempio Sposta il blocco in <posizione> (put <blocco> <posizione>) Sposta <blocco1> su <blocco2> (on <blocco1><blocco2>) C B A D P1 P2 P3 ALGORITMO 1 PROGRAMMA 1. Libera il blocco A 2. Metti il blocco A sul blocco D (put C P2) (on B C) ALGORITMO (on A D) 1.1 Metti il blocco C in P2 1.2 Metti il blocco B sul blocco C 2. Metti il blocco A sul blocco D
  • 10. Problema Algoritmo Programma Due fasi 1. Analisi 2. Specifica dei dati della soluzione • Identificazione dei dati • Scomposizione del problema in (ingresso e uscita) sottoproblemi • Analisi del loro tipo e del • Identificazione di una soluzione per i loro dominio sottoproblemi • Scelta delle modalità di • Identificazione dei passi risolutivi rappresentazione • Concatenazione dei passi
  • 11. Algoritmo: somma dei primi 100 numeri Problema: somma dei primi 100 numeri. Dati di ingresso: i numeri 1 e 100 Uscita: la somma dei 100 numeri • Analisi dei dati – Ingresso: generazione dei 100 numeri • i: è una variabile che usiamo sia per generare i numeri che per contare quante volte abbiamo sommato • i è detto contatore – Uscita: somma dei primi 100 numeri • somma: all’inizio vale 0 (zero), alla fine il risultato finale, ma ad ogni iterazione contiene il risultato parziale
  • 12. Algoritmo: somma dei primi 100 numeri Inizializzare somma (somma=0) Inizializzare i (i=1) Per i che va da 1 a 100 Aggiungi i a somma e ponila uguale a somma (somma=somma+i) Incrementa i di 1 (i=i+1) Quando i =100 stampa somma • La limitazione di questo algoritmo è che funziona solo per i primi cento numeri • Non è abbastanza generale, ma è – non ambiguo – termina in tempo finito – è eseguibile
  • 13. Tracciamento I SOMMA Istruzione ? 0 Somma=0 1 0 I=1 1 1 Somma=somma+I 2 1 I=I+1 2 3 Somma=somma+I 3 3 I=I+1 3 6 Somma=somma+I 4 6 I=I+1 4 10 Somma=somma+I 5 10 I=I+1 5 15 Somma=somma+I 6 15 I=I+1 6 21 Somma=somma+I … I=I+1
  • 14. Algoritmo: somma dei numeri da N a M • Problema: somma dei numeri da N a M • Dati di ingresso: i numeri N e M • Uscita: la somma dei numeri da N a M • Analisi dei dati – Ingresso: • N,M: lettura dei due numeri • i: per contare da N a M – Uscita: somma dei numeri • somma: all’inizio vale N, alla fine il risultato richiesto, ma ad ogni iterazione contiene un valore parziale
  • 15. Algoritmo: somma dei numeri da N a M Leggi il numero di partenza N Leggi il numero di arrivo M Inizializzare somma (somma=0) Inizializzare i (i=N) Per i che va da N a M Aggiungi i a somma e ponila uguale a somma (somma=somma +i) Incrementa i di 1 (i=i+1) Quando i=M stampa somma Abbiamo reso il programma più generale
  • 17. Tracciamento con N=3 e M = 6 N M SOMMA I Istruzione
  • 18. Il processo di risoluzione di un programma •Algoritmo: –Analisi dei dati –Specifica della soluzione •Programma: –dichiarazione dei dati –specifica della sequenza di istruzioni • il modo in cui le istruzioni sono organizzate dipende dal linguaggio (imperativo, funzionale, ad oggetti)
  • 19. Dati • I dati sono la materia prima del trattamento dell’informazione • Si possono elaborare dati di ogni genere – numeri, parole, funzioni, grafici, etc. – L’importante è trovare la giusta rappresentazione • Due classi di dati – Semplici o primitivi • Numeri interi, numeri reali, caratteri • Dipendono dal linguaggio – Complessi, definiti a partire dai dati primitivi • Numeri immaginari, matrici • Dipendono dal linguaggio
  • 20. Dati • Un dato può essere: – costante: rimane immutabile per tutto il programma – variabile: cambia valore durante l’esecuzione • Variabili e costanti hanno un nome, ossia un • IDENTIFICATORE – N, M sono costanti di tipo intero – i, somma sono variabili di tipo intero
  • 21. Istruzioni: tre classi •Istruzioni di lettura e scrittura (I/O) – Prendi un dato dall’esterno (canali di input, lettura) – Manda un dato all’esterno (canali di output, scrittura) •Istruzioni di assegnazione – Assegna un valore ad una variabile • I valori assegnati possono essere semplici o espressioni di qualsiasi livello di complessità • Non puoi assegnare un valore ad una costante, già ha un valore che non può essere cambiato •Istruzioni di controllo – Determinano il flusso del programma • Indicano come le istruzioni sono eseguite • C’è ne sono di diversi tipi
  • 22. Linguaggi: Istruzioni e Dati •Ogni linguaggio ha sue istruzioni e strutture di dati – dipendono dallo scopo per cui è stato progettato il linguaggio •Alcune istruzioni fanno parte del linguaggio base, altre sono definite a partire da altre istruzioni – Il tipo di astrazione dipende dal linguaggio •La maggior parte dei linguaggi permette astrazioni funzionali – L’utente scrive delle funzioni che possono essere riusate più volte all’interno del programma (o anche esportate in altri programmi) • le “famose” black-box
  • 23. Pseudo-codice • Linguaggio artificiale per scrivere algoritmi in modo non ambiguo Tipi di istruzioni dello pseudo-codice 1. Istruzioni di lettura e scrittura • Scambiano dati tra il programma e l’ambiente esterno 2. Istruzione di assegnazione • Modifica i valori delle variabili 3. Istruzioni di controllo – Istruzione composta • Sequenza di istruzioni – Istruzione condizionale • Ramificazione del controllo del programma secondo il valore di una espressione booleana – Istruzione di iterazione • Esegue ripetutamente una istruzione (anche composta) fino a che una data espressione booleana rimane vera