SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Abilità Informatiche
Ingegneria Chimica Materiali Ambiente
     Lezione 11 del 26/03/2012




       Prof. Antonino Stelitano
Docente        Antonino Stelitano

Tutor
Lezioni        Lunedì               14:00 – 17:30     aula 16
                                    Lab. Paolo Ercoli – via Tiburtina 205

               Mercoledì            15:45 – 19:00     aula 5
                                    Viale del C. Laurenziano

Ricevimento:   Per appuntamento antonino.stelitano@uniroma1.it

                                    stelitano.a@libero.it

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

Scrivere un programma che legge da standard input un carattere c e
due numeri interi b ed h, e stampa un rettangolo di base b ed
altezza h di caratteri c




           Inserire il carattere da stampare: &

               Inserire base e altezza: 7 3

                          &&&&&&&
                          &&&&&&&
                          &&&&&&&

          Premere un tasto per continuare . . .
Soluzione

  int b, h ,i, j;
      char car;
                                                        while ( i <= h) {
     printf("nInserire il carattere da stampare: ");
                                                          j = 1;
     scanf("%c", &car);
     printf("nInserire base e altezza: ");               while ( j <= b ) {
     scanf("%d%d", &b, &h);                                   printf ("%c", car);
                                                              j = j + 1;
     printf("n");                                         }
     i = 1;
                                                            printf("n");
     while ( i <= h) {
          j = 1;                                            i = i + 1;
          while ( j <= b ) {                            }
                   printf ("%c", car);
                   j = j + 1;
          }
          printf("n");
          i = i + 1;
     }
Qualificatori di tipo

•   tipi di dato primitivi
•   qualificatori di tipo
•   short int
•   int
•   long int
•   unsigned short int
•   short
•   unsigned int
•   unsigned long int
•   byte
•   float
•   double
•   specifiche di conversione per
    gli interi
Tipi di dato primitivi
• Per definire un tipo di dato si deve specificare:
   Dominio: insieme dei possibili valori
    rappresentabili nella memoria del calcolatore
    mediante il tipo di dato primitivo (sempre un
    insieme finito di valori)
   Operazioni: operatori del linguaggio che
    permettono di effettuare operazioni elementari su
    valori del tipo primitivo (Es. +, -, /, *, ecc.)
   Letterali: simboli del linguaggio che definiscono i
    valori del tipo primitivo (Es. 10, 3.14, 'A', true, ecc.)




                                                                6
C: qualificatori di tipo


• Tipi base: char (caratteri), int (interi), float e double
  (reali)
• E’ possibile modificare alcune caratteristiche dei tipi
  base mediante i qualificatori short, long, signed e
  unsigned
• short e long possono modificare il numero di bit
  utilizzato per la rappresentazione
• signed e unsigned possono modificare l’insieme dei
  valori rappresentati
• Esempio:
  long int (interi, intervallo rappresentato include quello
  rappresentato con int)




                                                         7
C: Tipo short int

• Intervallo minimo: [-32767, 32767]
• Intervallo vero: dipende dall'implementazione; è
  specificato da SHRT_MIN e SHRT_MAX in “limits.h”
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 16 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella in complemento a 2
• Nelle dichiarazioni, short int o short
• Specifica di conversione: %hd




                                                     8
C: Tipo int

• Intervallo minimo: [-32767, 32767]
• Intervallo vero: dipende dall'implementazione; è
  specificato da INT_MIN e INT_MAX in “limits.h”; deve
  includere l'intervallo usato per il tipo short int
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 16 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella in complemento a 2
• Nelle dichiarazioni int
• Specifica di conversione: %d




                                                         9
Il tipo di dato int
 Tipo                 int
 Dimensione           32 bit (4 byte)
 Dominio              l'insieme dei numeri interi nell'intervallo [-
                      231,+231-1] (oltre 4 miliardi di valori)
 Operazioni             + somma
                         - sottrazione
                       *    prodotto
                       /    divisione intera
                       % resto della divisione intera
 Letterali            sequenze di cifre che denotano valori del
                      dominio (es. 275930)
int a,b,c;     // Dichiarazione di variabile di tipo int
a = 1;         // Uso di letterali
b = 2;
c = a + b;     // Espressione aritmetica
                                                                       10
C: Tipo long int

• Intervallo minimo: [-2147483647, 2147483647]
• Intervallo vero: dipende dall'implementazione; è
  specificato da LONG_MIN e LONG_MAX in “limits.h”;
  deve includere l'intervallo usato per il tipo int
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 32 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella in complemento a 2
• Nelle dichiarazioni: long int o long
• Specifica di conversione: %ld




                                                      11
Il tipo di dato long

Tipo          long
Dimensione    64 bit (8 byte)
Dominio       l'insieme dei numeri interi nell'intervallo [-
              263,+263-1]
Operazioni      + somma
                 - sottrazione
               *   prodotto
               /   divisione intera
               % resto della divisione intera
Letterali     sequenze di cifre terminate con una l o L che
              denotano valori del dominio
              (es.9000000000L)
     long a,b;       // Dichiarazione di variabile di tipo long
     a = 9000000000L;      // Uso di letterali
     b = a+1;        // Espressione aritmetica
                                                      12
C: Tipo unsigned short int

• Intervallo minimo: [0, 65535]
• Intervallo vero: dipende dall'implementazione, è
  specificato da USHRT_MAX in “limits.h” (valore minimo
  è sempre 0)
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 16 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella posizionale
• Nelle dichiarazioni: unsigned short int o unsigned short
• Specifica di conversione: %hu, %ho (ottale), %hx o
  %hX (esadecimale, lettere minuscole o maiuscole)




                                                       13
Il tipo di dato short

Tipo            short
Dimensione      16 bit (2 byte)
Dominio         l'insieme dei numeri interi nell'intervallo [-
                215,+215-1] = [-32768, 32767]
