SlideShare a Scribd company logo
1 of 27
Download to read offline
Fondamenti di Informatica
   Ingegneria Chimica
Lezione 5 del 07/03/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:      http://w3.uniroma1.it/IngChim/Ainf
Problema: Stampare il messaggio “Salve mondo!”

 #include <stdio.h>

 /* Un primo programma in C */

 int main(void)
 {
      printf(“Salve mondo! n”);
 }
Problema: Quadrato di un intero


    #include <stdio.h>
    /* Prodotto di due interi */

     int square (int num )
     {
          int prodotto;
          prodotto=num*num;
          return prodotto;
     }
Le funzioni
• main e square sono nomi di funzioni

Un programma C è formato da funzioni

• Una funzione è formata da un blocco di
  istruzioni, strutturate in base ad una precisa
  sintassi
• Una funzione può:
   – produrre un risultato a fronte di elaborazioni sui dati
     di ingresso
   – seguire delle operazioni che non producono output
• Ogni programma eseguibile deve contenere la funzione
  speciale main

   – indica il punto da cui inizia l’esecuzione del programma
   – La funzione main determina il flusso del programma,
     ossia l’ordine di esecuzione di istruzioni e funzioni
Struttura di una funzione C

     int                   square                     (int num )
    Tipo di           Nome
   funzione          funzione
                                              (      Argomenti              )


                                    Dichiarazione
           int prodotto;            di argomento
                                                    int square (int num )
                                          {         {
                                                      int prodotto;
                                    Dichiarazioni
                                                      prodotto=num*num;
prodotto=num*num;                                     return prodotto;
return prodotto;                     Istruzioni C   }

                                          }
printf(“Salve, mondo!n”);


 Istruzione
 Notare che termina con ;
 printf è la funzione di stampa
   Proviene da una libreria del C, detta stdio.h
 visualizza sullo schermo la stringa di caratteri tra virgolette
   Le virgolette non sono stampate, servono solo per delimitare
      la stringa

 n :carattere di escape (codici di controllo),
   indica un ritorno a capo (newline)
Altri caratteri di escape

  n newline
  t tabulazione
  r posiziona il cursore all’inizio riga
     corrente
  a emissione suono
   visualizzazione del carattere 
  ’ visualizzazione apice
  ” visualizzazione virgolette
#   include <stdio.h>
•    direttiva C, sempre preceduta dal simbolo #
•    in C ci sono altre direttive, che sono “istruzioni” al di fuori dal linguaggio
•    sono comandi per il pre-processore:
       – le righe che iniziano con # sono elaborate dal pre-processore prima che il
           programma sia compilato
•    questa direttiva include un file di libreria
#   include
•    fa usare al compilatore un file diverso da quello sorgente che sta compilando
•    consente di inserire i contenuti di altri file
•    i file sono “inclusi” prima della compilazione
•    i file da includere possono essere libreria di sistema oppure file scritti da noi
•    sono infatti presenti due formati
       – #include <nomefile> : il pre-processore cerca il file in una directory
           speciale (definita dal sistema operativo)
       – #include “nomefile” : il pre-processore cerca il file nella directory dove è il
           file sorgente: si può quindi specificare un path. Se non viene trovato, cerca
           nella directory speciale
Libreria di run-time
•   Tipicamente i file inclusi sono file di libreria
•   I file di libreria contengono funzioni che svolgono operazioni fondamentali
•   Queste funzionalità sono ottimizzate rispetto alle istruzioni del linguaggio
•   I file da includere sono file oggetto, ossia già compilati
•   Contengono classi di funzioni relative a uno o più servizi
     – I/O (Input/Output)
     – gestione della memoria
     – operazioni matematiche
     – manipolazione di stringhe
•   Per ogni classe di funzioni esiste un file sorgente, detto file header
•   I file header hanno l’estensione .h (come stdio.h)
     – Contengono le informazioni su come utilizzare le funzioni

<stdio.h>
•   è un file di intestazione (estensione .h) per la gestione standard
    dell’input/ouyput
•   printf è una funzione appartenente a questa libreria
Come è fatto un programma C



• Un programma C è costituito da una o più funzioni, ciascuna
  dedicata alla risoluzione di una parte del problema complessivo
