Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica

Pagina creata da Stefania Bosco
 
CONTINUA A LEGGERE
Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica
01/03/17

                 Università degli Studi di Cagliari
                        Facoltà di Scienze
                 Corso di Laurea in Matematica

                            Elementi di Informatica

                              Dott. Paolo Garau
                               A.A. 2016/2017

Paolo Garau                                           1

Presentazione del Corso

    Orario delle Lezioni

                          Martedì: 11:00 – 13:00
                               (Aula Alpha)

                      Mercoledì: 09:00 – 13:00
                    (Lab. T Palazzo delle Scienze)

Paolo Garau                                           2

                                                                1
Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica
01/03/17

Presentazione del Corso

    Organizzazione Generale

        Il corso ha una durata complessiva di 64 ore e vale 8 CFU.

              Teoria
              Lezioni di carattere Teorico

              Pratica
              Lezioni pratiche volte alla programmazione C

Paolo Garau                                                          3

Presentazione del Corso

    Prove in itinere

                 Durante il corso verranno effettuate delle
                                prove di valutazione
                     che influenzeranno il voto finale.

Paolo Garau                                                          4

                                                                               2
Università degli Studi di Cagliari Facoltà di Scienze Corso di Laurea in Matematica
01/03/17

Presentazione del Corso

    Prove di Esame Totali

      Le prove di esame totali saranno almeno 6, si svolgeranno durante
      tutto l’anno accademico e seguiranno il calendario ufficiale indicato
      nel sito del CdL di Matematica.
      Queste consistono in una prova di laboratorio (sviluppo di un
      progetto in C) e di un’interrogazione orale sulla parte teorica.
      Per maggiori dettagli e per le prenotazioni alle prove di esame
      vedere il sito di unica.it nella sezione “servizi agli studenti”.

Paolo Garau                                                               5

Presentazione del Corso

    Frequenza delle Lezioni

      La frequenza alle lezioni è un aspetto fondamentale per
      l’ottimo raggiungimento degli obiettivi del corso.

      Pertanto si consiglia di frequentare tutte le lezioni.

Paolo Garau                                                               6

                                                                                    3
01/03/17

Presentazione del Corso

    E per chi si impegna….

Paolo Garau                                                             7

Presentazione del Corso

    Argomenti di teoria
        Elenco a titolo indicativo
        Ø Algoritmi e linguaggi di programmazione
        Ø Concetto di informazione e la sua codifica
        Ø La codifica dei numeri
        Ø Codifica di Immagini e Suoni
        Ø Codifica dei Video
        Ø L’hardware
        Ø Architetture, Memorie, supporti e periferiche
        Ø Il Sistema Operativo
        Ø Le reti di Calcolatori
        Ø Evoluzione dei sistemi e normativa sul trattamento dei dati
          personali.

Paolo Garau                                                             8

                                                                                  4
01/03/17

Presentazione del Corso

    Argomenti delle lezioni di laboratorio

        Elenco a titolo indicativo
        Ø Fondamenti dell’uso del PC
        Ø Virtualizzazione
        Ø Informazioni di base del Sistema operativo Linux
        Ø Utilizzo del Compilatore
        Ø Linguaggio C
        Ø Costrutti di programmazione
        Ø Array e puntatori
        Ø Liste dinamiche
        Ø Gestione dei file

Paolo Garau                                                              9

Testi di Riferimento

    Slides e Libri di testo

  Le Slides delle lezioni verranno pubblicate regolarmente attraverso il sito
  web del corso di Elementi di Informatica. Queste tratteranno tutti gli
  argomenti d'esame ma non possono essere sostitutive dei testi di
  riferimento.

                        Luca Mari, Giacomo Buonanno, Donatella Sciuto
 Testi Consigliati      Informatica e cultura dell'informazione
                        McGrawn-Hill.

                        N. Balossino
                        Principi di Informatica
                        Lattes.

Paolo Garau                                                              10

                                                                                      5
01/03/17

Forum del corso di Informatica

    Portale del Docente

              Troverete tutte le informazioni relative al corso
                           nel seguente sito web:

                  http://people.unica.it/paologarau

Paolo Garau                                                               11

