SlideShare a Scribd company logo
1 of 40
Download to read offline
Cos’è un vettore ?

Un vettore è un insieme finito di N variabili dello stesso tipo,
ognuna identificata da un indice intero compreso fra 0 e N-1
Formato:
tipo nome_vettore[numberOfElements];


Quando si definisce un vettore, bisogna
specificarne:
       il tipo dei suoi elementi;         c[0]
       il nome;                           c[1]
       il numero dei suoi elementi;       c[2]
                                          c[3]
                                          c[4]
  Esempio:                                c[5]
     int c[12];                           c[6]
     float mio_vettore[3284];             c[7]
                                          c[8]
                                          c[9]
                                          c[10]
                                          c[11]
Array multidimensionali

  Non è un nuovo tipo, ma si definiscono come vettori di
vettori

Dichiarazione di vettori multidimensionali
<tipo-elementi> <nome-array> [lung_1][lung_2]…[lungN];

  Per ogni dimensione i l’indice va da 0 a lung_i-1

Esempio:
int mat[3][4];   array bidimensionale di 3 righe per 4
colonne
                     (ovvero matrice 3 X 4)
Array multidimensionali
Accesso agli elementi di una matrice

Esempio:
int i, mat[3][4];
...
i = mat[0][0]; //elemento di riga 0 e colonna 0 (primo elemento)
mat[2][3] = 24; //elemento di riga 2 e colonna 3 (ultimo elemento)
mat[2][1] = mat[0][0] * mat[1][3];



• Come per i vettori, l’unica operazione possibile sulle
matrici è
  l’accesso agli elementi tramite l’operatore [ ]
Esempio: lettura e stampa di matrice
#include <stdio.h>
#define RIG 2
#define COL 3
int main() {
   int mat[RIG][COL];
   int i, j;
   /* lettura matrice */
      printf("Lettura matrice %d x %d;n", RIG, COL);
            for (i = 0; i < RIG; i++)
               for (j = 0; j < COL; j++)
                 scanf("%d", &mat[i][j]);
   /* stampa matrice */
      printf("La matrice e':n");
           for (i = 0; i < RIG; i++) {
              for (j = 0; j < COL; j++)
                   printf("%6d ", mat[i][j]);
                printf("n");
            }
       system(“PAUSE”);
       return 0;
    }
Tipi strutturati in C

Strutture (Record)
Strutture
• Una struttura è una collezione di variabili finita
non
necessariamente dello stesso tipo, ognuna identificata
da
un nome
•Una struttura (o record) serve quindi per aggregare
elementi
(anche di tipo diverso) sotto un unico nome.

Sintassi

   struct <etichetta> {
      <definizione-di-variabili>
   };
Definizione di strutture
Esempio di definizione di struttura:

  struct persona
        { char nome[20];
          int età;
          float stipendio;
         };


• ATTENZIONE:   La definizione della struttura non provoca
allocazione di memoria, ma introduce un nuovo tipo di dato
Dichiarazione di variabili
struttura
                             p1 e p2 sono variabili di tipo struct persona


Esempio:                                    elenco è un array di 50 elementi di
                                                    tipo struct persona
struct persona p1, p2;
struct persona elenco[50];

• Una variabile di tipo struttura può essere dichiarata contestualmente
alla
   definizione della struttura.
• In questo caso si può anche omettere l’etichetta di struttura.
                                    d1 e d2 sono variabili di tipo struct data

struct data {
         int giorno;
         int mese;
         int anno;
} d1,d2;
Campi di una struttura
• devono avere nomi univoci all’interno di una struttura
• strutture diverse possono avere campi con lo stesso nome
• i nomi dei campi possono coincidere con nomi di variabili o funzioni
• possono essere di tipo diverso (semplice o altre strutture)
• un campo di una struttura non può essere del tipo struttura che si
sta                                               Esempi
   definendo                                       corretti

   int x;
   struct a { char x; int y; };
   struct b { int w; float x; };
                                                     ERRORE
   struct s {
       int a;
       struct s next; };
Accesso ai campi di una struttura
• Una volta definita una variabile struttura, si accede ai singoli
  campi mediante la notazione puntata


                                   struct data {
struct punto {                        int giorno, mese, anno;
   int x, y;                       } d1, d2 ;
} p1, p2 ;                         …
…                                  d1.giorno = 25;
p1.x = 10;                         d1.mese = 12;
p1.y = -2;                         d1.anno = 2003;
p2.x = 5;                          printf(“%d-%d-%d”, d1.giorno,
p2.y = 7;                                        d1.mese, d1.anno);



    • Ogni campo si usa come una normale variabile del tipo
      corrispondente a quello del campo