• Una funzione viene progettata a partire dalla decomposizione del
  problema iniziale in sottoproblemi (progettazione top-down)
• Un programma C contiene sempre la funzione main
   – L’esecuzione parte sempre da questa funzione
   – main determina il flusso del programma
   – può essere anche la sola funzione del programma
• Tutte le funzioni in un programma C, compresa la funzione
  main, seguono la stessa sintassi (stesse regole di formazione)
Come è fatto un programma C (2)



• Una funzione C è un blocco d’istruzioni nel linguaggio C
  – Svolge un’operazione complessa (rispetto alle istruzioni
    semplici) che può essere attivata tramite il nome della
    funzione
• La funzione main non può essere chiamata
Problema: Stampare il quadrato di 789

#include <stdio.h>
/* Programma che calcola il quadrato di 789 */
int main(void)
{
    int q;
    int c=789;
    q= quadrato(c);
    printf(“Il quadrato di %d e’ pari a %d n”, c, q);
    return 0;
}

/* Funzione per il quadrato di un intero */
int quadrato (int num )
{
     int prodotto;
     prodotto=num*num;
     return prodotto;
}
Analisi funzione square

tipo funzione      (intero)
                                                    nome argomento
                  nome funzione
                         tipo argomento


int quadrato (int num )
     {                                                                  corpo funzione
            int prodotto;
            prodotto=num*num;
            return prodotto;
     }

prodotto=num*num;

•   istruzione di assegnazione
•   espressione nella parte destra
•   variabile nella parte sinistra

return prodotto;
•    restituisce il valore assegnato a prodotto
•    ritorna il controllo alla funzione che ha effettuato la chiamata
Programma: sommare due numeri letti da tastiera
/* Programma di addizione */
#include <stdio.h>
int main (void)
{
    int num1, num2, somma;        /*dichiarazioni*/

    printf(“Primo interon”);     /* prompt */
    scanf(“%d”, &num1);           /* lettura intero*/
    printf(“Secondo interon”);   /* prompt */
    scanf(“%d”, &num2);           /* lettura intero*/
    somma=num1+num2;
                              /* somma e assegnamento*/
    printf(“Somma: %dn”, somma);
                                       /* stampa somma*/

    return 0;
           /* programma terminato con successo*/
}

•   notare indentazione e spazi
int num1, num2, somma;

•   dichiarazioni variabili
      – Variabile: locazione di memoria per memorizzare valori
•   le variabili vanno sempre dichiarate con
      – nome
      – tipo di dato
•   nome di variabile deve essere un identificatore valido per il linguaggio
      – identificatore: sequenza di caratteri (lettere, numeri e segno di
          underscore_) che non deve iniziare con un numero
      – può avere lunghezza qualsiasi (max di 31 caratteri per lo standard ANSI)
•   il C è case-sensitive (A diverso da a)
      – Somma, somma, SommA, SOMMA, etc.
•   le dichiarazioni vanno dopo la parentesi graffa e prima di qualsiasi istruzione
    eseguibile
printf(“Primo interon”);
printf(“Secondo interon”);
printf(“Somma: %dn”, somma);

•   funzione di stdio
•   manda i dati dallo standard output (video)
      – Lo standard output è il device standard su cui viene inviata l’uscita
•   “%d”, stringa di controllo del formato: tipo di dato da stampare (%d indica un
    intero)
•   La stringa tra virgolette è l’oggetto da stampare
      – Al suo interno possono essere presenti caratteri di controllo, come la stringa
         di controllo %d o caratteri speciali che servono per formattare l’output
      – Consiste di due parti
           • La prima parte indica la forma dell’input e il tipo degli elementi
                – “Somma: %dn”
           • La seconda contiene le variabili
                – somma
scanf(“%d”, &num1);
scanf(“%d”, &num2);


•   funzione di stdio
•   prende i dati dallo standard input (tastiera)
      – Lo standard input è il device standard da cui viene prelevato l’ingresso
•   “%d”, stringa di controllo del formato: tipo di dato da immettere (%d indica un
    intero)
•   &num1, &num2: la variabile da leggere deve essere preceduta dal carattere &
    (ampersand).
•   &num1, &num2: indica la locazione di memoria dove memorizzare la variabile
    (num1 e num2)
