SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Introduzione al C
 Esercitazione 4




Dipartimento Ingegneria Chimica Materiali Ambiente




 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: Su richiesta      antonino.stelitano@uniroma1.it

                               stelitano.a@libero.it
Sito web:     http://w3.uniroma1.it/ab_informatiche/
Esercizio
Soluzione parziale – solo ultimo caso
  #include <stdio.h>
  #include <stdlib.h>

  int main()
  {
     printf("R1n");
     printf("inserisci i valori (x, y) per il primo verticen"
                " separati da uno spazio:n");
     int R1_x1, R1_y1;
     scanf("%d %d", &R1_x1, &R1_y1);
     printf("inserisci i valori (x, y) per il secondo verticen"
                " separati da uno spazio:n");
     int R1_x2, R1_y2;
     scanf("%d %d", &R1_x2, &R1_y2);

    int R1_left_bottom_vertex_x, R1_left_bottom_vertex_y,
       R1_right_upper_vertex_x, R1_right_upper_vertex_y;

    if(R1_x1 > R1_x2)
    {
        R1_right_upper_vertex_x = R1_x1;
        R1_left_bottom_vertex_x = R1_x2;
    }
    else
    {
        R1_right_upper_vertex_x = R1_x2;
        R1_left_bottom_vertex_x = R1_x1;
    }
Soluzione parziale (continua)
 if(R1_y1 > R1_y2)
 {
     R1_right_upper_vertex_y = R1_y1;
     R1_left_bottom_vertex_y = R1_y2;
 }
 else
 {
     R1_right_upper_vertex_y = R1_y2;
     R1_left_bottom_vertex_y = R1_y1;
 }


 printf("R2n");
 printf("inserisci i valori (x, y) per il primo verticen"
            " separati da uno spazio:n");
 int R2_x1, R2_y1;
 scanf("%d %d", &R2_x1, &R2_y1);
 printf("inserisci i valori (x, y) per il secondo verticen"
            " separati da uno spazio:n");
 int R2_x2, R2_y2;
 scanf("%d %d", &R2_x2, &R2_y2);

 int R2_left_bottom_vertex_x, R2_left_bottom_vertex_y,
    R2_right_upper_vertex_x, R2_right_upper_vertex_y;
Soluzione parziale (continua)
  if(R2_x1 > R2_x2)
  {
      R2_right_upper_vertex_x = R2_x1;
      R2_left_bottom_vertex_x = R2_x2;
  }
  else
  {
      R2_right_upper_vertex_x = R2_x2;
      R2_left_bottom_vertex_x = R2_x1;
  }

  if(R2_y1 > R2_y2)
  {
      R2_right_upper_vertex_y = R2_y1;
      R2_left_bottom_vertex_y = R2_y2;
  }
  else
  {
      R2_right_upper_vertex_y = R2_y2;
      R2_left_bottom_vertex_y = R2_y1;
  }
Soluzione parziale (finisce)
  if((R2_right_upper_vertex_x < R1_right_upper_vertex_x) &&
    (R2_left_bottom_vertex_x > R1_left_bottom_vertex_x) &&
    (R2_right_upper_vertex_y < R1_right_upper_vertex_y) &&
    (R2_left_bottom_vertex_y > R1_left_bottom_vertex_y) )
  {
     printf(“2 - R2 e' strettamente contenuto in R1n");
  }
  else
                                                              La stessa cosa
     printf("R2 NON e' strettamente contenuto in R1n");
                                                              può esser fatta
 system("PAUSE");
 return 1;                                                    con R1 ed R2
}
                                                              invertiti
I commenti in c

 Per commentare una singola riga inserire un doppio
 slash “//”

 Per commentare più righe:

 o si commentano le righe una per una

 oppure si inserisce all’inizio della parte commentata
 “/*” e poi alla fine di essa “*/”
Esempio di commenti in c
 #include <stdlib.h>
 #include <stdio.h>

 int main()
 {
    //chiedo all'utente di inserire un intero
    printf("Inserisci un numero:n");
    int n;
    scanf("%d", &n);
    /* controllo che il numero immesso sia
    un numero positivo*/
    //in tal caso
    /*stampo una stringa di saluto*/
    if(n > 0)
        printf("bravo, sei un tipo positivon");
    system("PAUSE");
    return 1;
 }
Le strutture di controllo

       If
       Operatore “?”
       Switch
       While
       Do-While
       For
       Break e Continue
Operatore if
               if (expression)
                        statement
                                       corpo: indentato e
  condizione                           racchiuso tra graffe
               if (expression)
                        statement1
               else
                        statement2
L’if
ha 3 forme
               if (expression1)
di base                  statement1
               else if (expression2)
                         statement2
               else
                         statement3
Esempio if
  main()
  {
           int x, y, z;
           int w = 15;        condizione
           ...
           if (x < 0)
           {
                      z=w;   corpo
                      ...
           }
           else
           {
                      y=w;
                      ...
           }
  }
Altro esempio if
 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
    if(1)
        printf("dinon");   Quali nomi vengono
    if(0)                   stampati?
        printf("ginon");
    if(1256789)
        printf("ninon");
    if(-874)
        printf("minon");
    system(“PAUSE”);
    return 1;
 }
