SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
Abilità Informatiche
   Ingegneria Chimica
Lezione 12 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/ab_informatiche
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>
#include <stdlib.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
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

Más contenido relacionado

La actualidad más candente

05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: FunzioniMajong DevJfu
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
 
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
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterativeguest60e9511
 
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
 
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
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matriciguest60e9511
 
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
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 

La actualidad más candente (20)

05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
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
 
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
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
Corso c++
Corso c++Corso c++
Corso c++
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
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
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
8 Algoritmi
8   Algoritmi8   Algoritmi
8 Algoritmi
 
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
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
 
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
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
2008 python
2008 python2008 python
2008 python
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 

Destacado

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
 
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
 
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
 

Destacado (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 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)
 
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
 

Similar a 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
 
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
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 
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
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
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
 
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
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
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
 

Similar a 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)
 
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
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
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)
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
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!
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/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
 
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
 
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
 
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
 

Más de 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
 
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
 
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
 

Más de STELITANO (16)

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
 
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
 
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)
 

Lezione 12 (28 marzo 2012)

  • 1. Abilità Informatiche Ingegneria Chimica Lezione 12 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/ab_informatiche
  • 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> #include <stdlib.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. 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