•   Due parti
      – La prima parte indica la forma dell’input e il tipo degli elementi
          • “%d”
      – La seconda le variabili
          • &num1
      NOTA: nella scanf le variabili sono sempre precedute da &
Tipi di dati
• Tipo di dato è definito da
         • Insieme dei valori che può assumere
         • Operazioni ammissibili
Più formalmente
Un tipo di dato T è definito da:
• Un dominio di valori D
• Funzioni f1, …, fn e predicati p1, …, pm (detti globalmente operatori)
• Alcune costanti c1, …, ck
• Le funzioni agiscono su uno o più valori del dominio D per produrre
    un valore (eventualmente non appartenente a D), mentre i predicati
    agiscono su uno o più valori del dominio D per produrre un valore
    booleano (vero o falso)

•   L’associazione tipo-dato limita gli errori perché protegge il programmatore
    da associazioni illogiche tra dati e operatori (non presente a livello macchina)
Tipi di dati scalari
• Due classi di tipi
    – tipi scalari (è definito un ordinamento)
    – tipi aggregati (si ottengono dagli scalari)
                              tipi di dati


   void                       tipi scalari                     tipi aggregati


puntatori                   tipi aritmetici                       enum


                interi                        floating-point


                8 tipi                          2 tipi
                                       (3 nello standard ANSI)
tipi aritmetici


           interi                                                    floating-point



          char                                                                float
           int                     signed                                    double
        short int                 unsigned                                long double
        long int

Parole chiave                                            Qualificatori
    char                                                    short
     int                                                    long
    float                                                  signed
   double                                                 unsigned
   enum
•   Ricordate che questi dati vengono rappresentate in celle di memoria
Rappresentazione in memoria

•   I nomi di variabile (qualunque sia il loro tipo) fanno riferimento a locazioni (posizioni)
    di memoria
•   Una variabile è caratterizzata da
      – Nome
      – Tipo
      – Valore
•   Una variabile corrisponde ad una cella di memoria indirizzata simbolicamente dal suo
    identificatore
•   La cella contiene il valore della variabile
•   La modalità di rappresentazione del valore corrisponde al suo tipo
                     a       7                           a= a+b;             a       15
int a=7, b=8;


                    b        8                                               b        8
Tipi interi (2)
int
•   è il tipo intero di base
•   la sua dimensione dipende dal calcolatore (1, 2, 3, 4 byte), lo standard ANSI
    richiede che sia almeno 16 bit (2 byte)
short int (o semplicemente short)
• memorizzazione degli interi generalmente con 2 byte

long int (o semplicemente long)
•   memorizzazione degli interi generalmente con 4 byte

•   Ad un diverso numero di bit allocati corrisponde un diverso intervallo di valori
    memorizzabili:
     – 4 byte da -231 a 231-1
     – 2 byte da -215 a 215-1
     – Un bit è utilizzato per il segno
Tipi interi (2)

Interi senza segno: specificatore unsigned
• si può specificare un tipo intero con solo valori non negativi
• viene raddoppiato l’intervallo di valori dato che il bit più significativo
   non rappresenta il segno
    – 4 byte da 0 a 232-1
• se non specificato, l’intero è con segno (signed)
Tipi interi (3)
 char
 • i caratteri fanno parte del tipo intero
 • sono memorizzati come codici numerici secondo codifiche definite
      – ASCII (American Standard Code for Information Interchange)
      – EBCDIC (usato IBM)
 • in genere sono usati 8 bit (da 0 a 28 -1 unsigned, da -27 a 27 -1 signed)
      – il default dipende dal compilatore, in genere è signed
 • char c;
      – c=‘A’;
      – c=65;
           • in entrambi i casi a c corrisponde il valore 65
 • char a, b;
      – a=5;          (assegnato il valore 5)
      – a=‘5’;        (assegnato il valore 53, codice
                      ASCII del carattere “5”)
 • int j;
           • j=‘A’ + ‘B’;                         66
131                        65
Tavola ASCII
http://www.asciitable.com/

More Related Content

What's hot

15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: AlgoritmiMajong DevJfu
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamicaguest60e9511
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2Majong DevJfu
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 
07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioniMajong DevJfu
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusionePiero Fraternali
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e FileMajong DevJfu
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I Oguest60e9511
 