Operazioni sulle strutture
• Si possono assegnare variabili di tipo struttura a variabili
dello
  stesso tipo struttura.
     Esempio:
       struct data d1, d2;
       ...
       d1 = d2;

• Non è possibile effettuare il confronto tra due variabili
di tipo
  struttura.
     Esempio:
       struct data d1, d2;
       if (d1 == d2) ... Errore!
• Esempio: struct card
               {
                 int valore;
                 char seme;
                 };

– La parola chiave struct introduce la definizione della struttura
– card è il nome della struttura ed è usato per dichiarare variabili di
  quel tipo di struttura
– card contiene due membri della struttura: un intero che contiene il
   valore della carta, ed un carattere che contiene l’iniziale del suo
   seme (‘c’, ‘q’, ‘f’, ‘p’)
– I membri della stessa struttura devono avere nomi diversi, mentre
   membri di diverse strutture possono avere lo stesso nome (poi
   capiremo perché).
– Ogni definizione di struttura deve terminare con ;
Esempio
• PROBLEMA: leggere le coordinate di un punto in un
piano e
  modificarle a seconda dell’operazione richiesta
      1. proiezione sull’asse X
      2. proiezione sull’asse Y
      3. traslazione di DX e DY
• Specifica:
      • leggere le coordinate di input e memorizzarle in
      una
          struttura
      • leggere l’operazione richiesta
      • effettuare l’operazione
      • stampare il risultato
