SlideShare a Scribd company logo
1 of 33
Download to read offline
Abilità Informatiche
   Ingegneria Chimica
Lezione 13 del 28/03/2012




 Prof. Antonino Stelitano
Docente        Antonino Stelitano




Tutor




Lezioni        Lunedì               14:00 – 17:30     aula 16



               Mercoledì            15:45 – 19:00     aula 15




                                    Lab. Paolo Ercoli – via Tiburtina 205




Ricevimento:   Per appuntamento     antonino.stelitano@uniroma1.it

                                    stelitano.a@libero.it




Sito web:      http://w3.uniroma1.it/IngChim/Ainf
Esercizio


° Leggere da tastiera una sequenza di interi e
  calcola la lunghezza della sequenza.
  L’immissione è terminata con uno 0 (che non
  deve essere conteggiato).



Algoritmo
° Inizializza la lughezza della stringa a -1
   ° Leggi il numero
   ° Incrementa di uno la lunghezza
° Mentre il numero letto è diverso da zero,
  torna ad eseguire dalla lettura del numero
° Stampa la lunghezza




                                                 3
/* Legge da tastiera una sequenza di interi, terminata
   da 0. Calcola la lunghezza della sequenza (senza lo
   0) e la stampa.*/


#include <stdio.h>

int main(void)
{
    int lunghezza;
    int dato;
    printf("Inserisci una sequenza di interi,
                              terminata da 0n");
    lunghezza = -1;
          /* all'inizio la lunghezza e' nulla */
    do {
          scanf("%d", &dato);
          lunghezza = lunghezza + 1;
          } while (dato != 0);
    printf("La sequenza (senza lo 0 finale) e'
                    lunga %dn", lunghezza);
    return 0;
}


                                       seq_int.c
                                                         4
Esercizio
° Contare il numero di spazi in una frase
  immessa da tastiera (fino all‟immissione di un
  ritorno a capo)

Algoritmo
- Inserire una frase
- Inizializza un contatore
   - Leggere i caratteri uno per uno (usa
      getchar( ))
   - Se il carattere è uguale allo spazio,
      incrementa il contatore
   - Fai questo fino a che il carattere non è
      uguale al carattere di ritorno a capo




                                                   5
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
  int ch, num_spazi = 0;

 printf( "Inserisci una frase:n" );
 do
 {
   ch = getchar();
   if (ch == ' ')
     num_spazi++;
 } while (ch != 'n');

printf( "Il numero degli spazi e'
       %d.n",num_spazi);

return 0;


                        spazi.c
                                       6
Istruzioni break

° break: permette di uscire “forzatamente” da
  un blocco (while, for, do/while, switch)
   ° da usare con cautela perché de-struttura il
     programma
   ° nel caso dello switch è necessario
   ° negli altri casi si possono trovare soluzioni
     alternative




                                                     7
Istruzioni return, exit

° return: consente ad una funzione di tornare il
  controllo alla funzione che l’ha chiamata
   ° può restituire un valore
   ° nella funzione main viene in genere usata
     con valore 0 per segnalare il termine
     normale del programma al sistema
     operativo
       ° return 0
° exit: consente la terminazione di una
  funzione, con possibilità di gestione
  dell’errore
       ° exit (<int>)




                                                   8
Esercizio
Esempio uso break

°   Contare le "a/A" su una stringa di 50 caratteri. Fermarsi se
    arrivati a fine riga
# include <stdio.h>
int main (void) {
    int ch, cont, quantea=0, lungh=50;
    printf("Inserire una stringa n");
    for (cont=1; cont<=lungh; cont++)
    {
          ch=getchar( );
          if (ch == 'n')
              break;
          else
              if ((ch=='a') || (ch=='A'))
                      quantea++;
    }
    printf(" a o A nella stringa = %d n",
                      quantea);
    return 0;
}




                                                                   9
/*Contare quanti voti di tipo A, B, C, D ha riportato uno studente*/
#include <stdio.h>
int main (void) {
  int grade, aCnt=0, bCnt=0, cCnt=0,
      dCnt=0;
  printf("Inserisci i (A-D)n");
  printf("Termina con Fn");
    while ((grade=getchar()) != „F‟) {
       switch (grade) {
           case 'A': case 'a': ++aCnt;
                  break;
           case 'B': case 'b': ++bCnt;
                  break;
           case 'C': case 'c': ++cCnt;
                  break;
           case 'D': case 'd': ++dCnt;
                  break;
           case 'n' : case ' ': break;
           default: printf("Errore.
              Inserisci un altro voton");
           }
       }
                                                                       10
printf("Totale per ogni voton");
 printf("A: %dn", aCnt);
 printf("B: %dn", bCnt);
 printf("C: %dn", cCnt);
 printf("D: %dn", dCnt);
return 0;
}




                         conta_voti
                                      11
Soluzione per raffinamenti successivi

° La risoluzione dei problemi va affrontata per
  livelli di raffinamento successivi
   ° Definire prima le operazioni da eseguire a
      grandi linee
   ° Dettagliare ogni singola operazione
° Al       primo livello ci concentriamo su
  operazioni di una certa complessità
  (macroscopiche), tralasciando i dettagli
  realizzativi di ogni singola attività
   ° A successivi livelli di raffinamento ci
      preoccuperemo di dettagliare sempre più
      le attività complesse
                ° Analisi top-down




                                                  12
Soluzione per raffinamenti successivi

° Aspetti importanti:
   ° Alcune funzionalità possono essere
     riutilizzate in altri programmi o più volte
     all’interno dello stesso programma
   ° L’identificazione delle funzionalità è più
     semplice
   ° La soluzione di problemi “piccoli” è più
     facile
   ° Il programma è più facile da correggere

Una funzionalità può essere implementata come
funzione




                                                   13
Struttura di un programma C
° Un programma C è composto da blocchi,
  dette funzioni.
    ° Ogni funzione
         ° è un blocco di istruzioni che
           astraggono una specifica operazione
         ° è individuata da
             ° un tipo, un nome, una lista di
               parametri
° L’astrazione consiste
    ° Nel creare unità di programma (funzioni)
      dando un nome ad un gruppo di
      istruzioni
    ° Stabilire delle modalità di comunicazione
      tra la funzione così creata ed il resto del
      programma in cui si inserisce




                                                    14
Funzione

° Una funzione è identificata da un
  nome
° Ogni volta che si vuole eseguire
  questa funzione, verrà usato il nome
  con cui è stata creata
° L’effetto sarà l’esecuzione del blocco
  di istruzioni relativo alla funzione
   ° richiesta di attivazione (o chiamata,
     o invocazione) della funzione.




                                         15
Funzione chiamante (della
  funzione prova)

 int main (void)          Richiesta di
  { ……..                  attivazione
    prova( ..);           (chiamata)
   ……..
 }                  All’atto dell’attivazione
                    di una funzione viene
                    sospesa l’esecuzione del
                    blocco che contiene la
                    richiesta di
 void prova (…)     attivazione.
 {                  Il controllo passa
 …………               alla funzione attivata
 }

Dopo che è stata completata l’esecuzione
di prova, l’attivazione termina e il
controllo torna al programma
chiamante
° Distinguiamo tra:
  ° unità chiamante: “chiama” un‟altra unità
     per alcune operazioni; sospende
     l‟esecuzione       proprie     istruzioni
     (nell‟esempio main)
  ° unità chiamata: il controllo passa alle
     istruzioni della unità chiamata e, al
     termine della esecuzione, torna all‟unità
     chiamante (nell‟esempio prova)

° La comunicazione tra unità chiamanti e
  chiamate è gestita tramite il passaggio di
  parametri
   ° meccanismo di comunicazione che
     permette l‟attivazione dell‟unità chiamata
     su istanze diverse delle stesse variabili




                                                  17
• Nella funzione chiamata (es. prova) sono
  dichiarati i
   ° parametri         formali:      all’atto
      dell’attivazione della funzione sono
      legate ai parametri          dell’unità
      chiamante

° Nella funzione chiamante (es. main) sono
  usati i
   ° parametri attuali o effettivi: i valori che
      sono usati nella funzione chiamata
       ° Istanziazione dei parametri formali

° Compatibilità di tipo tra parametri formali
  e parametri attuali corrispondenti
° L’attivazione di una funzione stabilisce
      ° un collegamento tra i parametri
          attuali (valori) della chiamante e
          parametri formali della chiamata




                                                   18
int main (void)
 {
   int a=3, b=5, c;       a e b sono
   c=prova( a, b);        parametri attuali
   return 0;
}

           3          5



int prova (int x, int y)
{
  int pro;
  pro=(x+y)-x*y+sqrt(x/y)
  return pro;        x e y sono
}                    parametri formali


                                              19
° legame dei parametri:
   ° associazione tra parametri formali e
     parametri attuali che avviene al
     momento       dell‟attivazione della
     funzione

° I parametri formali definiscono una lista
  di oggetti fittizi che hanno bisogno di
  avere assegnato un valore

° Quando la funzione viene chiamata sono
  sostituiti dai parametri attuali, che sono
  collegati al valore (ai valori) che dobbiamo
  elaborare




                                                 20
void scambia (int x, int y) { …}
scambia (x1, y1)
scambia (w, z)
scambia (a, b) …..

° scambia(x1, y1): alla sua chiamata viene fatta
  un’associazione tra i parametri formali (x, y)
  e attuali (x1, y1)
   ° parametro formale x ->
           parametro attuale x1
   ° parametro formale y ->
           parametro attuale y1
° scambia (w, z):
   ° parametro formale x ->
         parametro attuale w
   ° parametro formale y ->
           parametro attuale z



                                               21
Funzioni
 ° Un programma C è composto insiemi
   di funzioni che possono usare al loro
   interno altre funzioni e/o le funzioni
   della libreria standard del C


                         main

       funzione1        funzione2   funzione 3

funzione4   funzione5         funzione6




                                             22
Funzioni


° Le funzioni possono apparire come:
   ° prototipo: dichiarazione del tipo,
     nome e argomenti
   ° definizione: intestazione,
     dichiarazione variabili locali,
     istruzioni
   ° chiamata: uso di una funzione
     all’interno di un’altra funzioni che ne
     utilizza le funzionalità o per eseguire
     istruzioni o per calcolare un valore




                                               23
Definizione di una funzione
° Definisce il comportamento della
  funzione, il numero e il tipo degli
  argomenti

<tipo di ritorno> <nome>
  (<lista_parametri>)
  {
      dichiarazioni_variabili locali;
      istruzioni;
  }

° Tipo di ritorno:è il tipo di dato
  restituito dalla funzione. Default:int.
  Se non torna alcun valore si usa void
  (va specificato esplicitamente).
   ° deve essere uno dei tipi del C



                                            24
<tipo di ritorno> <nome>
   (<lista_parametri>)
   {
        dichiarazioni_variabili locali;
        istruzioni;
   }




° Lista parametri: contiene la lista degli
  argomenti della funzione identificati
  secondo la coppia <tipo nome>. Se il tipo
  è omesso, viene considerato int. In caso
  di assenza, si usa void.
   ° La funzione deve essere chiamata con
      lo stesso numero di argomenti e tipi
      compatibili
   ° Sono detti parametri formali
   ° Mezzo di comunicazione tra funzione
      ed esterno



                                              25
<tipo di ritorno> <nome>
  (<lista_parametri>)
  {
      dichiarazioni_variabili locali;
      istruzioni;
  }



° Dichiarazioni variabili locali: sono
  variabili usate all‟interno della
  funzioni. Non sono visibili all‟esterno.
° Istruzioni: parte esecutiva. Se la
  funzione torna un valore, deve
  contenere un‟istruzione adatta allo
  scopo (per esempio, return).




                                             26
Prototipo di una funzione
° Indica al compilatore:
   ° il tipo di dato restituito dalla funzione
   ° il numero dei parametri, il loro tipo e
     numero
° Il compilatore può controllare che i
  parametri attuali nelle chiamate delle
  funzioni siano compatibili con il tipo dei
  parametri formali
  int maximun (int, int, int);
  int maximum (int x, int y, int z) {…}
   ° Ma i nomi degli argomenti sono
     ignorati
° Una chiamata che non corrisponda al
  prototipo genera un errore di sintassi



                                            27
Coercizione degli argomenti
° Importante caratteristica legata ai
  prototipi: conversione forzata degli
  argomenti
   ° viene effettuata una conversione
     dell’argomento nel tipo
     specificato dal prototipo
° Per esempio, se nel prototipo la
  funzione richiede un argomento di
  tipo float e viene invece chiamata
  con un int, l’argomento intero (es.
  5) viene convertito nel tipo
  dichiarato nel prototipo (float, es.
  5.0) PRIMA CHE LA
  FUNZIONE SIA CHIAMATA




                                         28
° I valori degli argomenti che non
  corrispondono al tipo definito nel
  prototipo sono convertiti in modo
  appropriato (regole di
  promozione)

° Ci possono essere dei problemi nel
  risultato, se avviene un passaggio
  da un tipo più grande ad uno più
  piccolo (violazione delle regole di
  promozione)

° Convertire i dati dei tipi più alti
  provoca valori scorretti.




                                        29
° L’assenza del prototipo elimina
  questi vantaggi

° In caso di mancanza, il
  programma costruisce un suo
  prototipo utilizzando la prima
  occorrenza della funzione, o la sua
  definizione o la sua chiamata.

° Per default, il compilatore assume
  int come tipo tornato e nulla circa
  gli argomenti.




                                        30
Chiamata (invocazione) di una
  funzione
° Trasferisce   il   controllo     del
  programma alla funzione specificata.

<nome funzione> (<arg1>, ...,
                     <argN>)
° Gli argomenti sono i parametri
  attuali.
° Gli argomenti devono essere in
  corrispondenza con quelli della
  definizione     (prototipo)    della
  funzione argomenti
   ° il tipo dei valori deve essere
     compatibile
   ° devono essere lo stesso numero
° La funzione può tornare o meno un
  valore
                                         31
° Tre modi per tornare il controllo:
  ° esecuzione dell’ultima
    istruzione
     ° Non torna valori
  ° return;
     ° Viene restituito il controllo,
       ma nessun valore
  ° return <espressione>;
     ° Viene restituito il controllo, e
       il valore di <espressione>




                                          32
Modalità di passaggio parametri
° Cosa accade ai valori dei parametri attuali
  passati alla funzione?
° La modalità che abbiamo usato finora è
  detta
  – Chiamata per valore
  – Si dice che i parametri sono legati
     per valore

° Scenario:
  ° funzione identificata con P
     dichiarata con un parametro
     formale pf
      ° …. P (pf); (dichiarazione)
  ° La procedura viene attivata con un
     parametro attuale pa
      ° P(pa) (chiamata)
      all’interno di un’altra funzione
         (compreso il main)
                                                33

More Related Content

What's hot

5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterativeguest60e9511
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)STELITANO
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamicaguest60e9511
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
 
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
 
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimentiMajong 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
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matriciguest60e9511
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++Ilio Catallo
 

What's hot (20)

5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
 
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
 
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
Corso c++
Corso c++Corso c++
Corso c++
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
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
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
 
8 Algoritmi
8   Algoritmi8   Algoritmi
8 Algoritmi
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++
 

Similar to 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)STELITANO
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 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 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 
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
 
Fondamenti di Informatica - Esercitazione3 (1).pdf
Fondamenti di Informatica - Esercitazione3 (1).pdfFondamenti di Informatica - Esercitazione3 (1).pdf
Fondamenti di Informatica - Esercitazione3 (1).pdflorenzosalvi30
 
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
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
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
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 

Similar to Lezione 12 (28 marzo 2012) (20)

7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
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
 
Fondamenti di Informatica - Esercitazione3 (1).pdf
Fondamenti di Informatica - Esercitazione3 (1).pdfFondamenti di Informatica - Esercitazione3 (1).pdf
Fondamenti di Informatica - Esercitazione3 (1).pdf
 
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
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
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++
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio 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
 

More from STELITANO

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
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 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 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
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricercaSTELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamentiSTELITANO
 
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
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 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
 

More from STELITANO (20)

Risultati
RisultatiRisultati
Risultati
 
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
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 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 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
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
 
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
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 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 12 (28 marzo 2012)

  • 1. Abilità Informatiche Ingegneria Chimica Lezione 13 del 28/03/2012 Prof. Antonino Stelitano
  • 2. Docente Antonino Stelitano Tutor Lezioni Lunedì 14:00 – 17:30 aula 16 Mercoledì 15:45 – 19:00 aula 15 Lab. Paolo Ercoli – via Tiburtina 205 Ricevimento: Per appuntamento antonino.stelitano@uniroma1.it stelitano.a@libero.it Sito web: http://w3.uniroma1.it/IngChim/Ainf
  • 3. Esercizio ° Leggere da tastiera una sequenza di interi e calcola la lunghezza della sequenza. L’immissione è terminata con uno 0 (che non deve essere conteggiato). Algoritmo ° Inizializza la lughezza della stringa a -1 ° Leggi il numero ° Incrementa di uno la lunghezza ° Mentre il numero letto è diverso da zero, torna ad eseguire dalla lettura del numero ° Stampa la lunghezza 3
  • 4. /* Legge da tastiera una sequenza di interi, terminata da 0. Calcola la lunghezza della sequenza (senza lo 0) e la stampa.*/ #include <stdio.h> int main(void) { int lunghezza; int dato; printf("Inserisci una sequenza di interi, terminata da 0n"); lunghezza = -1; /* all'inizio la lunghezza e' nulla */ do { scanf("%d", &dato); lunghezza = lunghezza + 1; } while (dato != 0); printf("La sequenza (senza lo 0 finale) e' lunga %dn", lunghezza); return 0; } seq_int.c 4
  • 5. Esercizio ° Contare il numero di spazi in una frase immessa da tastiera (fino all‟immissione di un ritorno a capo) Algoritmo - Inserire una frase - Inizializza un contatore - Leggere i caratteri uno per uno (usa getchar( )) - Se il carattere è uguale allo spazio, incrementa il contatore - Fai questo fino a che il carattere non è uguale al carattere di ritorno a capo 5
  • 6. #include <stdio.h> #include <stdlib.h> int main( void ) { int ch, num_spazi = 0; printf( "Inserisci una frase:n" ); do { ch = getchar(); if (ch == ' ') num_spazi++; } while (ch != 'n'); printf( "Il numero degli spazi e' %d.n",num_spazi); return 0; spazi.c 6
  • 7. Istruzioni break ° break: permette di uscire “forzatamente” da un blocco (while, for, do/while, switch) ° da usare con cautela perché de-struttura il programma ° nel caso dello switch è necessario ° negli altri casi si possono trovare soluzioni alternative 7
  • 8. Istruzioni return, exit ° return: consente ad una funzione di tornare il controllo alla funzione che l’ha chiamata ° può restituire un valore ° nella funzione main viene in genere usata con valore 0 per segnalare il termine normale del programma al sistema operativo ° return 0 ° exit: consente la terminazione di una funzione, con possibilità di gestione dell’errore ° exit (<int>) 8
  • 9. Esercizio Esempio uso break ° Contare le "a/A" su una stringa di 50 caratteri. Fermarsi se arrivati a fine riga # include <stdio.h> int main (void) { int ch, cont, quantea=0, lungh=50; printf("Inserire una stringa n"); for (cont=1; cont<=lungh; cont++) { ch=getchar( ); if (ch == 'n') break; else if ((ch=='a') || (ch=='A')) quantea++; } printf(" a o A nella stringa = %d n", quantea); return 0; } 9
  • 10. /*Contare quanti voti di tipo A, B, C, D ha riportato uno studente*/ #include <stdio.h> int main (void) { int grade, aCnt=0, bCnt=0, cCnt=0, dCnt=0; printf("Inserisci i (A-D)n"); printf("Termina con Fn"); while ((grade=getchar()) != „F‟) { switch (grade) { case 'A': case 'a': ++aCnt; break; case 'B': case 'b': ++bCnt; break; case 'C': case 'c': ++cCnt; break; case 'D': case 'd': ++dCnt; break; case 'n' : case ' ': break; default: printf("Errore. Inserisci un altro voton"); } } 10
  • 11. printf("Totale per ogni voton"); printf("A: %dn", aCnt); printf("B: %dn", bCnt); printf("C: %dn", cCnt); printf("D: %dn", dCnt); return 0; } conta_voti 11
  • 12. Soluzione per raffinamenti successivi ° La risoluzione dei problemi va affrontata per livelli di raffinamento successivi ° Definire prima le operazioni da eseguire a grandi linee ° Dettagliare ogni singola operazione ° Al primo livello ci concentriamo su operazioni di una certa complessità (macroscopiche), tralasciando i dettagli realizzativi di ogni singola attività ° A successivi livelli di raffinamento ci preoccuperemo di dettagliare sempre più le attività complesse ° Analisi top-down 12
  • 13. Soluzione per raffinamenti successivi ° Aspetti importanti: ° Alcune funzionalità possono essere riutilizzate in altri programmi o più volte all’interno dello stesso programma ° L’identificazione delle funzionalità è più semplice ° La soluzione di problemi “piccoli” è più facile ° Il programma è più facile da correggere Una funzionalità può essere implementata come funzione 13
  • 14. Struttura di un programma C ° Un programma C è composto da blocchi, dette funzioni. ° Ogni funzione ° è un blocco di istruzioni che astraggono una specifica operazione ° è individuata da ° un tipo, un nome, una lista di parametri ° L’astrazione consiste ° Nel creare unità di programma (funzioni) dando un nome ad un gruppo di istruzioni ° Stabilire delle modalità di comunicazione tra la funzione così creata ed il resto del programma in cui si inserisce 14
  • 15. Funzione ° Una funzione è identificata da un nome ° Ogni volta che si vuole eseguire questa funzione, verrà usato il nome con cui è stata creata ° L’effetto sarà l’esecuzione del blocco di istruzioni relativo alla funzione ° richiesta di attivazione (o chiamata, o invocazione) della funzione. 15
  • 16. Funzione chiamante (della funzione prova) int main (void) Richiesta di { …….. attivazione prova( ..); (chiamata) …….. } All’atto dell’attivazione di una funzione viene sospesa l’esecuzione del blocco che contiene la richiesta di void prova (…) attivazione. { Il controllo passa ………… alla funzione attivata } Dopo che è stata completata l’esecuzione di prova, l’attivazione termina e il controllo torna al programma chiamante
  • 17. ° Distinguiamo tra: ° unità chiamante: “chiama” un‟altra unità per alcune operazioni; sospende l‟esecuzione proprie istruzioni (nell‟esempio main) ° unità chiamata: il controllo passa alle istruzioni della unità chiamata e, al termine della esecuzione, torna all‟unità chiamante (nell‟esempio prova) ° La comunicazione tra unità chiamanti e chiamate è gestita tramite il passaggio di parametri ° meccanismo di comunicazione che permette l‟attivazione dell‟unità chiamata su istanze diverse delle stesse variabili 17
  • 18. • Nella funzione chiamata (es. prova) sono dichiarati i ° parametri formali: all’atto dell’attivazione della funzione sono legate ai parametri dell’unità chiamante ° Nella funzione chiamante (es. main) sono usati i ° parametri attuali o effettivi: i valori che sono usati nella funzione chiamata ° Istanziazione dei parametri formali ° Compatibilità di tipo tra parametri formali e parametri attuali corrispondenti ° L’attivazione di una funzione stabilisce ° un collegamento tra i parametri attuali (valori) della chiamante e parametri formali della chiamata 18
  • 19. int main (void) { int a=3, b=5, c; a e b sono c=prova( a, b); parametri attuali return 0; } 3 5 int prova (int x, int y) { int pro; pro=(x+y)-x*y+sqrt(x/y) return pro; x e y sono } parametri formali 19
  • 20. ° legame dei parametri: ° associazione tra parametri formali e parametri attuali che avviene al momento dell‟attivazione della funzione ° I parametri formali definiscono una lista di oggetti fittizi che hanno bisogno di avere assegnato un valore ° Quando la funzione viene chiamata sono sostituiti dai parametri attuali, che sono collegati al valore (ai valori) che dobbiamo elaborare 20
  • 21. void scambia (int x, int y) { …} scambia (x1, y1) scambia (w, z) scambia (a, b) ….. ° scambia(x1, y1): alla sua chiamata viene fatta un’associazione tra i parametri formali (x, y) e attuali (x1, y1) ° parametro formale x -> parametro attuale x1 ° parametro formale y -> parametro attuale y1 ° scambia (w, z): ° parametro formale x -> parametro attuale w ° parametro formale y -> parametro attuale z 21
  • 22. Funzioni ° Un programma C è composto insiemi di funzioni che possono usare al loro interno altre funzioni e/o le funzioni della libreria standard del C main funzione1 funzione2 funzione 3 funzione4 funzione5 funzione6 22
  • 23. Funzioni ° Le funzioni possono apparire come: ° prototipo: dichiarazione del tipo, nome e argomenti ° definizione: intestazione, dichiarazione variabili locali, istruzioni ° chiamata: uso di una funzione all’interno di un’altra funzioni che ne utilizza le funzionalità o per eseguire istruzioni o per calcolare un valore 23
  • 24. Definizione di una funzione ° Definisce il comportamento della funzione, il numero e il tipo degli argomenti <tipo di ritorno> <nome> (<lista_parametri>) { dichiarazioni_variabili locali; istruzioni; } ° Tipo di ritorno:è il tipo di dato restituito dalla funzione. Default:int. Se non torna alcun valore si usa void (va specificato esplicitamente). ° deve essere uno dei tipi del C 24
  • 25. <tipo di ritorno> <nome> (<lista_parametri>) { dichiarazioni_variabili locali; istruzioni; } ° Lista parametri: contiene la lista degli argomenti della funzione identificati secondo la coppia <tipo nome>. Se il tipo è omesso, viene considerato int. In caso di assenza, si usa void. ° La funzione deve essere chiamata con lo stesso numero di argomenti e tipi compatibili ° Sono detti parametri formali ° Mezzo di comunicazione tra funzione ed esterno 25
  • 26. <tipo di ritorno> <nome> (<lista_parametri>) { dichiarazioni_variabili locali; istruzioni; } ° Dichiarazioni variabili locali: sono variabili usate all‟interno della funzioni. Non sono visibili all‟esterno. ° Istruzioni: parte esecutiva. Se la funzione torna un valore, deve contenere un‟istruzione adatta allo scopo (per esempio, return). 26
  • 27. Prototipo di una funzione ° Indica al compilatore: ° il tipo di dato restituito dalla funzione ° il numero dei parametri, il loro tipo e numero ° Il compilatore può controllare che i parametri attuali nelle chiamate delle funzioni siano compatibili con il tipo dei parametri formali int maximun (int, int, int); int maximum (int x, int y, int z) {…} ° Ma i nomi degli argomenti sono ignorati ° Una chiamata che non corrisponda al prototipo genera un errore di sintassi 27
  • 28. Coercizione degli argomenti ° Importante caratteristica legata ai prototipi: conversione forzata degli argomenti ° viene effettuata una conversione dell’argomento nel tipo specificato dal prototipo ° Per esempio, se nel prototipo la funzione richiede un argomento di tipo float e viene invece chiamata con un int, l’argomento intero (es. 5) viene convertito nel tipo dichiarato nel prototipo (float, es. 5.0) PRIMA CHE LA FUNZIONE SIA CHIAMATA 28
  • 29. ° I valori degli argomenti che non corrispondono al tipo definito nel prototipo sono convertiti in modo appropriato (regole di promozione) ° Ci possono essere dei problemi nel risultato, se avviene un passaggio da un tipo più grande ad uno più piccolo (violazione delle regole di promozione) ° Convertire i dati dei tipi più alti provoca valori scorretti. 29
  • 30. ° L’assenza del prototipo elimina questi vantaggi ° In caso di mancanza, il programma costruisce un suo prototipo utilizzando la prima occorrenza della funzione, o la sua definizione o la sua chiamata. ° Per default, il compilatore assume int come tipo tornato e nulla circa gli argomenti. 30
  • 31. Chiamata (invocazione) di una funzione ° Trasferisce il controllo del programma alla funzione specificata. <nome funzione> (<arg1>, ..., <argN>) ° Gli argomenti sono i parametri attuali. ° Gli argomenti devono essere in corrispondenza con quelli della definizione (prototipo) della funzione argomenti ° il tipo dei valori deve essere compatibile ° devono essere lo stesso numero ° La funzione può tornare o meno un valore 31
  • 32. ° Tre modi per tornare il controllo: ° esecuzione dell’ultima istruzione ° Non torna valori ° return; ° Viene restituito il controllo, ma nessun valore ° return <espressione>; ° Viene restituito il controllo, e il valore di <espressione> 32
  • 33. Modalità di passaggio parametri ° Cosa accade ai valori dei parametri attuali passati alla funzione? ° La modalità che abbiamo usato finora è detta – Chiamata per valore – Si dice che i parametri sono legati per valore ° Scenario: ° funzione identificata con P dichiarata con un parametro formale pf ° …. P (pf); (dichiarazione) ° La procedura viene attivata con un parametro attuale pa ° P(pa) (chiamata) all’interno di un’altra funzione (compreso il main) 33