26
Corso di Informatica 2009 - 2010 Lezione 9 1 Corso di Informatica A.A. 2009- 2010 Corso di Informatica A.A. 2009- 2010 Lezione 9

Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 1

Corso di Informatica A.A. 2009- 2010Corso di Informatica A.A. 2009- 2010

Lezione 9

Page 2: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Il linguaggio CIl linguaggio C

• Istruzioni di input/output• Arrays

Page 3: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 3

La funzione printf()La funzione printf() consente di mostrare sullo standardoutput (normalmente lo schermo) sia messaggi di testo che il valore di variabili definite nel programma

La stringa di formato è obbligatoria, mentre l’uso degli argomenti è opzionale

Page 4: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 4

La stringa di formatoLa stringa di formato specifica come deve essere“formattato” l’output

• caratteri di testo: sono stampati esattamente come sono stati scrittiall’interno della stringa di formato•carattere di controllo: un \ seguito da un singolo carattere

•carattere di conversione: un % seguito da un carattere

Page 5: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 5

Page 6: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 6

}

Page 7: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 7

Caratteri di conversioneLa stringa di formato deve contenere un carattere di conversioneper ogni variabile che deve essere stampata.

Il carattere di conversione deve corrispondere al tipo di Variabile da stampare

Page 8: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 8

La funzione printf()Una singola istruzione printf() può stampare un numero illimitato di variabili purché la stringa di formato contenga un carattere di conversione per ogni variabile.

Page 9: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 9

La funzione puts()La funzione puts() può essere utilizzata per visualizzare sullo schermo dei messaggi di testo, ma non può stampare variabili Numeriche.

La funzione puts() riceve una singola stringa come argomento ela visualizza sullo schermo andando a capo automaticamente

Page 10: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 10

DO & DON’T

Utilizzare la funzione puts() ognivolta che è necessario stampareunicamente del testo Non inserire più linee di testo in un’unica

istruzione printf()Non dimenticare il carattere di newline perstampare più linee mediante più printf()Non utilizzare i caratteri di conversione conla funzione puts()

Page 11: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 11

La funzione scanf()Il modo più flessibile di leggere dati numerici da una tastierasi ottiene utilizzando la funzione scanf()

Una singola scanf() può gestire l’input di più variabili

Per fornire in input più variabili bisogna separarle con uno“spazio bianco” (spazio, tab, newline)

Page 12: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 12

Page 13: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 13

Page 14: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 14

BUG BUSTER

Page 15: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 15

ArraysUn array è un insieme contiguo di celle di memoria tutte contenentidati dello stesso tipo. Queste celle, che costituiscono in pratica ungruppo di variabili, hanno tutte lo stesso nome ed sono accessibiliattraverso un indice.

int a[10], b[100];

float f[30];

char c[200];

La dichiarazione di un array (statico) è analoga a quella di unavariabile, ad eccezione del fatto che il nome dell'array è seguito dalnumero di elementi che lo compongono, racchiuso tra parentesiquadre.

Page 16: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 16

Arrays

Quando viene dichiarato un array il compilatore riserva un“blocco” di memoria atto a contenere l’intero array.Gli elementi dell’array sono “salvati” in locazioni di memoriacontigue

Page 17: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 17

ArraysReminder: se int a[10] e’ un array, il primo elemento e’

a[0] e l’ultimo e’ a[9].

Il compilatore non puo’ rivelare un tale errore: la memoria relativa ada[10] può essere sempre letta e scritta, ma non fa parte dell’array!! In caso di lettura, il valore letto non ha alcun significato logico ai fini delprogramma, mentre in caso di scrittura si rischia di sovrascrivere qualchealtro dato importante che risiede nella locazione di memoria subito dopo lelocazioni assegnate all’array.

Cosa accade se si tenta di referenziare un elemento che non faparte dell'array, ad esempio a[10] ?

Se la locazione di memoria referenziata non appartieneal programma, il programma stesso termina con unerrore (segmentation fault).

Page 18: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 18

Page 19: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 19

Arrays multidimensionali

Un array multidimensionale possiede più di un indice

In C non vi è alcun limite al numero di dimensioni di un array

Page 20: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 20

Page 21: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 21

DO & DON’T

Utilizzare l’istruzione #define per creare delle costanti per definire gli arraysEvitare di utilizzare arrays di dimensione maggiore di tre

Non dimenticare che gli indici degli arrays partono da 0

Page 22: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 22

Inizializzare gli arraysAll’atto della dichiarazione è possibile inizializzare glielementi di un array

Anche gli arrays multidimensionali possono essere inizializzati

Page 23: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 23

Page 24: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 24

La funzione getchar() legge un singolo carattere dalla tastiera.In questo caso serve a mettere in pausa il programma fino a quando l’utente non digita Enter

Page 25: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 25

Dimensioni di un array

Le dimensioni in byte di un array dipendono ovviamente dal numero e dal tipo degli elementi che lo costituiscono

Page 26: Corso di Informatica A.A. 2009- 2010people.na.infn.it/~itaco/informatica/Lezione9.pdf · Corso di Informatica 2009 - 2010 Lezione 9 17 Arrays Reminder: se int a[10] e’ un array,

Corso di Informatica 2009 - 2010 Lezione 9 26

BUG BUSTER