What's hot (20)

15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Python base lezione 4
Python base lezione 4Python base lezione 4
Python base lezione 4
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
La Grafica Con Java
La Grafica Con JavaLa Grafica Con Java
La Grafica Con Java
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 

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
 
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
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012STELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamentiSTELITANO
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012STELITANO
 
Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)STELITANO
 

Viewers also liked (7)

Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
 
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
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
 
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 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)
 

Similar to Lezione 5 (7 marzo 2012)

Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!MarioTraetta
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Majong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in CBoymix81
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)STELITANO
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++Majong DevJfu
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliMajong DevJfu
 
2 Linux Comandi Essenziali
2 Linux Comandi Essenziali2 Linux Comandi Essenziali
2 Linux Comandi EssenzialiMauro Ferrigno
 

Similar to Lezione 5 (7 marzo 2012) (20)

Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
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++
 
La scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptxLa scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptx
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in C
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
Scomposizione di programmi e approccio in visual basic
Scomposizione di programmi e approccio in visual basicScomposizione di programmi e approccio in visual basic
Scomposizione di programmi e approccio in visual basic
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabili
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Corso c++
Corso c++Corso c++
Corso c++
 
2 Linux Comandi Essenziali
2 Linux Comandi Essenziali2 Linux Comandi Essenziali
2 Linux Comandi Essenziali
 

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 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 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
 
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 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 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
 
Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2STELITANO
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)STELITANO
 

More from STELITANO (19)

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 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 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
 
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 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 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 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 