Presentazione del Corso

    5 consigli per un’ottima riuscita del corso

  1) Seguire tutte le lezioni in particolare quelle in Laboratorio;
  2) Studiare per fare bene tutte le prove in itinere;
  3) Rivedere subito la lezione per individuare e chiarire eventuali punti
       oscuri;
  4) Tenere sotto controllo il sito ed effettuare la registrazione studente;
  5) Se si hanno dubbi durante la lezione chiedere senza esitazione.

Paolo Garau                                                               12

                                                                                     6
01/03/17

Presentazione Corso di Informatica

                            Domande?

Paolo Garau                                             13

                 Università degli Studi di Cagliari
                        Facoltà di Scienze
                 Corso di Laurea in Matematica

                     Corso di Elementi di Informatica

                                Lezione 1
                              1 marzo 2017

                            Dott. Paolo Garau
                             A.A. 2016/2017

Paolo Garau                                             14

                                                                   7
01/03/17

Che cos'è L'informatica

Una prima definizione informale di Informatica
L'informatica è una scienza interdisciplinare che riguarda tutti gli aspetti
del trattamento dell'informazione mediante procedure automatizzabili.
                                                                  (Wikipedia)

Analizziamo la definizione:
Si tratta di una scienza interdisciplinare per molteplici ragioni. Da un lato
perché utilizza delle conoscenze provenienti dalla ricerca di settori
scientifici come ad esempio dalla matematica, dalla fisica o dalla logica.
Dall'altra si applicano i risultati e la conoscenza ottenuta in contesti
totalmente diversi tra loro.

Paolo Garau                                                              15

Che cos'è l'Informatica

Per aspetti del trattamento dell'informazione si intendono le trasformazioni e
le elaborazioni che possiamo fare sull'informazione. Data però la vastità
delle tipologie di informazioni che interessano il mondo umano ci si deve
limitare ai singoli settori in cui è possibile eseguire un trattamento
mediante delle procedure automatizzate.

               NB: Non tutte le informazioni possono essere
               elaborate mediante processi automatizzati!!!

Affinché queste procedure raggiungano il risultato sperato, e quindi si
ottengano delle nuove informazioni, è necessario che si eseguano una serie
di passi predefiniti e non ambigui.

L'insieme di questi passi prende il nome di Algoritmo.
Paolo Garau                                                              16

                                                                                       8
01/03/17

Cos'è L'informatica sulla base gli Algoritmi

Definizione formale di Informatica
L'informatica è lo studio sistematico degli algoritmi che descrivono e
trasformano l'informazione: la loro teoria, analisi, progetto, efficienza ed
applicazione.
                                     (Association for Computing Machinery)

Paolo Garau                                                                17

Che cos'è un Algoritmo

Definiamo cos'è un Algoritmo
Un algoritmo è una sequenza logica di istruzioni elementari (univocamente
interpretabili) che, eseguite in un ordine stabilito, permettono di ottenere la
soluzione di un problema in un numero finito di passi.

Proprietà degli algoritmi:
La sequenza delle istruzioni da eseguire deve essere finita (Finitezza)
Le istruzioni devono poter essere eseguite materialmente (Eseguibilità)
Le istruzioni devono essere non ambigue (Non ambiguità)
L'algoritmo deve portare ad un risultato (Risultato)

Un algoritmo che risolve il problema per cui è stato creato si dice corretto.
Un algoritmo corretto può essere più o meno efficiente.
Paolo Garau                                                                18

                                                                                        9
01/03/17

Facciamo un esempio di Algoritmo

Partiamo da un semplice problema.
Pensare ad un algoritmo che prende in ingresso due numeri interi e ne rende
il maggiore.

Dobbiamo descrivere nel dettaglio ogni singolo passaggio rispettando le
proprietà degli algoritmi. [Finitezza, Eseguibilità, Non ambiguità, Risultato]

Una possibile soluzione:
leggi il primo_valore                 leggi il primo_valore
leggi il secondo_valore               leggi il secondo_valore
se il (primo_valore > secondo_valore) se il (primo_valore > secondo_valore)
       stampa (primo_valore)                 stampa (primo_valore)
        altrimenti                            altrimenti
       stampa (secondo_valore)               stampa (secondo_valore)

Paolo Garau                                                              19

Facciamo un esempio di Algoritmo