Operazioni        + somma
                   - sottrazione
                 *      prodotto
                 /      divisione intera
                 % resto della divisione intera
Letterali       sequenze di cifre che denotano valori del
                dominio (es. 22700)
        short a,b; // Dichiarazione di variabile di tipo short
        a = 22700;   // Uso di letterali
        b = a+1;         // Espressione aritmetica
                                                        14
C: Tipo unsigned int

• Intervallo minimo: [0, 65535]
• Intervallo vero: dipende dall'implementazione, è
  specificato da UINT_MAX in “limits.h” (valore minimo è
  sempre 0)
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 16 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella posizionale
• Nelle dichiarazioni: unsigned int o unsigned
• Specifica di conversione: %u, %o (ottale), %x o %X
  (esadecimale, lettere minuscole o maiuscole)




                                                      15
C: Tipo unsigned long int

• Intervallo minimo: [0, 4294967295]
• Intervallo vero: dipende dall'implementazione, è
  specificato da ULONG_MAX in “limits.h” (valore minimo
  è sempre 0)
• Occupazione: dipende dall'implementazione; per
  l'intervallo minimo sono sufficienti 32 bit
• Rappresentazione: dipende dall'implementazione;
  tipicamente, è quella posizionale
• Nelle dichiarazioni: unsigned long int o unsigned long
• Specifica di conversione: %lu, %lo (ottale), %lx o %lX
  (esadecimale, lettere minuscole o maiuscole)




                                                     16
Il tipo di dato byte

Tipo            byte
Dimensione      8 bit (1 byte)
Dominio         l'insieme dei numeri interi nell'intervallo [-
                27,+27-1] = [-128, 127]
Operazioni        + somma
                   - sottrazione
                 *     prodotto
                 /     divisione intera
                 % resto della divisione intera
Letterali       sequenze di cifre che denotano valori del
                dominio (es. 47)
  int a,b,c;    // Dichiarazione di variabile di tipo byte
  a = 1;        // Uso di letterali
  b = a+1;            // Espressione aritmetica
                                                                 17
Il tipo di dato float
 Tipo             float
 Dimensione       32 bit (4 byte)
 Dominio          insieme |min|               1.4012985 * 10-38
                  di 232      |max|           3.4028235 * 10+38
                  numeri
                  reali + e - Precisione      ~7 cifre decimali
 Operazioni       + somma
                  - sottrazione
                   * prodotto
                   / divisione
                  sequenze di cifre con punto decimale
                  terminate con una f (o F) che denotano valori
 Letterali        del dominio (es. 3.14f)
                  rappresentazione in notazione scientifica (es.
                  314E-2f)
                                                             18
Il tipo di dato float




Esempio:
float a; // Dichiarazione di variabile di tipo float
a = 3.14f; // Uso di letterali
a = a*2f; // Espressione aritmetica




                                                       19
Il tipo di dato double

  Tipo         double
  Dimensione   64 bit (8 byte)

  Dominio                         |min|     1.79769313486231570 * 10-308
               insieme di 264
               numeri reali + |max|         2.250738585072014 * 10+308
               e-
                              Precisione    ~ 15 cifre decimali

  Operazioni    +     somma
                 -    sottrazione
                 *    prodotto
                /     divisione
               sequenze di cifre con punto decimale opzionalmente terminate
               con una d o (D), che denotano valori del dominio (Es. 3.14
  Letterali    oppure 3.14d)

               Rap. in not. scientifica (Es. 314E-2 oppure 314E-2d)
Specifiche di conversione per tipi interi



           short int            int         long int

             %hd                %d            %ld


 unsigned short int       unsigned int      unsigned long int

         %hu                   %u                   %lu
         %ho                   %o                   %lo
         %hx                   %x                   %lx
         %hX                   %X                   %lX



                                                           21
C: Operandi interi (1)

• Variabili di uno dei tipi int
• Costanti usate direttamente nelle espressioni
• Esempio: b = 2 * a + 33 * b - c / 19 ;
• Una costante viene specificata con
  segno: + o -, opzionale
  sequenza di cifre: in base 10, 8 (prefisso 0, [0-7]), 16
  (prefisso 0x o 0X, [0-9], [a-f] o [A-F] )
  suffisso: u o U per unsigned, l o L per long
• Esempi: -165438L, 0xFFFFFFFFl, -0765, 0XaAaA1,
  +2147483647L




                                                        22
C: Operandi interi (2)

• Costanti introdotte con #define
• Forma: #define nome valore
• Effetto: ogni occorrenza successiva di nome sarà
  rimpiazzata con valore (qualunque esso sia!)
• Nome: stesse regole date per il nome di variabili
• #define è una direttiva per il compilatore (elaborata dal
  preprocessore a tempo di compilazione)
