Gli array. slides credit M. Poneti

Documenti analoghi
Introduzione al linguaggio C Gli array

Per fare riferimento ad un elemento, specificare il nomedel vettore. numerodi posizione(indice)

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

ARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Linguaggio C: Array Valeria Cardellini

definisce un vettore di 4 puntatori a carattere (allocata memoria per 4 puntatori)!

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Fondamenti di Informatica 12. Linguaggio C -4

Corso di Informatica A.A

C: panoramica. Violetta Lonati

4 GLI ARRAY E LE STRINGHE

I tipi strutturati e i record in C++

Elementi di Informatica A. A. 2016/2017

Introduzione al linguaggio C

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso.

! Array. n Mondimensionali n Multidimesionali (Matrici)! Preprocessore! Commenti

Puntatori. Fondamenti di Programmazione

Introduzione al linguaggio C

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Introduzione al C Lez. 4. Allocazione Dinamica della memoria

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

Cicli annidati ed Array multidimensionali

Dati due punti sul piano calcolare la loro distanza

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Array, matrici. Marco D. Santambrogio Ver. aggiornata al 21 Marzo 2013

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella

Introduzione al C Lez. 4

Corso di Informatica A.A

24 aprile Qualche minuto di laboratorio

Gli array Libro cap. 6 Moreno Marzol a Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Laboratorio di Informatica I

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

Matrici Vettori di stringhe

Lezione 6: Array e puntatori

Linguaggio C Vettori e stringhe

puntatori Lab. Calc. AA 2006/07 1

Matrici (array bidimensionali)

Introduzione al C. Unità 7 Array. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

Linguaggio C - sezione dichiarativa: costanti e variabili

Matrici Vettori di stringhe

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

Prof. G. Ascia. I puntatori. Fondamenti di Informatica

Array e puntatori in C

Problema. Vettori e matrici. Vettori. Vettori

Cicli annidati e matrici di variabili

Concetti chiave. Gli Array o Vettori. Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali

Introduzione al linguaggio C Puntatori

PROGRAMMAZIONE AVANZATA JAVA E C

Tipi derivati: Array

Associazione Variabile-Indirizzo

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Array multidimensionali e stringhe

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Dati strutturati in C

L AMBIENTE CODE BLOCKS E L IO

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Informatica (A-K) 14. Linguaggio C -4

Tipi di dato strutturati: Array

Lezione 12: Allocazione Dinamica della Memoria

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Fondamenti di Informatica T-1

Tipi di dato strutturati: Array

Ottenere una modifica del parametro attuale

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

i Vettori Alessandra Giordani Lunedì 15 aprile

Cosa sono gli Array. int myarray[10];

array: vettori, matrici e stringhe

Puntatori e array. Tipo puntatore Vettori

I CARATTERI E LE STRINGHE

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

C: primi elementi. Lezione 4

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Esercitazione di Reti degli elaboratori

Array k-dimensionali

Array. Aggragati di variabili omogenee...

Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;

Corso di Informatica A.A

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Corso di Laboratorio di Sistemi Operativi A.A

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Struttura dei programmi e Variabili

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Allocazione dinamica della memoria

Corso di Informatica A.A

Introduzione al linguaggio C Puntatori

IL PRIMO PROGRAMMA IN C

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Dichiarazioni e tipi predefiniti nel linguaggio C

Esercizio 1: parole nel testo

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Array e stringhe. Marco D. Santambrogio Ver. aggiornata al 28 O0obre 2014

Array e Matrici. Perchè usare gli array?

Transcript:

Gli array slides credit M. Poneti

Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome e lo stesso tipo di dato Per fare riferimento ad un elemento, specificare il nome del vettore numero di posizione (o indice) c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] -45 6 0 72 1543-89 0 62-3 Formato: nomevettore[numeroposizione] c[9] c[10] 6453 1 il primo elemento è alla posizione 0 se c è un vettore di n elementi: c[0], c[1]...c[n-1] c[11] 78 numero di posizione all interno del vettorec

Array ad una dimensione La forma generale per dichiarare un array monodimensionale è: tipo nome_variabile[dimensione]; tipo dichiara il tipo di dato degli elementi che costituiscono l array dimensione definisce quanti elementi contiene l array Quando l array è dichiarato, il compilatore alloca un blocco di memoria per contenere l array È possibile accedere ad un singolo elemento dell array tramite un indice, che descrive la posizione di un dato elemento all interno dell array stessa.

continua Per un array monodimensionale la dimensione totale in byte occupata viene calcolata in questo modo: Byte totali = n. di byte variabile_tipo_base X n. di elementi

Nota L esempio seguente dichiara un array intero chiamato vettore che ha dieci elementi: int vettore[10]; In C il primo elemento di qualsiasi array ha indice zero In questo caso, dato che vettore ha 10 elementi, ha valori di indice che andranno da 0 a 9. il primo elemento in vettore è rappresentato da vettore[0] e l ultimo da vettore[9].

Esempi di dichiarazione dei vettori int c[10]; float myarray[284]; Per dichiarare più vettori dello stesso tipo formato simile alle variabili int b[100], x[27]; Gli elementi di un vettore possono essere utilizzati come le altre variabili c[0] = 3; printf( "%d", c[0]); E possibile eseguire operazioni nell indice. Se x = 3, c[5-2] == c[3] == c[x]

Inizializzazione di un array Ci sono 2 forme per inizializzare un array come per tutte le altre variabili: In fase di dichiarazione : tipo nome_variabile[ ]={e1,,en}; tramite indicizzazione diretta all interno del programma quando occorre, ad es: int a[2]; /* dichiarazione array*/... a[0]=23; /* inizializzazione array*/ a[1]=100;