Ipotizziamo che il nostro interlocutore non conosca il significato del segno >
e sappia fare solamente delle somme, sottrazioni e distinguere numeri
positivi dai numeri negativi.
In questo caso riscriviamo il nostro algoritmo come:
  leggi primo_valore
  leggi secondo_valore
  se il (primo_valore – secondo_valore) è positivo
         stampa (primo_valore)
          altrimenti
         stampa (secondo_valore)
 leggi il primo_valore
 leggi il secondo_valore
 se il (primo_valore – secondo_valore) è positivo
        stampa (primo_valore)
         altrimenti
        stampa (secondo_valore)
Paolo Garau                                                              20

                                                                                      10
01/03/17

Facciamo un esempio di Algoritmo

Conclusioni
Molto spesso non c'è un solo algoritmo per risolvere uno stesso problema,
ma se ne possono creare di diversi e tutti corretti.

A seconda delle condizioni in cui dovremo lavorare sceglieremo un
algoritmo piuttosto che un altro. (Vedi esempio del > o della sottrazione)

Per quanto riguarda l'efficienza invece i due esempi non sono rappresentativi
in quanto impiegano entrambi lo stesso numero di passaggi per risolvere uno
stesso problema.

Paolo Garau                                                               21

Facciamo un esempio di Algoritmo

              Esiste un sistema per rappresentare gli algoritmi?

                          I diagrammi di flusso

                  Si utilizzano i seguenti blocchi elementari:

    Blocchi di Inizio e Fine
    Vengono utilizzati per               INIZIO
    indicare l’ingresso e
    l’uscita dal diagramma.                                        FINE

Paolo Garau                                                               22

                                                                                     11
01/03/17

Facciamo un esempio di Algoritmo

            Blocco di Input/Output
        Nel caso di “Leggi” l’algoritmo
      legge i valori inseriti dall’utente e           Leggi/Scrivi X
       li conserva in X, oppure nel caso
      di “Scrivi”, stampa il valore di X a
                    schermo.

           Blocco di Elaborazione
      Si effettua l’elaborazione indicata
        (nell’esempio è la somma del                     X=X+1
      valore di X + 1) e il risultato lo si
               memorizza in X.

Paolo Garau                                                               23

Facciamo un esempio di Algoritmo

           Blocco di Controllo
      Se la condizione è realizzata si
        procede nel senso “Vero”                                       Vero
                                                    X == 0
             altrimenti “Falso”.
      In questo caso se x è uguale a
          0 procedi verso “Vero”                        Falso
         altrimenti verso “Falso”.

    Attraverso le 4 tipologie di blocchi (Blocchi di Inizio/Fine, Blocchi di
    Input/Output, Blocchi di Elaborazione e i Blocchi di Controllo) è
    possibile rappresentare qualsiasi algoritmo.

Paolo Garau                                                               24

                                                                                    12
01/03/17

Dall'algoritmo al linguaggio di programmazione

Esempio di Algoritmo
                                                                    INIZIO
inizio
leggi il primo_valore
leggi il secondo_valore                                             Leggi a
se il (primo_valore – secondo_valore) è positivo
        stampa (primo_valore)
          altrimenti                                                Leggi b
        stampa (secondo_valore)
fine
                                                   Falso
                                                                  (a – b) > 0

                                                                        Vero
                                         Stampa b
                                                                      Stampa a

                                                                      FINE

Paolo Garau                                                                            25

Dall'algoritmo al linguaggio di programmazione

        Esercizio                              INIZIO

       Creare un                              Leggi a
     algoritmo che
         dato un                                            Falso                      Vero
    numero intero in                           a >0                          a==0
     ingresso, dica                           Vero                       Falso
     se il numero è
                                               a=a-2
     pari o dispari.

                                          Stampa                           Stampa
         QUESTO                         “Il numero                        “Il numero
       ALGORITMO                         è dispari”                          è pari”
        E’ SEMPRE
       CORRETTO?
                                                           FINE

Paolo Garau                                                                            26

                                                                                                   13
01/03/17

Presentazione del Corso

    Come possiamo comunicare
    l’algoritmo al nostro elaboratore?

Paolo Garau                                                               27

Dall'algoritmo al linguaggio di programmazione

Una volta trovato l'algoritmo più adatto che risolve il nostro problema
sappiamo quali sono i passi da eseguire per raggiungere l’obiettivo richiesto.