Lezione 5 (7 marzo 2012)

  • 1. Fondamenti di Informatica Ingegneria Chimica Lezione 5 del 07/03/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: http://w3.uniroma1.it/IngChim/Ainf
  • 3. Problema: Stampare il messaggio “Salve mondo!” #include <stdio.h> /* Un primo programma in C */ int main(void) { printf(“Salve mondo! n”); }
  • 4. Problema: Quadrato di un intero #include <stdio.h> /* Prodotto di due interi */ int square (int num ) { int prodotto; prodotto=num*num; return prodotto; }
  • 5. Le funzioni • main e square sono nomi di funzioni Un programma C è formato da funzioni • Una funzione è formata da un blocco di istruzioni, strutturate in base ad una precisa sintassi • Una funzione può: – produrre un risultato a fronte di elaborazioni sui dati di ingresso – seguire delle operazioni che non producono output
  • 6. • Ogni programma eseguibile deve contenere la funzione speciale main – indica il punto da cui inizia l’esecuzione del programma – La funzione main determina il flusso del programma, ossia l’ordine di esecuzione di istruzioni e funzioni
  • 7. Struttura di una funzione C int square (int num ) Tipo di Nome funzione funzione ( Argomenti ) Dichiarazione int prodotto; di argomento int square (int num ) { { int prodotto; Dichiarazioni prodotto=num*num; prodotto=num*num; return prodotto; return prodotto; Istruzioni C } }
  • 8. printf(“Salve, mondo!n”);  Istruzione  Notare che termina con ;  printf è la funzione di stampa Proviene da una libreria del C, detta stdio.h  visualizza sullo schermo la stringa di caratteri tra virgolette Le virgolette non sono stampate, servono solo per delimitare la stringa  n :carattere di escape (codici di controllo), indica un ritorno a capo (newline)
  • 9. Altri caratteri di escape n newline t tabulazione r posiziona il cursore all’inizio riga corrente a emissione suono visualizzazione del carattere ’ visualizzazione apice ” visualizzazione virgolette
  • 10. # include <stdio.h> • direttiva C, sempre preceduta dal simbolo # • in C ci sono altre direttive, che sono “istruzioni” al di fuori dal linguaggio • sono comandi per il pre-processore: – le righe che iniziano con # sono elaborate dal pre-processore prima che il programma sia compilato • questa direttiva include un file di libreria # include • fa usare al compilatore un file diverso da quello sorgente che sta compilando • consente di inserire i contenuti di altri file • i file sono “inclusi” prima della compilazione • i file da includere possono essere libreria di sistema oppure file scritti da noi • sono infatti presenti due formati – #include <nomefile> : il pre-processore cerca il file in una directory speciale (definita dal sistema operativo) – #include “nomefile” : il pre-processore cerca il file nella directory dove è il file sorgente: si può quindi specificare un path. Se non viene trovato, cerca nella directory speciale
  • 11. Libreria di run-time • Tipicamente i file inclusi sono file di libreria • I file di libreria contengono funzioni che svolgono operazioni fondamentali • Queste funzionalità sono ottimizzate rispetto alle istruzioni del linguaggio • I file da includere sono file oggetto, ossia già compilati • Contengono classi di funzioni relative a uno o più servizi – I/O (Input/Output) – gestione della memoria – operazioni matematiche – manipolazione di stringhe • Per ogni classe di funzioni esiste un file sorgente, detto file header • I file header hanno l’estensione .h (come stdio.h) – Contengono le informazioni su come utilizzare le funzioni <stdio.h> • è un file di intestazione (estensione .h) per la gestione standard dell’input/ouyput • printf è una funzione appartenente a questa libreria
  • 12. Come è fatto un programma C • Un programma C è costituito da una o più funzioni, ciascuna dedicata alla risoluzione di una parte del problema complessivo • Una funzione viene progettata a partire dalla decomposizione del problema iniziale in sottoproblemi (progettazione top-down) • Un programma C contiene sempre la funzione main – L’esecuzione parte sempre da questa funzione – main determina il flusso del programma – può essere anche la sola funzione del programma • Tutte le funzioni in un programma C, compresa la funzione main, seguono la stessa sintassi (stesse regole di formazione)
  • 13. Come è fatto un programma C (2) • Una funzione C è un blocco d’istruzioni nel linguaggio C – Svolge un’operazione complessa (rispetto alle istruzioni semplici) che può essere attivata tramite il nome della funzione • La funzione main non può essere chiamata
  • 14. Problema: Stampare il quadrato di 789 #include <stdio.h> /* Programma che calcola il quadrato di 789 */ int main(void) { int q; int c=789; q= quadrato(c); printf(“Il quadrato di %d e’ pari a %d n”, c, q); return 0; } /* Funzione per il quadrato di un intero */ int quadrato (int num ) { int prodotto; prodotto=num*num; return prodotto; }
  • 15. Analisi funzione square tipo funzione (intero) nome argomento nome funzione tipo argomento int quadrato (int num ) { corpo funzione int prodotto; prodotto=num*num; return prodotto; } prodotto=num*num; • istruzione di assegnazione • espressione nella parte destra • variabile nella parte sinistra return prodotto; • restituisce il valore assegnato a prodotto • ritorna il controllo alla funzione che ha effettuato la chiamata
  • 16. Programma: sommare due numeri letti da tastiera /* Programma di addizione */ #include <stdio.h> int main (void) { int num1, num2, somma; /*dichiarazioni*/ printf(“Primo interon”); /* prompt */ scanf(“%d”, &num1); /* lettura intero*/ printf(“Secondo interon”); /* prompt */ scanf(“%d”, &num2); /* lettura intero*/ somma=num1+num2; /* somma e assegnamento*/ printf(“Somma: %dn”, somma); /* stampa somma*/ return 0; /* programma terminato con successo*/ } • notare indentazione e spazi
  • 17. int num1, num2, somma; • dichiarazioni variabili – Variabile: locazione di memoria per memorizzare valori • le variabili vanno sempre dichiarate con – nome – tipo di dato • nome di variabile deve essere un identificatore valido per il linguaggio – identificatore: sequenza di caratteri (lettere, numeri e segno di underscore_) che non deve iniziare con un numero – può avere lunghezza qualsiasi (max di 31 caratteri per lo standard ANSI) • il C è case-sensitive (A diverso da a) – Somma, somma, SommA, SOMMA, etc. • le dichiarazioni vanno dopo la parentesi graffa e prima di qualsiasi istruzione eseguibile
  • 18. printf(“Primo interon”); printf(“Secondo interon”); printf(“Somma: %dn”, somma); • funzione di stdio • manda i dati dallo standard output (video) – Lo standard output è il device standard su cui viene inviata l’uscita • “%d”, stringa di controllo del formato: tipo di dato da stampare (%d indica un intero) • La stringa tra virgolette è l’oggetto da stampare – Al suo interno possono essere presenti caratteri di controllo, come la stringa di controllo %d o caratteri speciali che servono per formattare l’output – Consiste di due parti • La prima parte indica la forma dell’input e il tipo degli elementi – “Somma: %dn” • La seconda contiene le variabili – somma
  • 19. scanf(“%d”, &num1); scanf(“%d”, &num2); • funzione di stdio • prende i dati dallo standard input (tastiera) – Lo standard input è il device standard da cui viene prelevato l’ingresso • “%d”, stringa di controllo del formato: tipo di dato da immettere (%d indica un intero) • &num1, &num2: la variabile da leggere deve essere preceduta dal carattere & (ampersand). • &num1, &num2: indica la locazione di memoria dove memorizzare la variabile (num1 e num2) • Due parti – La prima parte indica la forma dell’input e il tipo degli elementi • “%d” – La seconda le variabili • &num1 NOTA: nella scanf le variabili sono sempre precedute da &
  • 20. Tipi di dati • Tipo di dato è definito da • Insieme dei valori che può assumere • Operazioni ammissibili Più formalmente Un tipo di dato T è definito da: • Un dominio di valori D • Funzioni f1, …, fn e predicati p1, …, pm (detti globalmente operatori) • Alcune costanti c1, …, ck • Le funzioni agiscono su uno o più valori del dominio D per produrre un valore (eventualmente non appartenente a D), mentre i predicati agiscono su uno o più valori del dominio D per produrre un valore booleano (vero o falso) • L’associazione tipo-dato limita gli errori perché protegge il programmatore da associazioni illogiche tra dati e operatori (non presente a livello macchina)
  • 21. Tipi di dati scalari • Due classi di tipi – tipi scalari (è definito un ordinamento) – tipi aggregati (si ottengono dagli scalari) tipi di dati void tipi scalari tipi aggregati puntatori tipi aritmetici enum interi floating-point 8 tipi 2 tipi (3 nello standard ANSI)
  • 22. tipi aritmetici interi floating-point char float int signed double short int unsigned long double long int Parole chiave Qualificatori char short int long float signed double unsigned enum • Ricordate che questi dati vengono rappresentate in celle di memoria
  • 23. Rappresentazione in memoria • I nomi di variabile (qualunque sia il loro tipo) fanno riferimento a locazioni (posizioni) di memoria • Una variabile è caratterizzata da – Nome – Tipo – Valore • Una variabile corrisponde ad una cella di memoria indirizzata simbolicamente dal suo identificatore • La cella contiene il valore della variabile • La modalità di rappresentazione del valore corrisponde al suo tipo a 7 a= a+b; a 15 int a=7, b=8; b 8 b 8
  • 24. Tipi interi (2) int • è il tipo intero di base • la sua dimensione dipende dal calcolatore (1, 2, 3, 4 byte), lo standard ANSI richiede che sia almeno 16 bit (2 byte) short int (o semplicemente short) • memorizzazione degli interi generalmente con 2 byte long int (o semplicemente long) • memorizzazione degli interi generalmente con 4 byte • Ad un diverso numero di bit allocati corrisponde un diverso intervallo di valori memorizzabili: – 4 byte da -231 a 231-1 – 2 byte da -215 a 215-1 – Un bit è utilizzato per il segno
  • 25. Tipi interi (2) Interi senza segno: specificatore unsigned • si può specificare un tipo intero con solo valori non negativi • viene raddoppiato l’intervallo di valori dato che il bit più significativo non rappresenta il segno – 4 byte da 0 a 232-1 • se non specificato, l’intero è con segno (signed)
  • 26. Tipi interi (3) char • i caratteri fanno parte del tipo intero • sono memorizzati come codici numerici secondo codifiche definite – ASCII (American Standard Code for Information Interchange) – EBCDIC (usato IBM) • in genere sono usati 8 bit (da 0 a 28 -1 unsigned, da -27 a 27 -1 signed) – il default dipende dal compilatore, in genere è signed • char c; – c=‘A’; – c=65; • in entrambi i casi a c corrisponde il valore 65 • char a, b; – a=5; (assegnato il valore 5) – a=‘5’; (assegnato il valore 53, codice ASCII del carattere “5”) • int j; • j=‘A’ + ‘B’; 66 131 65