• Uso tipico: per modificare valori di costanti senza
  interventi pesanti sul testo del programma (si ricompila
  il programma dopo aver aggiornato solo il valore che
  compare nella #define)




                                                        23
C: Tipo di una costante


• Il tipo di una costante intera dipende da come viene
  specificata
• Base 10, senza suffisso: primo tipo possibile tra int,
  long int e unsigned long int
• Base 8 o 16, senza suffisso: primo tipo possibile tra int,
  unsigned int, long int e unsigned long int
• Con suffisso u o U: primo tipo possibile tra unsigned int
  e unsigned long int
• Con suffisso l o L: primo tipo possibile tra long int e
  unsigned long int




                                                         24
C: Operatori aritmetici per interi (1)


• Operatori binari (due operandi): somma (+), sottrazione
  (-), prodotto (*), quoziente (/), resto (%)
• Operatori unari (un operando): segno (+), inversione
  segno (-)
• Attenzione: se il risultato di un'operazione eccede i limiti
  della rappresentazione, il comportamento dipende
  dall'implementazione
• Attenzione: se almeno uno degli operandi è negativo, il
  comportamento di / e % dipende dall'implementazione




                                                          25
C: Operatori di assegnamento

•   Operatore = usato nella forma
    variabile = espressione
•   Operatore +=, -=, *=, /=, %= (indicato qui con op=) usato
    nella forma
    variabile op= espressione
•   Significato
    variabile = variabile op (espressione)
    Esempi:
    a += 3*b + c  a = a + (3*b + c)
    x *= 3 + b - 2*c  x = x * (3 + b - 2*c)




                                                          26
C: Conversione di tipo (1)

• Conversione implicita nel caso di operatori binari utilizzati con
  due operandi di tipo diverso: uno dei due tipi (inferiore) viene
  promosso all'altro (superiore) ed il risultato è del tipo
  superiore
• ESEMPIO di regola (informale)
  oper1 * oper2: se oper1 è double e oper2 è float, oper2
  promosso a double e risultato è double
• Attenzione: a , b float e c double
  a = b + c ; assegnerà il valore double risultato della somma
  ad una variabile float con potenziale perdita di informazione
  (in un assegnamento il tipo della variabile destinazione
  definisce il tipo finale)




                                                            27
C: Conversione di tipo (2)

• Conversione implicita nella chiamata di funzione
• Gli argomenti passati ad una funzione dichiarata con
  prototipo vengono convertiti secondo quanto specificato
  nella dichiarazione con potenziale perdita di informazione
• ESEMPIO: se gli argomenti formali sono float e int, una
  chiamata con argomenti attuali int e float provoca una
  potenziale perdita di informazione




                                                       28
C: Conversione di tipo (3)

• Conversione implicita nella return all'interno di una
  funzione

• In return ( espressione ), il tipo assegnato al valore di
  espressione è quello specificato nella dichiarazione della
  funzione (potenziale perdita di informazione)

• ESEMPIO: b float e c int, tipo di ritorno int return b * c ;
  convertirà il risultato float del prodotto in un int con
  potenziale perdita di informazione




                                                          29
C: Conversione di tipo (4)

• Conversione esplicita di tipo può essere forzata con
  operatore cast

• (tipo) espressione provoca la valutazione di espressione
  come se il risultato dovesse essere assegnato ad una
  variabile del tipo forzato

• ESEMPIO di utilizzazione: conversione tipo argomento
  nella chiamata funzioni di libreria (potrebbero non fare
  uso di dichiarazione tramite prototipo)
• sqrt(( double ) n ) chiamata di sqrt su n int convertito a
  double (valore di n immutato!)




                                                         30
Espressioni che coinvolgono tipi di dato primitivi numerici diversi (1)

 • Vediamo una tabella che descrive il tipo risultante di
   una espressione della forma a+b per ciascuna coppia
   di tipi possibili di a e di b




                                                               31
Espressioni che coinvolgono tipi di dato primitivi numerici diversi (2)



  a+b      byte b short b        int b    long b      float b double b
byte a     byte      short       int      long        float      double

short a    short     short       int      long        float      double
int b      int       int         int      long        float      double
long b     long      long        long     long        float      double
float b    float     float       float    float       float      double

double b double double           double double        double     double




                                                                    32
Assegnazioni fra tipi di dato primitivi numerici diversi (1)


 • Un valore di un tipo di dato non può essere assegnato
   ad una variabile di un tipo di dato con minor dimensione,
   altrimenti si rischia perdita di precisione
   dell'informazione.
 • Un valore reale non può essere assegnato ad una
   variabile intera.
   int a; long b; a = b;
   Errore: un valore long non può essere assegnato ad
   una variabile int
   int a; float b; a = b;
   Errore: un valore float non può essere assegnato ad
   una variabile int


                                                               33
Assegnazioni fra tipi di dato primitivi numerici diversi (2)


   a=b      byte b   short b   int b     long b    float b     double b

byte a      OK       ERRORE    ERRORE     ERRORE    ERRORE     ERRORE


short a     OK       OK        ERRORE     ERRORE    ERRORE     ERRORE


int b       OK       OK        OK         ERRORE    ERRORE     ERRORE

long b      OK       OK        OK        OK        ERRORE      ERRORE


float b     OK       OK        OK        OK        OK          ERRORE

double b OK          OK        OK        OK        OK          OK


                                                                34
Qualche esercizio …
Esercizio 1
Scrivere un programma che, letta da stdin una sequenza di caratteri terminata da
invio, per ciascun carattere della sequenza esegue la seguente azione:
- se il carattere è una lettera minuscola stampa su stdout la corrispondente lettera
maiuscola
- se il carattere è una lettera maiuscola stampa su stdout la corrispondente lettera
minuscola
- in tutti gli altri casi stampa uno spazio


Nella rappresentazione ASCII
    -le lettere maiuscole hanno codici compresi tra 65 (‘A’) e 90 (‘Z’)
    -le lettere minuscole hanno codici compresi tra 97 (‘a’) e 122 (‘z’)


             Inserire una sequenza di caratteri terminata da
                                  invio:
                               abc12.Ief2g
                               ABC   iEF G
                  Premere un tasto per continuare . . .
Soluzione 1
char carattere;

printf("nInserire una sequenza di caratteri terminata da invio: n");
scanf("%c", &carattere);

while ( carattere != 'n' ) {
    if ( carattere >= 65 && carattere <= 90 ) /* lettera maiuscola */
                      printf ("%c", carattere + 32);
    else if ( carattere >= 97 && carattere <= 122 ) /* lettera minuscola */
                      printf ("%c", carattere -32);
    else
             printf ("%c", ' ');
    scanf("%c", &carattere);
}
Esercizio 2
Scrivere un programma che legge da stdin un carattere c e due interi b ed h
e stampa—utilizzando un "ciclo for"—un rettangolo di base b ed altezza h
di caratteri c, come specificato in figura
Se c = 'A', b = 5, h = 3, il risultato sarà

AAAAA
AAAAA
AAAAA

Usare una prima scanf per il carattere c ed una seconda per i due interi b ed
h
Soluzione 2
 int base , altezza , i , j ;
 char car ;

 printf( "Inserire un carattere:n" ) ;
 scanf( "%c" , &car ) ;

 printf( "Inserire base rettangolo (intero >= 1):n" ) ;
 scanf( "%d" , &base ) ;

 printf( "Inserire altezza rettangolo (intero >= 1):n" ) ;
 scanf( "%d" , &altezza ) ;

 for ( i = 1 ; i <= altezza ; i = i+1 )
 {
   for ( j = 1 ; j <= base ; j = j+1 )
       printf( "%c" , car ) ;
   printf( "n" ) ;
 }
Esercizio 3
  Scrivere un programma C che legga da stdin una sequenza di
  numeri positivi la cui lunghezza non è nota a priori, terminata da
  un numero negativo. Per ogni numero letto il programma deve
  stampare su stdout la media di tutti i numeri letti fino a quel
  momento.

Inserisci un numero positivo (o negativo per terminare): 2.2
             Media attuale (1 numero/i): 2.200000
Inserisci un numero positivo (o negativo per terminare): 3.3
             Media attuale (2 numero/i): 2.750000
Inserisci un numero positivo (o negativo per terminare): 5.5
             Media attuale (3 numero/i): 3.666667
 Inserisci un numero positivo (o negativo per terminare): 0
             Media attuale (4 numero/i): 2.750000
 Inserisci un numero positivo (o negativo per terminare): -1
            Premere un tasto per continuare . . .
Soluzione 3

int i = 1;
float media, num, somma = 0;

printf ("Inserisci un numero positivo (o negativo per terminare): ");
scanf("%f",&num);
while (num >= 0)
{
    somma = somma + num;
    media = somma/i;
    printf ("Media attuale (%d numero/i): %fn", i, media);
    printf ("Inserisci un numero positivo (o negativo per terminare): ");
    scanf("%f",&num);
    i++;
}
Esercizio 4
Leggere da stdin una sequenza di 0 e 1 terminata da 2
(acquisire i valori uno per volta) e stampare la lunghezza
della più lunga sottosequenza di soli 0 presente nella
sequenza letta

Esempio: per la sequenza
0010001111002
la risposta cercata è 3
Algoritmo Esercizio 4
Variabili utilizzate (tipo intero):
bit: valore letto, contatore: numero di 0 accumulati lmax: massima
lunghezza sottosequenza di 0

•contatore=0; lmax=0 (inizializzazione)‫‏‬
•leggi un numero (valore registrato in bit)‫‏‬
•finché bit è diverso da 2
        se bit è pari a 0:
             incrementa contatore
             se contatore > lmax: lmax=contatore
        altrimenti
             contatore=0
        leggi un altro numero
•stampa lmax
Soluzione 4
int bit, cont = 0, maxlung = 0;
printf("Inserisci una sequenza di 0 e 1 terminata da 2n");
scanf("%d", &bit);

while ( bit!=2)
{
  if ( bit == 0)
  {
     cont = cont + 1;
     if (cont > maxlung)
        maxlung = cont;
  }
  else
     cont = 0;
  scanf("%d", &bit);
}
printf("La lunghezza della piu' lunga sottosequenza di 0 e' %dn", maxlung);
Esercizio 5
Un intero N > 1 è detto primo se i suoi unici divisori sono 1 e N
Scrivere un programma che legge da stdin un intero e determina
se è primo

Algoritmo (inefficiente): provare se tra i numeri compresi tra 2 e N-
1 c’è un divisore di N
Algoritmo(inefficiente) Esercizio 5

Variabili utilizzate (tipo intero):
numero: valore letto, provadiv: possibile divisore di numero,
trovatodiv: diventa vero (1) se si trova un divisore di numero

•provadiv=2; trovatodiv=0 (inizializzazione)‫‏‬
•leggi valore (registrato in numero)‫‏‬
•finché provadiv < numero
      – se provadiv divide numero: trovato=1
      – provadiv=provadiv+1
•se trovato=1: numero non è primo
  altrimenti: numero è primo
Soluzione 5
int numero, provadiv = 2, trovatodiv = 0;
printf ("Inserire un numero intero maggiore di uno: n");
scanf ("%d",&numero);

while (provadiv < numero)
{
   if ((numero % provadiv) == 0)
      trovatodiv = 1;
   provadiv = provadiv + 1;
}
if (trovatodiv==0)
   printf("Il numero %d e' un numero primon", numero);
else
   printf("nIl numero %d non e' un numero primon", numero);
Esercizio 6
Scrivere un programma che, letti da stdin un intero positivo n e
un numeri reale x, calcola lo sviluppo di Taylor di ordine n della
funzione ex, dato dalla seguente formula:




  Calcolo dello sviluppo di Taylor di ordine n di e(x)
                     Inserire x: 1.5
                      Inserire n: 6
                         4.477539
          Premere un tasto per continuare . . .
Soluzione 6

float x,num=1,risultato=1,den=1; int i=1,n;
printf("Calcolo dello sviluppo di Taylor di ordine n di e(x)n");
printf("Inserire x: ");
scanf("%f",&x);
printf("Inserire n: ");
scanf("%d",&n);

for (i = 1; i <= n; i++)
{
   num = num*x;
   den = den * i;
   risultato = risultato + (num/den);
 }
 printf("%fn",risultato);

Weitere ähnliche Inhalte

Was ist angesagt?

03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 
Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e RiferimentiIlio Catallo
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamicaguest60e9511
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in C++Ilio Catallo
 
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
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e FileMajong DevJfu
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
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
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioniPiero Fraternali
 

Was ist angesagt? (20)

03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e Riferimenti
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
Corso c++
Corso c++Corso c++
Corso c++
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
Gestione della memoria in C++
Gestione della memoria in C++Gestione della memoria in C++
Gestione della memoria in 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
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
3 Linguaggioc
3   Linguaggioc3   Linguaggioc
3 Linguaggioc
 
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
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni
 

Andere mochten auch

Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 
Styrketræning i det friRød team 5
Styrketræning i det friRød team 5Styrketræning i det friRød team 5
Styrketræning i det friRød team 5lenepeters
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)STELITANO
 
Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2STELITANO
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Styrketræning i det fri Rød team4
Styrketræning i det fri Rød team4Styrketræning i det fri Rød team4
Styrketræning i det fri Rød team4lenepeters
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Styrketræning i det fri Rød team 2
Styrketræning i det fri Rød team 2Styrketræning i det fri Rød team 2
Styrketræning i det fri Rød team 2lenepeters
 