Attenzione a non mettere il “;”

 if(0);                  Nell’if dopo le tonde
 {                       se si inserisce il
     printf("ginon");   punto e virgola,
                         l’istruzione che
 }
                         segue viene
                         eseguita
 Stampa                  indipendentemente
 gino                    dall’esito del
                         controllo
L’operatore “?”

 L' operatore ? (ternary condition) e' la forma piu' efficiente
 per esprimere semplici if statements. Ha la seguente forma:

 expression1 ? expression2 : expression3

 che equivale a:

 if expression1 then expression2 else expression3
Esempio “?”

 z = (a>b) ? a : b;

 cioè                          Un consiglio:
                               usatelo solo se
 if (a > b)                    siete sicuri
        z = a;                 di quello che state
 else                          facendo
        z = b;

 assegna a z il massimo tra a e b.
Switch
Permette scelte multiple tra un insieme di items. La sua forma generale è:

switch (expression) {
         case item1:
                  statement1;
                  break;
                  .
                  .
         case itemn:
                  statementn;
                  break;
         case default:
                  statement;
                  break;
}
Switch (2)
Il valore degli item deve essere una costante (le variabili non
sono permesse).
Il break serve per terminare lo switch dopo l'esecuzione di
una scelta, altrimenti verra' valutato anche il caso successivo.
E' possibile anche avere un'istruzione nulla, includendo
solamente un ";"
oppure lasciando fallire l'istruzione di switch omettendo
qualsiasi frase (vedi esempio di seguito).
Il caso "default" e' facoltativo e raggruppa tutti gli altri casi.
Esempio switch
switch (letter) {
          case 'A':                   num_vocali++;
          case 'E':                   equivale all’espressione
          case 'I':                   num_vocali = num_vocali + 1;
          case 'O':
          case 'U':                   Si usa perché è più efficiente
                      num_vocali++;   e perché permette di minimizzare
                      break;          eventuali errori di battitura
          case " ":
                      num_spazi++;
                      break;
          default:
                                         Il break termina la
                      num_altri++;       valutazione
                      break;
}
Esempio switch (2)

Nel precedente esempio se letter è una vocale
('A','E','I','O','U') viene incrementato il valore della
variabile num_vocali, se è uno spazio (" ") si
incrementa num_spazi, altrimenti (se nessuno dei
casi precedenti e’ vero) viene eseguita la condizione
di default e quindi viene incrementato num_altri.
Esercizio Switch

Chiedere all’utente di inserire un intero tra
1 e 12 (estremi inclusi, of course) e stampare
il mese dell’anno ad esso corrispondente in
formato non numerico

Esempio
Input: 2
Output: Febbraio
Soluzione Switch
 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
    printf("inserisci un intero tra 1 e 12:n");
    int x;
    scanf("%d", &x);
    switch(x)
    {
           case 1:
              printf("Gennaion");
              break;
           case 2:
              printf("Febbraion");
              break;
           case 12:
              printf("Dicembren");
              break;
           default:
              printf("c'hai provato...n");
              printf("andra' meglio la prossima voltan");
              break;
    }
    system("PAUSE");
    return 1;
 }