Esempio
#include <stdio.h>
main() {
         struct punto{float x,y;} P;
         unsigned int op;
         float Dx, Dy;
         printf("ascissa? "); scanf("%f",&P.x);
         printf("ordinata? "); scanf("%f",&P.y);
         printf("%sn","operazione(0,1,2,3)?"); scanf("%d",&op);
         switch (op) {
                   case 1: P.y=0;break;
                   case 2: P.x=0; break;
                   case 3: printf("%s","Traslazione?”);
                              scanf("%f%f",&Dx,&Dy);
                              P.x=P.x + Dx;
                              P.y=P.y + Dy;
                              break;
                   default: ;
         }
         printf("%sn",“Le nuove coordinate sono ");
         printf("%f %fn",P.x,P.y);
 }
Funzioni in C
Modello cliente/servitore
Servitore:
• Un qualunque ente computazionale capace di nascondere la
  propria organizzazione interna
• presentando ai clienti una precisa interfaccia per lo scambio
  di informazioni

Cliente:
• qualunque ente in grado di invocare uno o più servitori per
  svolgere il proprio compito
Comunicazione cliente/servitore

•Lo scambio di informazioni tra un cliente e un servitore
può avvenire

  in modo esplicito tramite le interfacce stabilite dal
servitore

   in modo implicito tramite aree-dati accessibili ad
entrambi,
    ossia l’ambiente condiviso
Interfaccia di una funzione
•L’interfaccia (o prototipo) di una funzione comprende

             nome della funzione
            lista dei parametri
             tipo del valore da essa denotato

• Esplicita il contratto di servizio fra cliente e servitore

•Cliente e servitore comunicano quindi mediante
  i parametri trasmessi dal cliente al servitore all’atto della chiamata
   il valore restituito dal servitore al cliente
Funzioni: esempio C

int max (int x, int y ){
if (x>y) return x ;
else return y;
}

• Il simbolo max denota il nome della funzione

• Le variabili intere x e y sono i parametri della funzione

• Il valore restituito è un intero int
Comunicazione cliente/servitore

• Il cliente passa informazioni al servitore mediante una serie di
   parametri


Parametri formali:
  sono specificati nella dichiarazione del servitore
  esplicitano il contratto fra servitore e cliente
  indicano che cosa il servitore si aspetta dal cliente

Parametri attuali:
  sono trasmessi dal cliente all’atto della chiamata
  devono corrispondere ai parametri formali in numero,
  posizione e tipo
Funzioni: esempio parametri
Comunicazione cliente/servitore

Legame tra parametri attuali e parametri
formali:
• effettuato al momento della chiamata, in
modo
  dinamico

Tale legame:
  vale solo per l’invocazione corrente
  vale solo per la durata della funzione
Esempio




          All’atto di questa
          chiamata della funzione,
          si effettua un legame tra:
          xez
          ye4
Esempio:




           All’atto della chiamata
           della funzione si effettua
           il legame tra:
            xe5
            yez
Information hiding

• La struttura interna (corpo) di una funzione è
  completamente inaccessibile dall.esterno

• Così facendo si garantisce protezione
  dell’informazione (information hiding)

• Una funzione è accessibile solo attraverso
  la sua interfaccia
Definizione di funzione in C

<tipoValore> <nome>(<parametri-formali>) {

     <corpo>
                                          La forma base è:
 }
                                          return <espressione>;


<parametri-formali>
    o una lista vuota: void
    o una lista di variabili (separate da virgole)
visibili solo entro il corpo della funzione

<tipoValore>
    deve coincidere con il tipo del valore restituito dalla funzione
    Può non esservi valore restituiti, in tal caso il tipo è void
Definizione di funzione in C

 <tipoValore> <nome>(<parametri-formali>) {

       <corpo>
                                            La forma base è:
   }
                                            return <espressione>;

• Nella parte corpo possono essere presenti:
  definizioni e/o dichiarazioni locali (parte dichiarazioni)
  e un insieme di istruzioni (parte istruzioni)

• I dati riferiti nel corpo possono essere costanti, variabili,
  oppure parametri formali

• All'interno del corpo, i parametri formali vengono trattati come variabili
Funzioni: nascita e morte

• All’atto della chiamata:
  l’esecuzione del cliente viene sospesa e il
  controllo passa al servitore

• Il servitore “vive” solo per il tempo necessario a
  svolgere il servizio

• Al termine, il servitore “muore”, e l’esecuzione
  torna al cliente
Chiamata di funzione
• La chiamata di funzione è un.espressione della forma

      <nomefunzione> ( <parametri-attuali> )

• dove:

      <parametri-attuali> ::=
           [ <espressione> ] { , <espressione> }
Funzioni: esempio
         Parametri formali


int max (int x, int y ){
                                    SERVITORE
    if (x>y) return x ;
         else return y;             Definizione
}
                                    della funzione




  main() {
                                    CLIENTE
             int z = 8;
             int m;                 Chiamata
             m = max ( z, 4);
   }
                                    della funzione

                Parametri attuali
Risultato di una funzione
• L’istruzione return provoca la restituzione del
  controllo al cliente, unitamente al valore della
  espressione che la segue.

• Eventuali istruzioni successive alla return non
  saranno mai eseguite


      int max (int x, int y ){
            if (x>y) return x ;
            else return y;
      }
Funzioni: esempio
         Parametri formali


int max (int x, int y ){
                                SERVITORE
    if (x>y) return x ;
         else return y;         Definizione
}
                                della funzione




  main() {
                                CLIENTE
             int z = 8;
             int m;             Chiamata
             m = max ( z, 4);
   }
                                della funzione

                  Risultato
Riassumendo
All’atto dell’invocazione di una funzione:

• si crea una nuova attivazione (istanza) del servitore

• si alloca la memoria per i parametri
  (e le eventuali variabili locali)

• si trasferiscono i parametri al servitore

• si trasferisce il controllo al servitore

• si esegue il codice della funzione
Passaggio dei parametri
In generale, un parametro può essere trasferito dal cliente al servitore:


 • per valore o copia (by value)
        si trasferisce il valore del parametro attuale


 • per riferimento (by reference)
       si trasferisce un riferimento al parametro attuale
Passaggio per valore
• Si trasferisce una copia del valore del parametro attuale




          cliente
Passaggio per valore
• Si trasferisce una copia del valore del parametro attuale
                                                              Valore
                                                           (copiato) di z


                          copia


                                                                    Ogni azione
                                                                    fatta su w è
                                                                    locale al
                                                                    servitore
                                             Istanza del
                                              servitore


       cliente                              servitore
Passaggio per riferimento
• Si trasferisce un riferimento al parametro attuale




          cliente
Passaggio per valore
• Si trasferisce una riferimento al parametro attuale
                                                        Riferimento a z
                                                           (indirizzo)


                        riferimento
                  x
                                                x
                                                                 Ogni azione
                                                                 fatta su w è
                                                                 In realtà
                                                                 fatta sulla
                                             Istanza del
                                                                 variabile z
                                              servitore
                                                                 del cliente


       cliente                               servitore
Passaggio dei parametri in C

• In C, i parametri sono trasferiti sempre e solo
  per valore (by value)

    si trasferisce una copia del parametro attuale, non l’originale
    tale copia è strettamente privata e locale a quel servitore

    il servitore potrebbe quindi alterare il valore ricevuto, senza
    che ciò abbia alcun impatto sul cliente

More Related Content

What's hot

12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatoriMajong DevJfu
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: FunzioniMajong DevJfu
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matriciguest60e9511
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamicaguest60e9511
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioniPiero Fraternali
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2Majong DevJfu
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 

What's hot (20)

12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
R sim rank
R sim rank  R sim rank
R sim rank
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 
07 2 ricorsione
07 2 ricorsione07 2 ricorsione
07 2 ricorsione
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
Array in C++
Array in C++Array in C++
Array in C++
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Dispensa di PL-SQL
Dispensa di PL-SQLDispensa di PL-SQL
Dispensa di PL-SQL
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
primi comandi SQL con Mysql
primi comandi SQL con Mysqlprimi comandi SQL con Mysql
primi comandi SQL con Mysql
 

Viewers also liked

Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisiSTELITANO
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 
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
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)STELITANO
 
Styrketræning i det fri Rød team 1
Styrketræning i det fri Rød team 1Styrketræning i det fri Rød team 1
Styrketræning i det fri Rød team 1lenepeters
 
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
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 

Viewers also liked (9)

Dispenza aloisi
Dispenza aloisiDispenza aloisi
Dispenza aloisi
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 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
 
Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)Esercitazione 2 (29 febbraio 2012)
Esercitazione 2 (29 febbraio 2012)
 