Adesso ipotizziamo di voler comunicare il nostro algoritmo risolutivo al
calcolatore in modo tale che sia lui a calcolarci la soluzione. Per fare questo
utilizzeremo un linguaggio di programmazione.

Il linguaggio di programmazione è un linguaggio formale utilizzato
dall'uomo per scrivere programmi per calcolatori.

Di fatto l'elaboratore è in grado di elaborare solo dei segnali elettrici ed in
particolare dei valori binari, ovvero combinazioni di '0' e '1'.

E' quindi necessario trasformare l'algoritmo in una forma comprensibile alla
macchina.
Paolo Garau                                                               28

                                                                                       14
01/03/17

I linguaggi di programmazione

L'elaboratore è in grado di interpretare solamente il linguaggio macchina
ovvero quell'insieme dei comandi direttamente eseguibili dall'elaboratore.

I linguaggi di programmazione invece sono più vicini al linguaggio umano
scritto e permettono di esprimere l'algoritmo in forma non ambigua e
comunque comprensibile per l'uomo.

Una prima distinzione relativa ai linguaggi di programmazione è basata sulla
vicinanza del linguaggio umano così da avere:

        Linguaggi di basso livello (più vicini al linguaggio macchina)
        Linguaggi di alto livello (più vicini al linguaggio umano)

Paolo Garau                                                                    29

Linguaggi di Programmazione di basso livello

I linguaggi di programmazione di basso livello sono poco diffusi ma
vengono comunemente utilizzati dai costruttori di dispositivi elettronici
(embedded devices).
Il linguaggio macchina più conosciuto è quello Assembly mediante il quale è
possibile     controllare   ed   eseguire   ogni   singola   istruzione   di    un
microprocessore.
Il suo utilizzo è possibile solo da parte di chi ha un'ottima conoscenza non
solo del linguaggio ma anche dell'architettura dell'elaboratore.
Inoltre un programma scritto in linguaggio macchina si può usare solo ed
esclusivamente su quella tipologia di macchina e non su altre.

Paolo Garau                                                                    30

                                                                                          15
01/03/17

Linguaggi di Programmazione di Alto livello

