Introduzione al linguaggio C Gli array



Documenti analoghi
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Funzioni in C. Violetta Lonati

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

puntatori Lab. Calc. AA 2007/08 1

Corso di Fondamenti di Informatica

Introduzione alla programmazione in C

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Allocazione dinamica della memoria - riepilogo

Gestione dei File in C

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Le stringhe. Le stringhe

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

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

Introduzione al Linguaggio C

INFORMATICA - I puntatori Roberta Gerboni

Breve riepilogo della puntata precedente:

LINGUAGGI DI PROGRAMMAZIONE

Le variabili. Olga Scotti

Vettori Algoritmi elementari di ordinamento

I puntatori e l allocazione dinamica di memoria

Esercizio 1. Esercizio 1

GESTIONE INFORMATICA DEI DATI AZIENDALI

Alcune regole di base per scrivere un programma in linguaggio C

Variabili e tipi di dato

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Laboratorio di programmazione

3. La sintassi di Java

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Funzioni. Il modello console. Interfaccia in modalità console

costruttori e distruttori

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Matlab: Gestione avanzata dei file

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Linguaggio C. Fondamenti. Struttura di un programma.

SPECIFICHE E LIMITI DI EXCEL

Compilatore risorse display grafico LCD serie IEC-line

Inizializzazione, Assegnamento e Distruzione di Classi

Record in C: il costruttore struct.

Linguaggio C: Array Valeria Cardellini

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Esame del 3 febbraio 2010

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Calcolatori Elettronici Parte X: l'assemblatore as88

dall argomento argomento della malloc()

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Matlab: Strutture di Controllo. Informatica B

Esercizi di programmazione in C

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Arduino: Programmazione

Java: Compilatore e Interprete

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:


Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Concetto di Funzione e Procedura METODI in Java

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Codifica: dal diagramma a blocchi al linguaggio C++

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Introduzione al MATLAB c Parte 2

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Linguaggio C - Stringhe

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Linguaggio C - Funzioni

RICERCA DI UN ELEMENTO

Potenzialità statistiche Excel

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 27 Gennaio 2015

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Gestione dei File. dischi nastri cd

4. Un ambiente di sviluppo per Java

Elementi di Architettura e Sistemi Operativi

Protezione. Protezione. Protezione. Obiettivi della protezione

Sistemi Operativi. 5 Gestione della memoria

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Algoritmi e strutture dati. Codici di Huffman

Fondamenti di Informatica T. Linguaggio C: i puntatori

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La struttura dati ad albero binario

Programmare in Java. Olga Scotti

4.1 FAX Sollecito consegne via (Nuova funzione)

Transcript:

Introduzione al linguaggio C Gli array

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[ 3284 ]; 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

Array di dimensioni variabili In C (ANSI C89) non è possibile definire array di dimensione variabile; il loro utilizzo, anche se accettato da alcuni compilatori, è illegale. La dimensione di ogni array deve essere conosciuta in fase di compilazione.

Programma non conforme allo standard ANSI C89 Programma Corretto #include <stdio.h> int main() { int i; scanf("%d",&i); if(i>10) { float a[i]; } return 0; } #include <stdio.h> int main() { int i; scanf("%d",&i); if(i>10) { float a[100]; } return 0; }

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 DECLARETION*/ return 0;

Array 3-dimensionale

Esercizi 1. Scrivere un programma che inizializza un vettore monodimensionale di interi e poi copia il vettore in un altro vettore di stessa dimensione. 2. Scrivere un programma che stampa i numeri primi minori di 100 (Eratostene) 3. Scrivere un programma che calcola il mcd di due numeri positivi (Euclide) 4. Scrivere un programma che ordina n numeri casuali con il metodo bubblesort