La dichiarazione generica di una variabile X di tipo array è come segue:
X: array [ IND1, ..., INDk] of TYPE
La metafora variabile = scatola si estende a questo caso
considerando
scatole con scomparti,
es. le cassette della posta o quelle dei tipografi.
Ogni linguaggio provvede poi dei costrutti per dichiarare variabili di
questi tipi
e per esaminare e modificare gli
elementi di tali variabili.
In genere i linguaggi forniscono anche un modo per rappresentare costanti di tipo array, per esempio elencando in ordine i loro elementi usando opportuni separatori.
ESERCIZI
In C la sintassi per la selezione di una componente è
X[i1][ ...][ ik];
Il C non offre costanti di tipo array da utilizzare in ogni punto del programma, vedremo poi un uso ridotto per le inizializzazioni delle variabili.
Il seguente programma presenta alcuni semplici usi di questi costrutti.
#include <stdio.h> main(){ int I; int M[3][3]; /*matrice quadrata di interi 3 X 3*/ float V[100], W[100]; /*vettori di reali di lunghezza 100*/ /*inizializzazioni*/ for(I=0; I< 2; I=I+1){ M[I][0]=1; M[I][1]=2; M[I][2]=3;} for(I=0; I< 100; I=I+1) V[I]=0.0; /* ricordare che gli indici partono da 0, non da 1 */ /* W = V; non e' permessa occorre fare*/ for(I=0; I< 100; I=I+1) W[I]=V[I]; W[33] = 3; W[55] = 5; printf("il valore di M[1][1] e\': %d\n",M[1][1]); printf("i valori di W sono:\n"); for(I=0; I< 100; I=I+1) printf("%f ",W[I]); printf("\n"); }
ESEMPI
#include <stdio.h> /*prodotto scalare per vettori*/ main(){ int s, /*lo scalare*/ i, x; float v[5]; /*il vettore di lunghezza 5*/ /*leggere lo scalare*/ printf("dare lo scalare\n"); scanf("%d",&s); /*leggere il vettore*/ printf("dare il vettore\n"); for(i=0; i<= 4; i=i+1){ scanf("%d",&x); v[i]=x;}; /*l'uso di s sara' chiarito in seguito assieme a quello di &*/ for(i=0; i<= 4; i=i+1) v[i]= v[i] * s; /*stampare il vettore*/ for(i=0; i<= 4; i=i+1) printf("%f ",v[i]); printf("\n"); }
#include <stdio.h> /*somma di matrici*/ main(){ int a[3][3], b[3][3], res[3][3], i, j, s; /*leggere le matrici*/ printf("dare la prima matrice\n"); for(i=0; i<= 2; i=i+1) for(j=0; j<= 2; j=j+1){ scanf("%d",&s); a[i][j] = s; }; printf("dare la seconda matrice\n"); for(i=0; i<= 2; i=i+1) for(j=0; j<= 2; j=j+1){ scanf("%d",&s); b[i][j] = s; }; for(i=0; i<= 2; i=i+1) for(j=0; j<= 2; j=j+1) res[i][j] = a[i][j] + b[i][j]; /*stampare il risultato*/ for(i=0; i<= 2; i=i+1){ for(j=0; j<= 2; j=j+1) printf("%d ",res[i][j]); printf("\n"); } }
Precisamente in C le stringhe sono array di caratteri dove la fine della stringa è segnalata dal carattere nullo ('\0'), cioè quello con codice 0.
Inoltre il C provvede un modo per rappresentare i valori di tipo stringa
(cioè array di caratteri),
scrivendo gli elementi della stringa racchiusi tra doppi apici (come per i
parametri della funzione printf).
Tali costanti si possono utilizzare per inizializzare variabili di tipo
'stringa'.
Per esempio, una variabile dichiarata da
char st[5] = "casa";, (dichiarazione con inizializzazione
vedi INIZIALIZZAZIONE DELLE VARIABILI)
corrisponde alla dichiarazione char st[5];
seguita dalle assegnazioni
st[0] = 'c'; st[1] = 'a'; st[2] = 's'; st[3] = 'a'; st[4] = '\0';
ESEMPIO
#include <stdio.h> main(){ int i; char c; char string1[100], string2[20]; string2 = "casa"; /*stampare string2*/ printf("\""); for(i=0; s[i] != '\0'; i =i+1) printf("%c",string2[i]); printf("\"\ "); /* leggere string1 che termina quando si va a capo */ scanf("%c",&c); for( i=0; c != '\n'; i= i+1) {string1[i]=c; scanf("%c",&c);} string1[i]='\0'; }