Operatori incremento e decremento

In C è possibile utilizzare una forma abbreviata
per indicare incrementi e decrementi
Incremento di 1
variabile++ oppure ++variabile
Quanto sopra equivale (entrambe le espressioni) a
variabile = variabile + 1

Nel primo caso l’espressione in cui variabile si trova viene valutata prima
che variabile sia incrementata, nel secondo caso prima viene incrementato
il valore di variabile e poi viene valutata l’espressione in cui variabile si
trova.
Operatori incremento e decremento (2)
 int main(){
        int x = 1, y = 2;
        int z = y + x++;
        printf(“z = %d x = %dn”, z, x);
        x = 1;
        z = y + ++x;
        printf(“z = %d x = %dn”, z, x);
        return 1;
         }
 L’output è         z=3     x=2
                    z=4     x=2
Operatori incremento e decremento (3)
Vediamo ora il decremento

Decremento di 1
variabile-- oppure --variabile

Quanto sopra (entrambe le espressioni) equivale a
variabile = variabile - 1

Come per l’incremento, nel primo caso l’espressione in cui variabile
si trova viene valutata prima che variabile sia incrementata, nel
secondo caso prima viene incrementato il valore di variabile e poi
viene valutata l’espressione in cui variabile si trova.
Gli operatori +=, *=, /=, -=

  Sempre al fine di minimizzare possibili errori di
  battitura, il c ha una forma compatta per le
  espressioni aritmetiche
  +, -, *, /
  L’espressione
  variabile /= 3;
  equivale a
  variabile = variabile / 3;
L’istruzione while
L'istruzione "while" ha la seguente forma:

while (expression)
{
      statement;
}
     Per le graffe vale la stessa regola vista
     per l’if
Esempio while
main()
{
         int x = 3;
         while (x > 0)
         {
                printf("x = %dn", x);
                x--;
                           Questa istruzione è essenziale
         }
                           per la corretta esecuzione del
}
                           programma. Se venisse
                           omessa il programma non
                           terminerebbe: ciclo infinito
Esempio while – Terminazione da utente
 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
   printf("immetti un intero,n");
   printf("sara' stampato il suo successore.n");
   printf("123 per terminaren");
   int x;
   scanf("%d", &x);
   while( x != 123)
   {
     printf("il successore e' %dnnnn", ++x);
     printf("immetti un intero,n");
     printf("sara' stampato il suo successore.n");
     printf("123 per terminaren");
     scanf("%d", &x);
   }
   system("PAUSE");
   return 1;
 }
Esercizio while
 Scrivere un programma che prenda in
 ingresso un intero positivo e stampi un
 numero di righe contenenti un asterisco ed il
 numero di riga nella forma seguente:
 i. * dove i è il numero di riga.
 (un numero non positivo per terminare)

 Esempio
 Input:    2
 Output: 1. *
           2. *
int main()
{
    printf("immetti un intero,n");
    printf("sara' stampato un numero di righe.n");
    printf("corrispondenti nella forma i. *n");
    printf("dove i e' il numero di riga in ordine crescenten");
    printf("(un numero non positivo per terminare)n");
    int x;
    scanf("%d", &x);
    while( x > 0)
    {
                                                  Soluzione
           int counter = 0;
           while( x != 0)                         while
           {
               printf("n%d. *", ++counter);
               x--;
           }
           printf("nnnn");
            printf("immetti un intero,n");
           printf("sara' stampato un numero di righe.n");
           printf("corrispondenti nella forma i. *n");
           printf("dove i e' il numero di riga in ordine crescenten");
           printf("(un numero non positivo per terminare)n");
           scanf("%d", &x);
    }
    system("PAUSE");
    return 1;
}
il costrutto do-while

L'istruzione C "do-while" ha la seguente forma:

do                           Un insieme di istruzioni
      statement;             dopo il do: esso sarà
while (expression);          eseguito comunque
                             almeno una volta

                      notare i due punti
                      dopo le parentesi