I linguaggi di programmazione di alto livello sono invece quelli più diffusi e
comunemente adottati per la realizzazione di software.
Questi hanno la caratteristica di utilizzare un linguaggio molto simile a
quello umano e per questo motivo la maggior parte della programmazione di
software avviene utilizzando questi linguaggi.
Un altro aspetto fondamentale è che questi linguaggi per essere usati non
richiedono una conoscenza approfondita dell'architettura dell'elaboratore su
cui verranno usati ma a seconda delle caratteristiche del linguaggio saranno
più o meno portabili. Con il termine portabilità si intende la capacità di
eseguire lo stesso software su elaboratori aventi caratteristiche differenti.

                          (Vedi approfondimento: http://it.wikipedia.org/wiki/Porting)

Paolo Garau                                                                        31

Alcuni linguaggi di Programmazione

Alcuni dei linguaggi di Programmazione di Alto livello sono:

      Java

      C e C++

      Python

      Visual Basic

      Pascal

      e altri...

Paolo Garau                                                                        32

                                                                                              16
01/03/17

Come funzionano i linguaggi di alto livello

Abbiamo detto che un linguaggio di alto livello utilizza una modalità di
comunicazione più vicina a quella umana.
Questo cosa significa in pratica?
Proviamo a scrivere il nostro “algoritmo del maggiore” in Python.
 Algoritmo di partenza                     Codice Sorgente scritto in un
  Inizio                                   linguaggio di programmazione
  Leggi il primo_valore                    chiamato in Python
  Leggi il secondo_valore                  #!/usr/bin/python
                                           # Filename: if.py
  Se il (primo_valore > secondo_valore)    primo_valore = 3
          stampa (primo_valore)            secondo_valore = 4
  altrimenti                               If primo_valore > secondo_valore:
          stampa (secondo_valore)               print primo_valore
  Fine                                     else:
                                                print secondo_valore

Paolo Garau                                                               33

Come funzionano i linguaggi di alto livello

Sebbene il linguaggio di alto livello sia comprensibile sia all’uomo che alla
macchina, questo non è direttamente eseguibile.
Abbiamo un vincolo da tenere in considerazione, ovvero il calcolatore è in
grado di eseguire solamente le istruzioni macchina.
Partendo da questo vincolo dobbiamo considerare che è necessario tradurre
il codice sorgente scritto nel linguaggio di alto livello (o linguaggio di
programmazione) in un linguaggio di basso livello (o linguaggio macchina).
I programmatori affidano il compito della traduzione dal codice sorgente al
linguaggio macchina direttamente al calcolatore ed in particolare ai
compilatori.

Paolo Garau                                                               34

                                                                                     17
01/03/17

Come funzionano i linguaggi di alto livello

I compilatori sono dei programmi per PC che vengono utilizzati dai
programmatori per:
Ø Verificare la correttezza della sintassi del codice sorgente usato;
Ø Trasformare il codice sorgente (ovvero l’algoritmo scritto nel linguaggio
    di programmazione) in linguaggio macchina.

Una volta che il codice sorgente è stato trasformato in linguaggio macchina
otteniamo il programma pronto per essere utilizzato.
Il programma ottenuto non è altro che un file con estensione .exe che prende
il nome di file eseguibile e può essere aperto senza l’ausilio di nessun’altra
applicazione.
Paolo Garau                                                                 35

Come funzionano i linguaggi di alto livello
E’ quindi opportuno fare una prima distinzione dei file del PC in:
Ø File eseguibili (estensione .exe)
Ø File non eseguibili (altre estensioni)

                        Osservazione sui nomi dei file
    Tutti i file conservati nelle memorie del PC sono costituiti da due parti
                            nome_file . estensione
Dove il nome_file ha lunghezza variabile e l’estensione solo 3 o 4 caratteri.
Attraverso questo sistema tutti i file vengono associati ad un programma che
sia in grado di leggerli, ad eccezione dei file eseguibili che non devono
essere letti da programmi ma solamente eseguiti dal PC in modo autonomo.

Paolo Garau                                                                 36

                                                                                      18
01/03/17

Come funzionano i linguaggi di alto livello

Il processo di traduzione dal codice sorgente al linguaggio macchina può
avvenire in due modalità.
       Possiamo avere linguaggi compilati oppure linguaggi interpretati.

I linguaggi compilati richiedono la generazione del codice eseguibile al
momento della programmazione/realizzazione.

I linguaggi interpretati vengono scritti nel linguaggio di programmazione e
non si genera un codice eseguibile al momento della scrittura del
programma. Il codice sorgente viene interpretato e trasformato in eseguibile
al momento dell’esecuzione del programma.

Paolo Garau                                                                37

Funzionamento dei linguaggi compilati

Funzionamento dei linguaggi compilati.

    Algoritmo scritto nel                                       Questo è
       linguaggio di                Compilatore
                                                               quello che
     programmazione                                           accade con i
                                                               programmi
 Livello di Programmazione                                     scritti in C
                                                                 e C++
 Livello Utente Finale

                              Esecuzione del programma
         Input (Dati in            Programma in               Output (Dati
         Ingresso)                   linguaggio               in Uscita)
                                      macchina

Paolo Garau                                                                38

                                                                                     19
01/03/17

Funzionamento dei linguaggi interpretati

Funzionamento dei linguaggi interpretati

                                Algoritmo scritto nel
                                   linguaggio di
                                 programmazione                  Questo è
 Livello di Programmazione
                                                                quello che
                                                               accade con i
 Livello Utente Finale                                          programmi
                                                               scritti in Java
                                   Esecuzione del
                                    programma

                                    Traduttore /
                                    Compilatore

                                   Programma in
         Input (Dati in              linguaggio                Output (Dati
         Ingresso)                    macchina                 in Uscita)

Paolo Garau                                                                 39

Schema Funzionale di un Calcolatore

Nelle precedenti slide si parlava di come è possibile, partendo da un
problema, fare in modo che un calcolatore ci restituisca la soluzione.
Quindi, se prima si parlava del come realizzare e comunicare algoritmi,
adesso diamo una presentazione di chi deve eseguirli ovvero del calcolatore.
Ogni calcolatore ha la seguente architettura:

                                   Black Box
                                    Unità di
                                 Elaborazione
                                    (CPU)

      Input (Dati in               Memoria                   Output (Dati
      Ingresso)                    Centrale                  in Uscita)

Paolo Garau                                                                 40

                                                                                      20
Puoi anche leggere