Styrketræning i det fri Rød team 1
Styrketræning i det fri Rød team 1Styrketræning i det fri Rød team 1
Styrketræning i det fri Rød team 1
 
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
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 

Similar to Lezione 10 (21 marzo 2012)2

Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdfdttdigi
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e RiferimentiIlio Catallo
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Linguaggio R, principi e concetti
Linguaggio R, principi e concettiLinguaggio R, principi e concetti
Linguaggio R, principi e concettiVincenzo De Maio
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseFelice Pescatore
 

Similar to Lezione 10 (21 marzo 2012)2 (20)

06 3 struct
06 3 struct06 3 struct
06 3 struct
 
Template
TemplateTemplate
Template
 
Corso c++
Corso c++Corso c++
Corso c++
 
R Vectors
R VectorsR Vectors
R Vectors
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdf
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Puntatori e Riferimenti
Puntatori e RiferimentiPuntatori e Riferimenti
Puntatori e Riferimenti
 
SQL Unità 1 linguaggio DDL; DML, funzioni di aggregazione
SQL Unità 1 linguaggio DDL; DML, funzioni di aggregazioneSQL Unità 1 linguaggio DDL; DML, funzioni di aggregazione
SQL Unità 1 linguaggio DDL; DML, funzioni di aggregazione
 
iOS_course_7
iOS_course_7iOS_course_7
iOS_course_7
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
WSMO Restricted
WSMO RestrictedWSMO Restricted
WSMO Restricted
 
Linguaggio R, principi e concetti
Linguaggio R, principi e concettiLinguaggio R, principi e concetti
Linguaggio R, principi e concetti
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 

More from STELITANO

Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012Soluzione esame a del 13 giugno 2012
Soluzione esame a del 13 giugno 2012STELITANO
 
Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012STELITANO
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)STELITANO
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteSTELITANO
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteSTELITANO
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricercaSTELITANO
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamentiSTELITANO
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettoriSTELITANO
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatoriSTELITANO
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3STELITANO
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)STELITANO
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)STELITANO
 

More from STELITANO (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
 
Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)Lezione 22 (7 maggio 2012)
Lezione 22 (7 maggio 2012)
 
Lezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parteLezione 20 (2 maggio 2012) seconda parte
Lezione 20 (2 maggio 2012) seconda parte
 
Lezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parteLezione 20 (2 maggio 2012) prima parte
Lezione 20 (2 maggio 2012) prima parte
 
Lezione 19 (18 aprile 2012) ricerca
Lezione 19 (18 aprile 2012)   ricercaLezione 19 (18 aprile 2012)   ricerca
Lezione 19 (18 aprile 2012) ricerca
 
