Fondamenti di Informatica Prof. A.Broggi Linguaggio C (3) Fondamenti di Informatica Prof. A.Broggi Vettori Linguaggio C (3) Fondamenti di Informatica Prof. A.Broggi Output di stringhe Matrici vettore = collezione di un numero fissato di variabili dello stesso tipo #include <stdio.h> matrice = vettore i cui elementi sono vettori main() { const char messaggio[16] = “Errore nei dati”; const char giorni[7][11] = {“lunedi`”, “martedi`”, “mercoledi`”, “ giovedi`”, “venerdi`”, “sabato”, “domenica”}; int i; tipo_comp nome_matrice[num_comp1] [num_comp2]...; tipo_componente nome_vettore[numero_componenti]; #define NUM_ALLIEVI 10 #define NUM_MATERIE 5 #define NUM_MATERIE 20 int voti[NUM_ALLIEVI][NUM_MATERIE]; int voti_ottenuti[NUM_MATERIE]; voti[2][3] = 28; Fondamenti di Informatica 1 } Fondamenti di Informatica Inizializzazione dei vettori 4 Memorizzazione delle matrici Input di stringhe main() { char nome[LUNGSTR], professione[LUNGSTR]; int eta; long int reddito; main() { int matrix[NUMRIGHE][NUMCOLON] = { {0, 1, 2, 3}, {1, 2, 3, 4}, {2, 3, 4, 5} }; int i,j; #define NUMDATI 10 int iniz_vett[NUMDATI] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int vett_dati[NUMDATI]; int i; for (i=0; i<NUMDATI; i++) vett_dati[i] = iniz_vett[i]; } Fondamenti di Informatica 2 for(i=0; i<NUMRIGHE; i++) for(j=0; j<NUMCOLON; j++) printf(“matrix[%d][%d] = %d, posiz = %u\n”, i, j, matrix[i][j], &matrix[i][j]); Fondamenti di Informatica 7 #include <stdio.h> #define LUNGSTR 20 #define NUMRIGHE 3 #define NUMCOLON 4 non esistono operatori che agiscono sul vettore nel suo complesso printf(“%s\n”, messaggio); for(i=0; i<7; i++) printf(“%s\n”, giorni[i]); Fondamenti di Informatica sono memorizzate per righe (in generale variando per primo l’indice più a destra) tipo_componente nome_vettore[numero_componenti] = {val0, val1,…, valn}; Linguaggio C (3) } 5 printf(“Introduci nome, eta`, professione e reddito \n”); scanf(“%s%d%s%ld”, nome, &eta, professione, &reddito); Fondamenti di Informatica 8 Vettori come parametri di funzioni Stringhe Operazioni sulle stringhe • al nome del vettore è associato l’indirizzo del primo elemento • l’operatore [ ] consente di accedere a un elemento del vettore – vett_dati[0] equivale a *vett_dati • sono memorizzate come vettori di caratteri • è sempre presente un carattere in più per il terminatore ‘\0’ • ‘c’ è diverso da “c” le stringhe sono vettori --> non esistono operatori che agiscono sulla stringa nel suo complesso! – vett_dati[i] equivale a *(vett_dati + i) • il passaggio a una funzione di un parametro di tipo vettore avviene per riferimento const char messaggio[] = “Errore nei dati”; 3 www.ce.unipr.it/broggi/fondinfo Fondamenti di Informatica 1 Fondamenti di Informatica Prof. A.Broggi Linguaggio C (3) Funzioni di libreria per le stringhe • manipolazione di stringhe (header file string.h) – strlen(stringa) restituisce la lunghezza della stringa – strcmp(stringa1, stringa2) confronta due stringhe – strcpy(stringa1, stringa2) copia stringa1 in stringa2 –… • conversione delle stringhe nei tipi base ( header file stdlib.h) – atoi(stringa) converte stringa in un numero intero – atof(stringa) converte stringa in un numero reale – ... Fondamenti di Informatica www.ce.unipr.it/broggi/fondinfo /* assegnamento errato! */ if (messaggio1 == messaggio2) printf(“Messaggi uguali\n”); /* confronto errato! */ char vmessage[] = “Salve”; char *pmessage = “Salve”; #define MESSAGGIO “Errore nei dati” Fondamenti di Informatica char messaggio[16]; messaggio = “Errore nei dati”; const char messaggio[16] = “Errore nei dati”; – nella definizione della funzione si può non definire la dimensione del vettore int nome_funz(int vett_dati[], int lungh_vett, …) 10 4 www.ce.unipr.it/broggi/fondinfo 6 /* un vettore */ /* un puntatore */ Fondamenti di Informatica 2 www.ce.unipr.it/broggi/fondinfo 9 3