Andere mochten auch (10)

Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 
Styrketræning i det friRød team 5
Styrketræning i det friRød team 5Styrketræning i det friRød team 5
Styrketræning i det friRød team 5
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Risultati
RisultatiRisultati
Risultati
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)
 
Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Styrketræning i det fri Rød team4
Styrketræning i det fri Rød team4Styrketræning i det fri Rød team4
Styrketræning i det fri Rød team4
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Styrketræning i det fri Rød team 2
Styrketræning i det fri Rød team 2Styrketræning i det fri Rød team 2
Styrketræning i det fri Rød team 2
 

Ähnlich wie Lezione 11 (26 marzo 2012)

Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdfPasqualeRuocco5
 
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
 
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
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterativeguest60e9511
 
ECDL modulo 1 ud1: algoritmi rappr informazione
ECDL modulo 1 ud1: algoritmi rappr informazioneECDL modulo 1 ud1: algoritmi rappr informazione
ECDL modulo 1 ud1: algoritmi rappr informazioneFabio Cantaro
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoMajong DevJfu
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
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
 

Ähnlich wie Lezione 11 (26 marzo 2012) (20)

Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
 
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
 
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
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
ECDL modulo 1 ud1: algoritmi rappr informazione
ECDL modulo 1 ud1: algoritmi rappr informazioneECDL modulo 1 ud1: algoritmi rappr informazione
ECDL modulo 1 ud1: algoritmi rappr informazione
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Laboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di datoLaboratorio Programmazione: Visibilita' e tipi di dato
Laboratorio Programmazione: Visibilita' e tipi di dato
 