Lezione 18 (18 aprile 2012) ordinamenti
Lezione 18 (18 aprile 2012)   ordinamentiLezione 18 (18 aprile 2012)   ordinamenti
Lezione 18 (18 aprile 2012) ordinamenti
 
Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)Lezione 14 (2 aprile 2012)
Lezione 14 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettori
 
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni   memoria - puntatoriLezione 12 (28 marzo 2012) funzioni   memoria - puntatori
Lezione 12 (28 marzo 2012) funzioni memoria - puntatori
 
Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012Soluzione esonero del 4 aprile 2012
Soluzione esonero del 4 aprile 2012
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 
Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3Lezione 10 (21 marzo 2012)3
Lezione 10 (21 marzo 2012)3
 
Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)Lezione 10 (21 marzo 2012)
Lezione 10 (21 marzo 2012)
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 

Lezione 10 (21 marzo 2012)2

  • 1. Cos’è un vettore ? Un vettore è un insieme finito di N variabili dello stesso tipo, ognuna identificata da un indice intero compreso fra 0 e N-1
  • 2. Formato: tipo nome_vettore[numberOfElements]; Quando si definisce un vettore, bisogna specificarne: il tipo dei suoi elementi; c[0] il nome; c[1] il numero dei suoi elementi; c[2] c[3] c[4] Esempio: c[5] int c[12]; c[6] float mio_vettore[3284]; c[7] c[8] c[9] c[10] c[11]
  • 3. Array multidimensionali Non è un nuovo tipo, ma si definiscono come vettori di vettori Dichiarazione di vettori multidimensionali <tipo-elementi> <nome-array> [lung_1][lung_2]…[lungN]; Per ogni dimensione i l’indice va da 0 a lung_i-1 Esempio: int mat[3][4]; array bidimensionale di 3 righe per 4 colonne (ovvero matrice 3 X 4)
  • 4. Array multidimensionali Accesso agli elementi di una matrice Esempio: int i, mat[3][4]; ... i = mat[0][0]; //elemento di riga 0 e colonna 0 (primo elemento) mat[2][3] = 24; //elemento di riga 2 e colonna 3 (ultimo elemento) mat[2][1] = mat[0][0] * mat[1][3]; • Come per i vettori, l’unica operazione possibile sulle matrici è l’accesso agli elementi tramite l’operatore [ ]
  • 5. Esempio: lettura e stampa di matrice #include <stdio.h> #define RIG 2 #define COL 3 int main() { int mat[RIG][COL]; int i, j; /* lettura matrice */ printf("Lettura matrice %d x %d;n", RIG, COL); for (i = 0; i < RIG; i++) for (j = 0; j < COL; j++) scanf("%d", &mat[i][j]); /* stampa matrice */ printf("La matrice e':n"); for (i = 0; i < RIG; i++) { for (j = 0; j < COL; j++) printf("%6d ", mat[i][j]); printf("n"); } system(“PAUSE”); return 0; }
  • 6. Tipi strutturati in C Strutture (Record)
  • 7. Strutture • Una struttura è una collezione di variabili finita non necessariamente dello stesso tipo, ognuna identificata da un nome •Una struttura (o record) serve quindi per aggregare elementi (anche di tipo diverso) sotto un unico nome. Sintassi struct <etichetta> { <definizione-di-variabili> };
  • 8. Definizione di strutture Esempio di definizione di struttura: struct persona { char nome[20]; int età; float stipendio; }; • ATTENZIONE: La definizione della struttura non provoca allocazione di memoria, ma introduce un nuovo tipo di dato
  • 9. Dichiarazione di variabili struttura p1 e p2 sono variabili di tipo struct persona Esempio: elenco è un array di 50 elementi di tipo struct persona struct persona p1, p2; struct persona elenco[50]; • Una variabile di tipo struttura può essere dichiarata contestualmente alla definizione della struttura. • In questo caso si può anche omettere l’etichetta di struttura. d1 e d2 sono variabili di tipo struct data struct data { int giorno; int mese; int anno; } d1,d2;
  • 10. Campi di una struttura • devono avere nomi univoci all’interno di una struttura • strutture diverse possono avere campi con lo stesso nome • i nomi dei campi possono coincidere con nomi di variabili o funzioni • possono essere di tipo diverso (semplice o altre strutture) • un campo di una struttura non può essere del tipo struttura che si sta Esempi definendo corretti int x; struct a { char x; int y; }; struct b { int w; float x; }; ERRORE struct s { int a; struct s next; };
  • 11. Accesso ai campi di una struttura • Una volta definita una variabile struttura, si accede ai singoli campi mediante la notazione puntata struct data { struct punto { int giorno, mese, anno; int x, y; } d1, d2 ; } p1, p2 ; … … d1.giorno = 25; p1.x = 10; d1.mese = 12; p1.y = -2; d1.anno = 2003; p2.x = 5; printf(“%d-%d-%d”, d1.giorno, p2.y = 7; d1.mese, d1.anno); • Ogni campo si usa come una normale variabile del tipo corrispondente a quello del campo
  • 12. Operazioni sulle strutture • Si possono assegnare variabili di tipo struttura a variabili dello stesso tipo struttura. Esempio: struct data d1, d2; ... d1 = d2; • Non è possibile effettuare il confronto tra due variabili di tipo struttura. Esempio: struct data d1, d2; if (d1 == d2) ... Errore!
  • 13. • Esempio: struct card { int valore; char seme; }; – La parola chiave struct introduce la definizione della struttura – card è il nome della struttura ed è usato per dichiarare variabili di quel tipo di struttura – card contiene due membri della struttura: un intero che contiene il valore della carta, ed un carattere che contiene l’iniziale del suo seme (‘c’, ‘q’, ‘f’, ‘p’) – I membri della stessa struttura devono avere nomi diversi, mentre membri di diverse strutture possono avere lo stesso nome (poi capiremo perché). – Ogni definizione di struttura deve terminare con ;
  • 14. Esempio • PROBLEMA: leggere le coordinate di un punto in un piano e modificarle a seconda dell’operazione richiesta 1. proiezione sull’asse X 2. proiezione sull’asse Y 3. traslazione di DX e DY • Specifica: • leggere le coordinate di input e memorizzarle in una struttura • leggere l’operazione richiesta • effettuare l’operazione • stampare il risultato
  • 15. Esempio #include <stdio.h> main() { struct punto{float x,y;} P; unsigned int op; float Dx, Dy; printf("ascissa? "); scanf("%f",&P.x); printf("ordinata? "); scanf("%f",&P.y); printf("%sn","operazione(0,1,2,3)?"); scanf("%d",&op); switch (op) { case 1: P.y=0;break; case 2: P.x=0; break; case 3: printf("%s","Traslazione?”); scanf("%f%f",&Dx,&Dy); P.x=P.x + Dx; P.y=P.y + Dy; break; default: ; } printf("%sn",“Le nuove coordinate sono "); printf("%f %fn",P.x,P.y); }
  • 17. Modello cliente/servitore Servitore: • Un qualunque ente computazionale capace di nascondere la propria organizzazione interna • presentando ai clienti una precisa interfaccia per lo scambio di informazioni Cliente: • qualunque ente in grado di invocare uno o più servitori per svolgere il proprio compito
  • 18. Comunicazione cliente/servitore •Lo scambio di informazioni tra un cliente e un servitore può avvenire in modo esplicito tramite le interfacce stabilite dal servitore in modo implicito tramite aree-dati accessibili ad entrambi, ossia l’ambiente condiviso
  • 19. Interfaccia di una funzione •L’interfaccia (o prototipo) di una funzione comprende nome della funzione lista dei parametri tipo del valore da essa denotato • Esplicita il contratto di servizio fra cliente e servitore •Cliente e servitore comunicano quindi mediante i parametri trasmessi dal cliente al servitore all’atto della chiamata il valore restituito dal servitore al cliente
  • 20. Funzioni: esempio C int max (int x, int y ){ if (x>y) return x ; else return y; } • Il simbolo max denota il nome della funzione • Le variabili intere x e y sono i parametri della funzione • Il valore restituito è un intero int
  • 21. Comunicazione cliente/servitore • Il cliente passa informazioni al servitore mediante una serie di parametri Parametri formali: sono specificati nella dichiarazione del servitore esplicitano il contratto fra servitore e cliente indicano che cosa il servitore si aspetta dal cliente Parametri attuali: sono trasmessi dal cliente all’atto della chiamata devono corrispondere ai parametri formali in numero, posizione e tipo
  • 23. Comunicazione cliente/servitore Legame tra parametri attuali e parametri formali: • effettuato al momento della chiamata, in modo dinamico Tale legame: vale solo per l’invocazione corrente vale solo per la durata della funzione
  • 24. Esempio All’atto di questa chiamata della funzione, si effettua un legame tra: xez ye4
  • 25. Esempio: All’atto della chiamata della funzione si effettua il legame tra: xe5 yez
  • 26. Information hiding • La struttura interna (corpo) di una funzione è completamente inaccessibile dall.esterno • Così facendo si garantisce protezione dell’informazione (information hiding) • Una funzione è accessibile solo attraverso la sua interfaccia
  • 27. Definizione di funzione in C <tipoValore> <nome>(<parametri-formali>) { <corpo> La forma base è: } return <espressione>; <parametri-formali> o una lista vuota: void o una lista di variabili (separate da virgole) visibili solo entro il corpo della funzione <tipoValore> deve coincidere con il tipo del valore restituito dalla funzione Può non esservi valore restituiti, in tal caso il tipo è void
  • 28. Definizione di funzione in C <tipoValore> <nome>(<parametri-formali>) { <corpo> La forma base è: } return <espressione>; • Nella parte corpo possono essere presenti: definizioni e/o dichiarazioni locali (parte dichiarazioni) e un insieme di istruzioni (parte istruzioni) • I dati riferiti nel corpo possono essere costanti, variabili, oppure parametri formali • All'interno del corpo, i parametri formali vengono trattati come variabili
  • 29. Funzioni: nascita e morte • All’atto della chiamata: l’esecuzione del cliente viene sospesa e il controllo passa al servitore • Il servitore “vive” solo per il tempo necessario a svolgere il servizio • Al termine, il servitore “muore”, e l’esecuzione torna al cliente
  • 30. Chiamata di funzione • La chiamata di funzione è un.espressione della forma <nomefunzione> ( <parametri-attuali> ) • dove: <parametri-attuali> ::= [ <espressione> ] { , <espressione> }
  • 31. Funzioni: esempio Parametri formali int max (int x, int y ){ SERVITORE if (x>y) return x ; else return y; Definizione } della funzione main() { CLIENTE int z = 8; int m; Chiamata m = max ( z, 4); } della funzione Parametri attuali
  • 32. Risultato di una funzione • L’istruzione return provoca la restituzione del controllo al cliente, unitamente al valore della espressione che la segue. • Eventuali istruzioni successive alla return non saranno mai eseguite int max (int x, int y ){ if (x>y) return x ; else return y; }
  • 33. Funzioni: esempio Parametri formali int max (int x, int y ){ SERVITORE if (x>y) return x ; else return y; Definizione } della funzione main() { CLIENTE int z = 8; int m; Chiamata m = max ( z, 4); } della funzione Risultato
  • 34. Riassumendo All’atto dell’invocazione di una funzione: • si crea una nuova attivazione (istanza) del servitore • si alloca la memoria per i parametri (e le eventuali variabili locali) • si trasferiscono i parametri al servitore • si trasferisce il controllo al servitore • si esegue il codice della funzione
  • 35. Passaggio dei parametri In generale, un parametro può essere trasferito dal cliente al servitore: • per valore o copia (by value) si trasferisce il valore del parametro attuale • per riferimento (by reference) si trasferisce un riferimento al parametro attuale
  • 36. Passaggio per valore • Si trasferisce una copia del valore del parametro attuale cliente
  • 37. Passaggio per valore • Si trasferisce una copia del valore del parametro attuale Valore (copiato) di z copia Ogni azione fatta su w è locale al servitore Istanza del servitore cliente servitore
  • 38. Passaggio per riferimento • Si trasferisce un riferimento al parametro attuale cliente
  • 39. Passaggio per valore • Si trasferisce una riferimento al parametro attuale Riferimento a z (indirizzo) riferimento x x Ogni azione fatta su w è In realtà fatta sulla Istanza del variabile z servitore del cliente cliente servitore
  • 40. Passaggio dei parametri in C • In C, i parametri sono trasferiti sempre e solo per valore (by value) si trasferisce una copia del parametro attuale, non l’originale tale copia è strettamente privata e locale a quel servitore il servitore potrebbe quindi alterare il valore ricevuto, senza che ciò abbia alcun impatto sul cliente