Esempio do-while
main()
{
         int x = 3;
         do {
                 printf("x=%dn",x);
                 x--;
         }
         while (x > 0);
}
Il cui output e':
x=3
x=2
x=1
Istruzione for
il for è una istruzione equivalente dal punto di vista
concettuale al while. Si tratta di quello che in gergo viene
definito “zucchero sintattico”
for (expression1; expression2; expression3)
       statement;
       {or block of statements}
dove expression1 inizializza, expression2 è il test di
termine ed expression3 è il modificatore (che puo' anche
essere piu' di un semplice incremento).
Esempio for
main()
{
     int i;
     for ( i = 0; i < 3; i++)
     printf(“i = %dn", i);
}

che genera come output sullo schermo:
x=0
x=1
x=2
Esercizio for

Calcolare con il costrutto for la somma di tutti i numeri da 0
ad n. Con n inserito dall’utente.

Si può risolvere con una semplice espressione matematica,
quale?

Noi, giusto per esercizio, lo facciamo con il for e
ringraziamo Gauss in ogni modo.
Soluzione for (stupida)
 int main()
 {
    printf("stupido esempio di uso del forn");
    printf("Please, enter a positive non zero number:n");
    int n;
    scanf("%d", &n);
    while(n <= 0)
    {
           printf("Please, enter a positive non zero number:n");
           scanf("%d", &n);
    }
    printf("Thank you.n");
    int sum = 0;
    int i;
    for(i = n; i > 0; i--)
           sum += i;
    printf("the sum of all the integers between 0 and %d, is %dn", n, sum);

     system("PAUSE");
     return 1;
 }
Soluzione (non for) intelligente

La somma S dei numeri interi da 0 ad n è


                        n
                     S  (n  1)
                        2
Il comando break

Lo abbiamo incontrato nel costrutto switch

il comando break serve per controllare i loop.

In particolare: esce da un loop o da uno switch
Il comando continue

il comando break serve per controllare i loop.

In particolare: salta una iterazione del loop.
Esempio break e continue
#include <stdlib.h>
#include <stdio.h>
int main()
{
         int i;
         for(i = 0; i < 10; i++)
                                          Stampa:
         {                                1
                   if(i == 3)             2
                              continue;
                   if(i == 7)             4
                              break;      5
                   printf("%dn", i);     6
         }
         system("PAUSE");
         return 1;
}
Esercizio break e continue

Si chiede di leggere un valore integer ed elaborarlo in
accordo con le seguenti condizioni:
Se il valore che abbiamo letto e' negativo, si vuole stampare
un messaggio di errore ed abbandonare il loop.
Se il valore letto e' maggiore di 100, si vuole ignorarlo e
continuare con il successivo valore in input.
Se il valore e' 0, dovremo terminare il loop.
Soluzione break e continue
 /* Viene letto un valore intero ed elaborato purchè
 sia maggiore di 0 e minore di 100 */
 while (scanf("%d“, &value) == 1 && value !=0) {
           if (value < 0) {
                     printf("Valore non ammesson");
                     break; /* Abbandona il loop */
           }
           if (value > 100)
           {
                     printf("Valore non ammesson");
                     continue; /*Torna nuovamente all'inizio del loop */
           }
           /*Elabora il valore letto*/
           /*che e' sicuramente tra 0 e 100 */
           .
           .
           }

Contenu connexe

Tendances

9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
guest60e9511
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
STELITANO
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
Majong DevJfu
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
Majong DevJfu
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
extrategy
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)
STELITANO
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
guest60e9511
 
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
Majong DevJfu
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
Majong DevJfu
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
Majong DevJfu
 

Tendances (20)

Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
 
Ese01 java
Ese01 javaEse01 java
Ese01 java
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
 
Appunti di analisi funzionale [a.a. 1995 1996][prof. biagio ricceri][santi ca...
Appunti di analisi funzionale [a.a. 1995 1996][prof. biagio ricceri][santi ca...Appunti di analisi funzionale [a.a. 1995 1996][prof. biagio ricceri][santi ca...
Appunti di analisi funzionale [a.a. 1995 1996][prof. biagio ricceri][santi ca...
 
Sql stored procedures
Sql stored proceduresSql stored procedures
Sql stored procedures
 
2008 python
2008 python2008 python
2008 python
 
Flow chart
Flow chartFlow chart
Flow chart
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
Excel Funzioni per la manipolazione delle stringhe, funzioni condizionali sem...
 
GlobalInvertibility
GlobalInvertibilityGlobalInvertibility
GlobalInvertibility
 
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
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
 
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
Infinitesimi ed infiniti [teoria ed esericizi][santi caltabiano]
 

Similaire à Esercitazione 4 (19 marzo 2012)

4 Strutture Condizionali
4   Strutture Condizionali4   Strutture Condizionali
4 Strutture Condizionali
guest60e9511
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
STELITANO
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
guest60e9511
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
STELITANO
 
Complessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoComplessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio Sperduto
Vitalij Zadneprovskij
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
STELITANO
 
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
Calcolo Numerico - 2 - Rappresentazione Dei NumeriCalcolo Numerico - 2 - Rappresentazione Dei Numeri
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
Majong DevJfu
 

Similaire à Esercitazione 4 (19 marzo 2012) (20)

4 Strutture Condizionali
4   Strutture Condizionali4   Strutture Condizionali
4 Strutture Condizionali
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
 
esempio open closed
esempio open closedesempio open closed
esempio open closed
 
Schema Risolutivo Delle Serie
Schema Risolutivo Delle SerieSchema Risolutivo Delle Serie
Schema Risolutivo Delle Serie
 
Visual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec GradoVisual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec Grado
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Stringhe java
Stringhe javaStringhe java
Stringhe java
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Metodo di Newton
Metodo di NewtonMetodo di Newton
Metodo di Newton
 
Complessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoComplessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio Sperduto
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Massimi e minimi
Massimi e minimiMassimi e minimi
Massimi e minimi
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguida
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
Calcolo Numerico - 2 - Rappresentazione Dei NumeriCalcolo Numerico - 2 - Rappresentazione Dei Numeri
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
 

Plus de 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 2012
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 2012
STELITANO
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012
STELITANO
 
Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisi
STELITANO
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)
STELITANO
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
STELITANO
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parte
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 parte
STELITANO
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
STELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
STELITANO
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
STELITANO
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)
STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
STELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
STELITANO
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettori
STELITANO
 
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
STELITANO
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012
STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
STELITANO
 

Plus de STELITANO (20)

Risultati
RisultatiRisultati
Risultati
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012
 
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 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parte
 
Lezione 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 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettori
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 

Esercitazione 4 (19 marzo 2012)

  • 1. Introduzione al C Esercitazione 4 Dipartimento Ingegneria Chimica Materiali Ambiente 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: Su richiesta antonino.stelitano@uniroma1.it stelitano.a@libero.it Sito web: http://w3.uniroma1.it/ab_informatiche/
  • 4. Soluzione parziale – solo ultimo caso #include <stdio.h> #include <stdlib.h> int main() { printf("R1n"); printf("inserisci i valori (x, y) per il primo verticen" " separati da uno spazio:n"); int R1_x1, R1_y1; scanf("%d %d", &R1_x1, &R1_y1); printf("inserisci i valori (x, y) per il secondo verticen" " separati da uno spazio:n"); int R1_x2, R1_y2; scanf("%d %d", &R1_x2, &R1_y2); int R1_left_bottom_vertex_x, R1_left_bottom_vertex_y, R1_right_upper_vertex_x, R1_right_upper_vertex_y; if(R1_x1 > R1_x2) { R1_right_upper_vertex_x = R1_x1; R1_left_bottom_vertex_x = R1_x2; } else { R1_right_upper_vertex_x = R1_x2; R1_left_bottom_vertex_x = R1_x1; }
  • 5. Soluzione parziale (continua) if(R1_y1 > R1_y2) { R1_right_upper_vertex_y = R1_y1; R1_left_bottom_vertex_y = R1_y2; } else { R1_right_upper_vertex_y = R1_y2; R1_left_bottom_vertex_y = R1_y1; } printf("R2n"); printf("inserisci i valori (x, y) per il primo verticen" " separati da uno spazio:n"); int R2_x1, R2_y1; scanf("%d %d", &R2_x1, &R2_y1); printf("inserisci i valori (x, y) per il secondo verticen" " separati da uno spazio:n"); int R2_x2, R2_y2; scanf("%d %d", &R2_x2, &R2_y2); int R2_left_bottom_vertex_x, R2_left_bottom_vertex_y, R2_right_upper_vertex_x, R2_right_upper_vertex_y;
  • 6. Soluzione parziale (continua) if(R2_x1 > R2_x2) { R2_right_upper_vertex_x = R2_x1; R2_left_bottom_vertex_x = R2_x2; } else { R2_right_upper_vertex_x = R2_x2; R2_left_bottom_vertex_x = R2_x1; } if(R2_y1 > R2_y2) { R2_right_upper_vertex_y = R2_y1; R2_left_bottom_vertex_y = R2_y2; } else { R2_right_upper_vertex_y = R2_y2; R2_left_bottom_vertex_y = R2_y1; }
  • 7. Soluzione parziale (finisce) if((R2_right_upper_vertex_x < R1_right_upper_vertex_x) && (R2_left_bottom_vertex_x > R1_left_bottom_vertex_x) && (R2_right_upper_vertex_y < R1_right_upper_vertex_y) && (R2_left_bottom_vertex_y > R1_left_bottom_vertex_y) ) { printf(“2 - R2 e' strettamente contenuto in R1n"); } else La stessa cosa printf("R2 NON e' strettamente contenuto in R1n"); può esser fatta system("PAUSE"); return 1; con R1 ed R2 } invertiti
  • 8. I commenti in c Per commentare una singola riga inserire un doppio slash “//” Per commentare più righe: o si commentano le righe una per una oppure si inserisce all’inizio della parte commentata “/*” e poi alla fine di essa “*/”
  • 9. Esempio di commenti in c #include <stdlib.h> #include <stdio.h> int main() { //chiedo all'utente di inserire un intero printf("Inserisci un numero:n"); int n; scanf("%d", &n); /* controllo che il numero immesso sia un numero positivo*/ //in tal caso /*stampo una stringa di saluto*/ if(n > 0) printf("bravo, sei un tipo positivon"); system("PAUSE"); return 1; }
  • 10. Le strutture di controllo  If  Operatore “?”  Switch  While  Do-While  For  Break e Continue
  • 11. Operatore if if (expression) statement corpo: indentato e condizione racchiuso tra graffe if (expression) statement1 else statement2 L’if ha 3 forme if (expression1) di base statement1 else if (expression2) statement2 else statement3
  • 12. Esempio if main() { int x, y, z; int w = 15; condizione ... if (x < 0) { z=w; corpo ... } else { y=w; ... } }
  • 13. Altro esempio if #include <stdio.h> #include <stdlib.h> int main() { if(1) printf("dinon"); Quali nomi vengono if(0) stampati? printf("ginon"); if(1256789) printf("ninon"); if(-874) printf("minon"); system(“PAUSE”); return 1; }
  • 14. Attenzione a non mettere il “;” if(0); Nell’if dopo le tonde { se si inserisce il printf("ginon"); punto e virgola, l’istruzione che } segue viene eseguita Stampa indipendentemente gino dall’esito del controllo
  • 15. L’operatore “?” L' operatore ? (ternary condition) e' la forma piu' efficiente per esprimere semplici if statements. Ha la seguente forma: expression1 ? expression2 : expression3 che equivale a: if expression1 then expression2 else expression3
  • 16. Esempio “?” z = (a>b) ? a : b; cioè Un consiglio: usatelo solo se if (a > b) siete sicuri z = a; di quello che state else facendo z = b; assegna a z il massimo tra a e b.
  • 17. Switch Permette scelte multiple tra un insieme di items. La sua forma generale è: switch (expression) { case item1: statement1; break; . . case itemn: statementn; break; case default: statement; break; }
  • 18. Switch (2) Il valore degli item deve essere una costante (le variabili non sono permesse). Il break serve per terminare lo switch dopo l'esecuzione di una scelta, altrimenti verra' valutato anche il caso successivo. E' possibile anche avere un'istruzione nulla, includendo solamente un ";" oppure lasciando fallire l'istruzione di switch omettendo qualsiasi frase (vedi esempio di seguito). Il caso "default" e' facoltativo e raggruppa tutti gli altri casi.
  • 19. Esempio switch switch (letter) { case 'A': num_vocali++; case 'E': equivale all’espressione case 'I': num_vocali = num_vocali + 1; case 'O': case 'U': Si usa perché è più efficiente num_vocali++; e perché permette di minimizzare break; eventuali errori di battitura case " ": num_spazi++; break; default: Il break termina la num_altri++; valutazione break; }
  • 20. Esempio switch (2) Nel precedente esempio se letter è una vocale ('A','E','I','O','U') viene incrementato il valore della variabile num_vocali, se è uno spazio (" ") si incrementa num_spazi, altrimenti (se nessuno dei casi precedenti e’ vero) viene eseguita la condizione di default e quindi viene incrementato num_altri.
  • 21. Esercizio Switch Chiedere all’utente di inserire un intero tra 1 e 12 (estremi inclusi, of course) e stampare il mese dell’anno ad esso corrispondente in formato non numerico Esempio Input: 2 Output: Febbraio
  • 22. Soluzione Switch #include <stdio.h> #include <stdlib.h> int main() { printf("inserisci un intero tra 1 e 12:n"); int x; scanf("%d", &x); switch(x) { case 1: printf("Gennaion"); break; case 2: printf("Febbraion"); break; case 12: printf("Dicembren"); break; default: printf("c'hai provato...n"); printf("andra' meglio la prossima voltan"); break; } system("PAUSE"); return 1; }
  • 23. Operatori incremento e decremento In C è possibile utilizzare una forma abbreviata per indicare incrementi e decrementi Incremento di 1 variabile++ oppure ++variabile Quanto sopra equivale (entrambe le espressioni) a variabile = variabile + 1 Nel primo caso l’espressione in cui variabile si trova viene valutata prima che variabile sia incrementata, nel secondo caso prima viene incrementato il valore di variabile e poi viene valutata l’espressione in cui variabile si trova.
  • 24. Operatori incremento e decremento (2) int main(){ int x = 1, y = 2; int z = y + x++; printf(“z = %d x = %dn”, z, x); x = 1; z = y + ++x; printf(“z = %d x = %dn”, z, x); return 1; } L’output è z=3 x=2 z=4 x=2
  • 25. Operatori incremento e decremento (3) Vediamo ora il decremento Decremento di 1 variabile-- oppure --variabile Quanto sopra (entrambe le espressioni) equivale a variabile = variabile - 1 Come per l’incremento, nel primo caso l’espressione in cui variabile si trova viene valutata prima che variabile sia incrementata, nel secondo caso prima viene incrementato il valore di variabile e poi viene valutata l’espressione in cui variabile si trova.
  • 26. Gli operatori +=, *=, /=, -= Sempre al fine di minimizzare possibili errori di battitura, il c ha una forma compatta per le espressioni aritmetiche +, -, *, / L’espressione variabile /= 3; equivale a variabile = variabile / 3;
  • 27. L’istruzione while L'istruzione "while" ha la seguente forma: while (expression) { statement; } Per le graffe vale la stessa regola vista per l’if
  • 28. Esempio while main() { int x = 3; while (x > 0) { printf("x = %dn", x); x--; Questa istruzione è essenziale } per la corretta esecuzione del } programma. Se venisse omessa il programma non terminerebbe: ciclo infinito
  • 29. Esempio while – Terminazione da utente #include <stdio.h> #include <stdlib.h> int main() { printf("immetti un intero,n"); printf("sara' stampato il suo successore.n"); printf("123 per terminaren"); int x; scanf("%d", &x); while( x != 123) { printf("il successore e' %dnnnn", ++x); printf("immetti un intero,n"); printf("sara' stampato il suo successore.n"); printf("123 per terminaren"); scanf("%d", &x); } system("PAUSE"); return 1; }
  • 30. Esercizio while Scrivere un programma che prenda in ingresso un intero positivo e stampi un numero di righe contenenti un asterisco ed il numero di riga nella forma seguente: i. * dove i è il numero di riga. (un numero non positivo per terminare) Esempio Input: 2 Output: 1. * 2. *
  • 31. int main() { printf("immetti un intero,n"); printf("sara' stampato un numero di righe.n"); printf("corrispondenti nella forma i. *n"); printf("dove i e' il numero di riga in ordine crescenten"); printf("(un numero non positivo per terminare)n"); int x; scanf("%d", &x); while( x > 0) { Soluzione int counter = 0; while( x != 0) while { printf("n%d. *", ++counter); x--; } printf("nnnn"); printf("immetti un intero,n"); printf("sara' stampato un numero di righe.n"); printf("corrispondenti nella forma i. *n"); printf("dove i e' il numero di riga in ordine crescenten"); printf("(un numero non positivo per terminare)n"); scanf("%d", &x); } system("PAUSE"); return 1; }
  • 32. il costrutto do-while L'istruzione C "do-while" ha la seguente forma: do Un insieme di istruzioni statement; dopo il do: esso sarà while (expression); eseguito comunque almeno una volta notare i due punti dopo le parentesi
  • 33. Esempio do-while main() { int x = 3; do { printf("x=%dn",x); x--; } while (x > 0); } Il cui output e': x=3 x=2 x=1
  • 34. Istruzione for il for è una istruzione equivalente dal punto di vista concettuale al while. Si tratta di quello che in gergo viene definito “zucchero sintattico” for (expression1; expression2; expression3) statement; {or block of statements} dove expression1 inizializza, expression2 è il test di termine ed expression3 è il modificatore (che puo' anche essere piu' di un semplice incremento).
  • 35. Esempio for main() { int i; for ( i = 0; i < 3; i++) printf(“i = %dn", i); } che genera come output sullo schermo: x=0 x=1 x=2
  • 36. Esercizio for Calcolare con il costrutto for la somma di tutti i numeri da 0 ad n. Con n inserito dall’utente. Si può risolvere con una semplice espressione matematica, quale? Noi, giusto per esercizio, lo facciamo con il for e ringraziamo Gauss in ogni modo.
  • 37. Soluzione for (stupida) int main() { printf("stupido esempio di uso del forn"); printf("Please, enter a positive non zero number:n"); int n; scanf("%d", &n); while(n <= 0) { printf("Please, enter a positive non zero number:n"); scanf("%d", &n); } printf("Thank you.n"); int sum = 0; int i; for(i = n; i > 0; i--) sum += i; printf("the sum of all the integers between 0 and %d, is %dn", n, sum); system("PAUSE"); return 1; }
  • 38. Soluzione (non for) intelligente La somma S dei numeri interi da 0 ad n è n S  (n  1) 2
  • 39. Il comando break Lo abbiamo incontrato nel costrutto switch il comando break serve per controllare i loop. In particolare: esce da un loop o da uno switch
  • 40. Il comando continue il comando break serve per controllare i loop. In particolare: salta una iterazione del loop.
  • 41. Esempio break e continue #include <stdlib.h> #include <stdio.h> int main() { int i; for(i = 0; i < 10; i++) Stampa: { 1 if(i == 3) 2 continue; if(i == 7) 4 break; 5 printf("%dn", i); 6 } system("PAUSE"); return 1; }
  • 42. Esercizio break e continue Si chiede di leggere un valore integer ed elaborarlo in accordo con le seguenti condizioni: Se il valore che abbiamo letto e' negativo, si vuole stampare un messaggio di errore ed abbandonare il loop. Se il valore letto e' maggiore di 100, si vuole ignorarlo e continuare con il successivo valore in input. Se il valore e' 0, dovremo terminare il loop.
  • 43. Soluzione break e continue /* Viene letto un valore intero ed elaborato purchè sia maggiore di 0 e minore di 100 */ while (scanf("%d“, &value) == 1 && value !=0) { if (value < 0) { printf("Valore non ammesson"); break; /* Abbandona il loop */ } if (value > 100) { printf("Valore non ammesson"); continue; /*Torna nuovamente all'inizio del loop */ } /*Elabora il valore letto*/ /*che e' sicuramente tra 0 e 100 */ . . }