Visual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec GradoVisual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec Grado
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
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
 

Mehr von STELITANO

Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012STELITANO
 
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 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)STELITANO
 
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 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 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3STELITANO
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)STELITANO
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 

Mehr von STELITANO (18)

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 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 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)
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 

Lezione 11 (26 marzo 2012)

  • 1. Abilità Informatiche Ingegneria Chimica Materiali Ambiente Lezione 11 del 26/03/2012 Prof. Antonino Stelitano
  • 2. Docente Antonino Stelitano Tutor Lezioni Lunedì 14:00 – 17:30 aula 16 Lab. Paolo Ercoli – via Tiburtina 205 Mercoledì 15:45 – 19:00 aula 5 Viale del C. Laurenziano Ricevimento: Per appuntamento antonino.stelitano@uniroma1.it stelitano.a@libero.it Sito web: http://w3.uniroma1.it/IngChim/Ainf
  • 3. Esercizio Scrivere un programma che legge da standard input un carattere c e due numeri interi b ed h, e stampa un rettangolo di base b ed altezza h di caratteri c Inserire il carattere da stampare: & Inserire base e altezza: 7 3 &&&&&&& &&&&&&& &&&&&&& Premere un tasto per continuare . . .
  • 4. Soluzione int b, h ,i, j; char car; while ( i <= h) { printf("nInserire il carattere da stampare: "); j = 1; scanf("%c", &car); printf("nInserire base e altezza: "); while ( j <= b ) { scanf("%d%d", &b, &h); printf ("%c", car); j = j + 1; printf("n"); } i = 1; printf("n"); while ( i <= h) { j = 1; i = i + 1; while ( j <= b ) { } printf ("%c", car); j = j + 1; } printf("n"); i = i + 1; }
  • 5. Qualificatori di tipo • tipi di dato primitivi • qualificatori di tipo • short int • int • long int • unsigned short int • short • unsigned int • unsigned long int • byte • float • double • specifiche di conversione per gli interi
  • 6. Tipi di dato primitivi • Per definire un tipo di dato si deve specificare: Dominio: insieme dei possibili valori rappresentabili nella memoria del calcolatore mediante il tipo di dato primitivo (sempre un insieme finito di valori) Operazioni: operatori del linguaggio che permettono di effettuare operazioni elementari su valori del tipo primitivo (Es. +, -, /, *, ecc.) Letterali: simboli del linguaggio che definiscono i valori del tipo primitivo (Es. 10, 3.14, 'A', true, ecc.) 6
  • 7. C: qualificatori di tipo • Tipi base: char (caratteri), int (interi), float e double (reali) • E’ possibile modificare alcune caratteristiche dei tipi base mediante i qualificatori short, long, signed e unsigned • short e long possono modificare il numero di bit utilizzato per la rappresentazione • signed e unsigned possono modificare l’insieme dei valori rappresentati • Esempio: long int (interi, intervallo rappresentato include quello rappresentato con int) 7
  • 8. C: Tipo short int • Intervallo minimo: [-32767, 32767] • Intervallo vero: dipende dall'implementazione; è specificato da SHRT_MIN e SHRT_MAX in “limits.h” • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 16 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella in complemento a 2 • Nelle dichiarazioni, short int o short • Specifica di conversione: %hd 8
  • 9. C: Tipo int • Intervallo minimo: [-32767, 32767] • Intervallo vero: dipende dall'implementazione; è specificato da INT_MIN e INT_MAX in “limits.h”; deve includere l'intervallo usato per il tipo short int • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 16 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella in complemento a 2 • Nelle dichiarazioni int • Specifica di conversione: %d 9
  • 10. Il tipo di dato int Tipo int Dimensione 32 bit (4 byte) Dominio l'insieme dei numeri interi nell'intervallo [- 231,+231-1] (oltre 4 miliardi di valori) Operazioni + somma - sottrazione * prodotto / divisione intera % resto della divisione intera Letterali sequenze di cifre che denotano valori del dominio (es. 275930) int a,b,c; // Dichiarazione di variabile di tipo int a = 1; // Uso di letterali b = 2; c = a + b; // Espressione aritmetica 10
  • 11. C: Tipo long int • Intervallo minimo: [-2147483647, 2147483647] • Intervallo vero: dipende dall'implementazione; è specificato da LONG_MIN e LONG_MAX in “limits.h”; deve includere l'intervallo usato per il tipo int • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 32 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella in complemento a 2 • Nelle dichiarazioni: long int o long • Specifica di conversione: %ld 11
  • 12. Il tipo di dato long Tipo long Dimensione 64 bit (8 byte) Dominio l'insieme dei numeri interi nell'intervallo [- 263,+263-1] Operazioni + somma - sottrazione * prodotto / divisione intera % resto della divisione intera Letterali sequenze di cifre terminate con una l o L che denotano valori del dominio (es.9000000000L) long a,b; // Dichiarazione di variabile di tipo long a = 9000000000L; // Uso di letterali b = a+1; // Espressione aritmetica 12
  • 13. C: Tipo unsigned short int • Intervallo minimo: [0, 65535] • Intervallo vero: dipende dall'implementazione, è specificato da USHRT_MAX in “limits.h” (valore minimo è sempre 0) • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 16 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella posizionale • Nelle dichiarazioni: unsigned short int o unsigned short • Specifica di conversione: %hu, %ho (ottale), %hx o %hX (esadecimale, lettere minuscole o maiuscole) 13
  • 14. Il tipo di dato short Tipo short Dimensione 16 bit (2 byte) Dominio l'insieme dei numeri interi nell'intervallo [- 215,+215-1] = [-32768, 32767] Operazioni + somma - sottrazione * prodotto / divisione intera % resto della divisione intera Letterali sequenze di cifre che denotano valori del dominio (es. 22700) short a,b; // Dichiarazione di variabile di tipo short a = 22700; // Uso di letterali b = a+1; // Espressione aritmetica 14
  • 15. C: Tipo unsigned int • Intervallo minimo: [0, 65535] • Intervallo vero: dipende dall'implementazione, è specificato da UINT_MAX in “limits.h” (valore minimo è sempre 0) • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 16 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella posizionale • Nelle dichiarazioni: unsigned int o unsigned • Specifica di conversione: %u, %o (ottale), %x o %X (esadecimale, lettere minuscole o maiuscole) 15
  • 16. C: Tipo unsigned long int • Intervallo minimo: [0, 4294967295] • Intervallo vero: dipende dall'implementazione, è specificato da ULONG_MAX in “limits.h” (valore minimo è sempre 0) • Occupazione: dipende dall'implementazione; per l'intervallo minimo sono sufficienti 32 bit • Rappresentazione: dipende dall'implementazione; tipicamente, è quella posizionale • Nelle dichiarazioni: unsigned long int o unsigned long • Specifica di conversione: %lu, %lo (ottale), %lx o %lX (esadecimale, lettere minuscole o maiuscole) 16
  • 17. Il tipo di dato byte Tipo byte Dimensione 8 bit (1 byte) Dominio l'insieme dei numeri interi nell'intervallo [- 27,+27-1] = [-128, 127] Operazioni + somma - sottrazione * prodotto / divisione intera % resto della divisione intera Letterali sequenze di cifre che denotano valori del dominio (es. 47) int a,b,c; // Dichiarazione di variabile di tipo byte a = 1; // Uso di letterali b = a+1; // Espressione aritmetica 17
  • 18. Il tipo di dato float Tipo float Dimensione 32 bit (4 byte) Dominio insieme |min| 1.4012985 * 10-38 di 232 |max| 3.4028235 * 10+38 numeri reali + e - Precisione ~7 cifre decimali Operazioni + somma - sottrazione * prodotto / divisione sequenze di cifre con punto decimale terminate con una f (o F) che denotano valori Letterali del dominio (es. 3.14f) rappresentazione in notazione scientifica (es. 314E-2f) 18
  • 19. Il tipo di dato float Esempio: float a; // Dichiarazione di variabile di tipo float a = 3.14f; // Uso di letterali a = a*2f; // Espressione aritmetica 19
  • 20. Il tipo di dato double Tipo double Dimensione 64 bit (8 byte) Dominio |min| 1.79769313486231570 * 10-308 insieme di 264 numeri reali + |max| 2.250738585072014 * 10+308 e- Precisione ~ 15 cifre decimali Operazioni + somma - sottrazione * prodotto / divisione sequenze di cifre con punto decimale opzionalmente terminate con una d o (D), che denotano valori del dominio (Es. 3.14 Letterali oppure 3.14d) Rap. in not. scientifica (Es. 314E-2 oppure 314E-2d)
  • 21. Specifiche di conversione per tipi interi short int int long int %hd %d %ld unsigned short int unsigned int unsigned long int %hu %u %lu %ho %o %lo %hx %x %lx %hX %X %lX 21
  • 22. C: Operandi interi (1) • Variabili di uno dei tipi int • Costanti usate direttamente nelle espressioni • Esempio: b = 2 * a + 33 * b - c / 19 ; • Una costante viene specificata con segno: + o -, opzionale sequenza di cifre: in base 10, 8 (prefisso 0, [0-7]), 16 (prefisso 0x o 0X, [0-9], [a-f] o [A-F] ) suffisso: u o U per unsigned, l o L per long • Esempi: -165438L, 0xFFFFFFFFl, -0765, 0XaAaA1, +2147483647L 22
  • 23. C: Operandi interi (2) • Costanti introdotte con #define • Forma: #define nome valore • Effetto: ogni occorrenza successiva di nome sarà rimpiazzata con valore (qualunque esso sia!) • Nome: stesse regole date per il nome di variabili • #define è una direttiva per il compilatore (elaborata dal preprocessore a tempo di compilazione) • Uso tipico: per modificare valori di costanti senza interventi pesanti sul testo del programma (si ricompila il programma dopo aver aggiornato solo il valore che compare nella #define) 23
  • 24. C: Tipo di una costante • Il tipo di una costante intera dipende da come viene specificata • Base 10, senza suffisso: primo tipo possibile tra int, long int e unsigned long int • Base 8 o 16, senza suffisso: primo tipo possibile tra int, unsigned int, long int e unsigned long int • Con suffisso u o U: primo tipo possibile tra unsigned int e unsigned long int • Con suffisso l o L: primo tipo possibile tra long int e unsigned long int 24
  • 25. C: Operatori aritmetici per interi (1) • Operatori binari (due operandi): somma (+), sottrazione (-), prodotto (*), quoziente (/), resto (%) • Operatori unari (un operando): segno (+), inversione segno (-) • Attenzione: se il risultato di un'operazione eccede i limiti della rappresentazione, il comportamento dipende dall'implementazione • Attenzione: se almeno uno degli operandi è negativo, il comportamento di / e % dipende dall'implementazione 25
  • 26. C: Operatori di assegnamento • Operatore = usato nella forma variabile = espressione • Operatore +=, -=, *=, /=, %= (indicato qui con op=) usato nella forma variabile op= espressione • Significato variabile = variabile op (espressione) Esempi: a += 3*b + c  a = a + (3*b + c) x *= 3 + b - 2*c  x = x * (3 + b - 2*c) 26
  • 27. C: Conversione di tipo (1) • Conversione implicita nel caso di operatori binari utilizzati con due operandi di tipo diverso: uno dei due tipi (inferiore) viene promosso all'altro (superiore) ed il risultato è del tipo superiore • ESEMPIO di regola (informale) oper1 * oper2: se oper1 è double e oper2 è float, oper2 promosso a double e risultato è double • Attenzione: a , b float e c double a = b + c ; assegnerà il valore double risultato della somma ad una variabile float con potenziale perdita di informazione (in un assegnamento il tipo della variabile destinazione definisce il tipo finale) 27
  • 28. C: Conversione di tipo (2) • Conversione implicita nella chiamata di funzione • Gli argomenti passati ad una funzione dichiarata con prototipo vengono convertiti secondo quanto specificato nella dichiarazione con potenziale perdita di informazione • ESEMPIO: se gli argomenti formali sono float e int, una chiamata con argomenti attuali int e float provoca una potenziale perdita di informazione 28
  • 29. C: Conversione di tipo (3) • Conversione implicita nella return all'interno di una funzione • In return ( espressione ), il tipo assegnato al valore di espressione è quello specificato nella dichiarazione della funzione (potenziale perdita di informazione) • ESEMPIO: b float e c int, tipo di ritorno int return b * c ; convertirà il risultato float del prodotto in un int con potenziale perdita di informazione 29
  • 30. C: Conversione di tipo (4) • Conversione esplicita di tipo può essere forzata con operatore cast • (tipo) espressione provoca la valutazione di espressione come se il risultato dovesse essere assegnato ad una variabile del tipo forzato • ESEMPIO di utilizzazione: conversione tipo argomento nella chiamata funzioni di libreria (potrebbero non fare uso di dichiarazione tramite prototipo) • sqrt(( double ) n ) chiamata di sqrt su n int convertito a double (valore di n immutato!) 30
  • 31. Espressioni che coinvolgono tipi di dato primitivi numerici diversi (1) • Vediamo una tabella che descrive il tipo risultante di una espressione della forma a+b per ciascuna coppia di tipi possibili di a e di b 31
  • 32. Espressioni che coinvolgono tipi di dato primitivi numerici diversi (2) a+b byte b short b int b long b float b double b byte a byte short int long float double short a short short int long float double int b int int int long float double long b long long long long float double float b float float float float float double double b double double double double double double 32
  • 33. Assegnazioni fra tipi di dato primitivi numerici diversi (1) • Un valore di un tipo di dato non può essere assegnato ad una variabile di un tipo di dato con minor dimensione, altrimenti si rischia perdita di precisione dell'informazione. • Un valore reale non può essere assegnato ad una variabile intera. int a; long b; a = b; Errore: un valore long non può essere assegnato ad una variabile int int a; float b; a = b; Errore: un valore float non può essere assegnato ad una variabile int 33
  • 34. Assegnazioni fra tipi di dato primitivi numerici diversi (2) a=b byte b short b int b long b float b double b byte a OK ERRORE ERRORE ERRORE ERRORE ERRORE short a OK OK ERRORE ERRORE ERRORE ERRORE int b OK OK OK ERRORE ERRORE ERRORE long b OK OK OK OK ERRORE ERRORE float b OK OK OK OK OK ERRORE double b OK OK OK OK OK OK 34
  • 36. Esercizio 1 Scrivere un programma che, letta da stdin una sequenza di caratteri terminata da invio, per ciascun carattere della sequenza esegue la seguente azione: - se il carattere è una lettera minuscola stampa su stdout la corrispondente lettera maiuscola - se il carattere è una lettera maiuscola stampa su stdout la corrispondente lettera minuscola - in tutti gli altri casi stampa uno spazio Nella rappresentazione ASCII -le lettere maiuscole hanno codici compresi tra 65 (‘A’) e 90 (‘Z’) -le lettere minuscole hanno codici compresi tra 97 (‘a’) e 122 (‘z’) Inserire una sequenza di caratteri terminata da invio: abc12.Ief2g ABC iEF G Premere un tasto per continuare . . .
  • 37. Soluzione 1 char carattere; printf("nInserire una sequenza di caratteri terminata da invio: n"); scanf("%c", &carattere); while ( carattere != 'n' ) { if ( carattere >= 65 && carattere <= 90 ) /* lettera maiuscola */ printf ("%c", carattere + 32); else if ( carattere >= 97 && carattere <= 122 ) /* lettera minuscola */ printf ("%c", carattere -32); else printf ("%c", ' '); scanf("%c", &carattere); }
  • 38. Esercizio 2 Scrivere un programma che legge da stdin un carattere c e due interi b ed h e stampa—utilizzando un "ciclo for"—un rettangolo di base b ed altezza h di caratteri c, come specificato in figura Se c = 'A', b = 5, h = 3, il risultato sarà AAAAA AAAAA AAAAA Usare una prima scanf per il carattere c ed una seconda per i due interi b ed h
  • 39. Soluzione 2 int base , altezza , i , j ; char car ; printf( "Inserire un carattere:n" ) ; scanf( "%c" , &car ) ; printf( "Inserire base rettangolo (intero >= 1):n" ) ; scanf( "%d" , &base ) ; printf( "Inserire altezza rettangolo (intero >= 1):n" ) ; scanf( "%d" , &altezza ) ; for ( i = 1 ; i <= altezza ; i = i+1 ) { for ( j = 1 ; j <= base ; j = j+1 ) printf( "%c" , car ) ; printf( "n" ) ; }
  • 40. Esercizio 3 Scrivere un programma C che legga da stdin una sequenza di numeri positivi la cui lunghezza non è nota a priori, terminata da un numero negativo. Per ogni numero letto il programma deve stampare su stdout la media di tutti i numeri letti fino a quel momento. Inserisci un numero positivo (o negativo per terminare): 2.2 Media attuale (1 numero/i): 2.200000 Inserisci un numero positivo (o negativo per terminare): 3.3 Media attuale (2 numero/i): 2.750000 Inserisci un numero positivo (o negativo per terminare): 5.5 Media attuale (3 numero/i): 3.666667 Inserisci un numero positivo (o negativo per terminare): 0 Media attuale (4 numero/i): 2.750000 Inserisci un numero positivo (o negativo per terminare): -1 Premere un tasto per continuare . . .
  • 41. Soluzione 3 int i = 1; float media, num, somma = 0; printf ("Inserisci un numero positivo (o negativo per terminare): "); scanf("%f",&num); while (num >= 0) { somma = somma + num; media = somma/i; printf ("Media attuale (%d numero/i): %fn", i, media); printf ("Inserisci un numero positivo (o negativo per terminare): "); scanf("%f",&num); i++; }
  • 42. Esercizio 4 Leggere da stdin una sequenza di 0 e 1 terminata da 2 (acquisire i valori uno per volta) e stampare la lunghezza della più lunga sottosequenza di soli 0 presente nella sequenza letta Esempio: per la sequenza 0010001111002 la risposta cercata è 3
  • 43. Algoritmo Esercizio 4 Variabili utilizzate (tipo intero): bit: valore letto, contatore: numero di 0 accumulati lmax: massima lunghezza sottosequenza di 0 •contatore=0; lmax=0 (inizializzazione)‫‏‬ •leggi un numero (valore registrato in bit)‫‏‬ •finché bit è diverso da 2 se bit è pari a 0: incrementa contatore se contatore > lmax: lmax=contatore altrimenti contatore=0 leggi un altro numero •stampa lmax
  • 44. Soluzione 4 int bit, cont = 0, maxlung = 0; printf("Inserisci una sequenza di 0 e 1 terminata da 2n"); scanf("%d", &bit); while ( bit!=2) { if ( bit == 0) { cont = cont + 1; if (cont > maxlung) maxlung = cont; } else cont = 0; scanf("%d", &bit); } printf("La lunghezza della piu' lunga sottosequenza di 0 e' %dn", maxlung);
  • 45. Esercizio 5 Un intero N > 1 è detto primo se i suoi unici divisori sono 1 e N Scrivere un programma che legge da stdin un intero e determina se è primo Algoritmo (inefficiente): provare se tra i numeri compresi tra 2 e N- 1 c’è un divisore di N
  • 46. Algoritmo(inefficiente) Esercizio 5 Variabili utilizzate (tipo intero): numero: valore letto, provadiv: possibile divisore di numero, trovatodiv: diventa vero (1) se si trova un divisore di numero •provadiv=2; trovatodiv=0 (inizializzazione)‫‏‬ •leggi valore (registrato in numero)‫‏‬ •finché provadiv < numero – se provadiv divide numero: trovato=1 – provadiv=provadiv+1 •se trovato=1: numero non è primo altrimenti: numero è primo
  • 47. Soluzione 5 int numero, provadiv = 2, trovatodiv = 0; printf ("Inserire un numero intero maggiore di uno: n"); scanf ("%d",&numero); while (provadiv < numero) { if ((numero % provadiv) == 0) trovatodiv = 1; provadiv = provadiv + 1; } if (trovatodiv==0) printf("Il numero %d e' un numero primon", numero); else printf("nIl numero %d non e' un numero primon", numero);
  • 48. Esercizio 6 Scrivere un programma che, letti da stdin un intero positivo n e un numeri reale x, calcola lo sviluppo di Taylor di ordine n della funzione ex, dato dalla seguente formula: Calcolo dello sviluppo di Taylor di ordine n di e(x) Inserire x: 1.5 Inserire n: 6 4.477539 Premere un tasto per continuare . . .
  • 49. Soluzione 6 float x,num=1,risultato=1,den=1; int i=1,n; printf("Calcolo dello sviluppo di Taylor di ordine n di e(x)n"); printf("Inserire x: "); scanf("%f",&x); printf("Inserire n: "); scanf("%d",&n); for (i = 1; i <= n; i++) { num = num*x; den = den * i; risultato = risultato + (num/den); } printf("%fn",risultato);