Note Inizializzare un vettore int n[5] = {1, 2, 3, 4, 5 }; Se gli inizializzatori non sono sufficienti, gli elementi rimanenti sono azzerati Se sono troppi, errore di sintassi int n[5] = {0}; azzera tutti gli elementi In C non ci sono controlli sulla dimensione dei vettori Se la dimensione non è dichiarata gli inizializzatori la determinano int n[] = { 1, 2, 3, 4, 5 }; 5 inizializzatori, quindi il vettore ha 5 elementi

Inizializzazione illegale In C non è possibile assegnare un array ad un altro. Pertanto scrivere così è ILLEGALE: int a[10],b[10]; a=b; /* ERRORE!!! */ Per trasferire il contenuto di un array in un altro è necessario assegnare individualmente ogni valore per esempio utilizzando un ciclo for.

1 /* 2 Histogram printing program */ 3 #include <stdio.h> 4 #define SIZE 10 5 6 int main() 7 { 8 int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; 9 int i, j; 10 11 printf( "%s%13s%17s\n", "Element", "Value", "Histogram" ); 12 13 for ( i = 0; i <= SIZE - 1; i++ ) { 14 printf( "%7d%13d ", i, n[ i ]) ; 15 16 for ( j = 1; j <= n[ i ]; j++ ) /* print one bar */ 17 printf( "%c", '*' ); 18 19 printf( "\n" ); 20 } 21 22 return 0; 23 }

Esecuzione Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 *

Esempi di utilizzo dei vettori Vettori di caratteri La stringa "hello" è in realtà in vettore static di caratteri I vettori di caratteri possono essere inizializzati usando stringhe letterali char string1[] = "first"; le stringhe terminano con il carattere nullo '\0' string1 ha in realtà 6 elementi char string1[] = { 'f', 'i', 'r', 's', 't', '\0' };

continua Accesso ai singoli caratteri string1[ 3 ] è il carattere 's' Il nome del vettore è l indirizzo del primo elemento del vettore stesso, pertanto non è necessario l operatore & in scanf scanf( "%s", string2 ) ; Legge i caratteri finchè incontra uno spazio bianco Può scrivere anche oltre la fine del vettore

1 /* 2 Treating character arrays as strings */ 3 #include <stdio.h> 4 5 int main() 6 { 7 char string1[ 20 ], string2[] = "string literal"; 8 int i; 9 10 printf(" Enter a string: "); 11 scanf( "%s", string1 ); 12 printf( "string1 is: %s\nstring2 is: %s\n" 13 "string1 with spaces between characters is:\n", 14 string1, string2 ); 15 16 for ( i = 0; string1[ i ]!= '\0'; i++ ) 17 printf( "%c ", string1[ i ] ); 18 19 printf( "\n" ); 20 return 0; 21 } Enter a string: Hello there string1 is: Hello string2 is: string literal string1 with spaces between characters is: H e l l o

Ancora sulla dimensione La dimensione dell array può essere specificata tramite una costante letterale: int array[12]; Una costante simbolica creata con #define: #define MONTHS 12 int array[months];

Assenza di controllo dei limiti degli array Il C non effettua alcun controllo sui limiti degli array. In altre parole è possibile inizializzare un array di dimensione N con più di N valori senza avere alcun messaggio di errore in compilazione È compito del programmatore garantire che tutti gli array siano abbastanza grandi da contenere ciò per cui sono stati creati int a[ ]={1,2,3,4,5}; int b[3]; a[8]=9; /* errore ho sforato in memoria */ for(i=0;i<5;i++) b[i]=a[i]; /* non dà errore */

Vettori multidimensionali Vettori con più indici Tabelle con righe e colonne (vettori m per n) Vettori bidimensionali o matrici : il primo indice identifica la riga, il seconda la colonna Colonna 0 Colonna 1 Colonna 2 Colonna 3 Riga 0 a[0][0] a[0][1] a[0][2] a[0][3] Riga 1 a[1][0] a[1][1] a[1][2] a[1][3] Riga 2 a[2][0] a[2][1] a[2][2] a[2][3] indice di colonna nome del vettore indice di riga

Array bidimensionali Gli array a più dimensioni vengono inizializzati allo stesso modo di quelli monodimensionali, ad esempio: int sqrs[4][2] = { 1,1, 2,2, 3,9, 4,16 }; Inizializza un array chiamato sqrs con i numeri da 1 a 4 ed i loro quadrati. 0 1 2 3 0 1 1 2 3 4 Indice sinistro 1 4 9 16 Indice destro

Note Inizializzazione int b[2][2]={1,2,3,4}; int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; 1 2 3 4 I valori saranno raggruppati per riga all interno di parentesi graffe Se non sono sufficienti, gli elementi non inizializzati sono posti a zero int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; Per riferirsi ad un elemento 1 0 3 4 Specificare la riga, poi la colonna printf( "%d", b[ 0 ][ 1 ] );

Esempio #include <stdio.h stdio.h> int main() { int i,j,val[3][4]; for(i=0;i<3;i++) { for(j=0;j<4;j++) { val[i][j]=(i*4)+j+1; ]=(i*4)+j+1; } } return 0; } 0 1 2 0 1 2 3 1 2 3 4 5 6 7 8 9 10 11 12 Indice sinistro Indice destro val[1][2] n. byte=righe x colonne x n. byte del tipo

int val[3][4]; Address(val[i][j])=Address(val[0][0])+i*4+j

Array bidimensionali #define M 5 #define N 9 int main() { int num[m][n]; return 0; } void funzione(num,m,n) { int num[m][n]; /*ILLEGAL DECLARATION*/ } return 0;

Array 3-dimensionale