Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 1
Array monodimensionali in C
In C la dichiarazione di una variabile di tipo array è composta da:
• indicazione del tipo componente
• nome dello array
• una coppia di parentesi quadre [ ], che racchiude la
• cardinalità (dimensione, un valore costante) dell’array
<tipo_componente> <nome_array> [<dimensione>];
Esempi: int VETT[300];
double vettore[120];
Dato un array con dimensione (cardinalità) N,
nel linguaggio C i suoi elementi sono indicizzati da 0 a N-1
Array monodimensionali in C
[0]
[1]
[2]
[3]
[4]
[5]
A Esempio:
double A [6];
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 3
Array monodimensionali in C
funzione di accesso
Individuazione degli elementi dell’array:
<nome_array>[<indice>]
[0]
[1]
[2]
[3]
[4]
[5]
Vettore
42 18
x = 18 * 2 = 36
Vettore[3] = 42;
Esempi:
int Vettore[6];
…
x = Vettore[0] * 2;
Array monodimensionali in C
funzione di accesso
Individuazione degli elementi dell’array:
<nome_array>[<indice>]
[0]
[1]
[2]
[3]
[4]
[5]
Vettore
42 18
x = 18 * 2 = 36
Vettore[3] = 42;
Esempi:
int Vettore[6];
…
x = Vettore[0] * 2;
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 5
Esempio
Analisi e Specifica
Definizione del problema: Inserire, da tastiera, i valori di tutti gli elementi di un array monodimensionale di interi, composto da 50 elementi, e
visualizzare il contenuto dell’array così ottenuto Definizione dei dati del problema:
I: il valore di ciascun elemento dell’array di numeri interi
Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
U: l’array ‘riempito’ con i valori di tutti gli elementi Pu: nessuna
un programma per riempire , con input da tastiera, completamente un array monodimensionale di interi e poi stampare i valori dei suoi elementi
Esempio
Nome variabile Descrizione Tipo VET(I) i-esimo elemento dell’array INT
Nome variabile Descrizione Tipo
VET array di interi con i valori immessi INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
I Indice array INT Tabella delle variabili di algoritmo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 7
Esempio
Progettazione
Descrizione del metodo di elaborazione:
Con un ciclo ripetitivo, con il numero delle ripetizioni pari alla cardinalità dello array, si effettua la lettura del valore di ciascun elemento dell’array.
Si visualizza, sempre usando un ciclo ripetitivo, il contenuto dell’array, stampando ad ogni passo del ciclo il valore di ciascun elemento immesso
#include< stdio. h>
main()
{ int Vett[50], i;
//Legge in input il valore di tutti gli elementi // dello array
for (i=0; i<50; i++)
{ printf(“Valore di Vett(%d): \ n", i);
scanf("%d", &Vett[i]);
}
// Stampa i valori di tutti gli elementi dello // array
for (i=0; i<50; i++)
printf("Vett(%d)=%d\ n", i, Vett[i]);
Esempio - il programma C
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 9
#include< stdio. h>
main() { int Vett[50], i;
// Legge in input il valore di tutti gli elementi //
dello array
for (i= 0; i< 50; i++)
{ printf("Valore di Vett(%d)\ n", i);
scanf("%d", &Vett[ i]);
}
Esempio - il programma C
i=0 => Valore di Vett[0]=5 =>
Supponendo che l’utente, ad ogni passo del ciclo, digiti in input i valori:
5; 9; 23; 47; …….; 38
5 9 23 47
38 i=1 => Valore di Vett[1]=9 =>
i=2 => Valore di Vett[2]=23 =>
i=3 => Valore di Vett[3]=47 =>
i=49 => Valore di Vett[49]=38 =>
Vett
[0]
[1]
[2]
[3]
[4]
[5]
…...
[49]
#include< stdio. h>
main() { int Vett[50], i;
………...
// Stampa I valori di tutti gli elementi dello array for (i= 0; i< 50; i++)
printf("Vett(%d)=% d\ n", Vett[ i]);
}
Esempio - il programma C
i=0 => Vett(0)=5
i=1 => Vett(1)=9
i=2 => Vett(2)=23
i=3 => Vett(3)= 47
i=49 => Vett(49)= 38 [0] 5
[1]
[2]
[3]
[4]
[5]
Vett
…...
9 23 47
38 [49]
… con la situazione in figura sanno stampati, ad ogni passo del ciclo, i valori
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 11
altri modi di inizializzare/riempire un array monodimensionale
{ …
int Vett[5] = {15, 23, 44, 2, 86};
for (i= 0; i<5; i++)
printf("Vett(%d)=%d - ", i, Vett[i]);
…
} Vett
[0] 15
[1]
[2]
[3]
[4]
23 44 2 86
Vett(0)=15 - Vett(1)=23 - Vett(2)=44 - Vett(3)=2 - Vett(4)=86 –
{ …
int Vett[5], i;
// azzera tutti gli elementi del vettore
for (i= 0; i< 5; i++) Vett[i] = 0;
… }
altri modi di inizializzare/riempire un array monodimensionale
Vett
[0] 0
[1]
[2]
[3]
[4]
0 0 0 0
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 13
… con generazione random dei valori:
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
main ()
{ int i, vet[10];
srand(time(NULL));
for(i=0;i<10;i++)
vet[i] = rand(); //il valore random generato da rand() è assegnato // all’elemento i-esimo dello array vet
for(i=0;i<10;i++)
printf ("v[%d] = %d \n", i, vet[i]);
}
altri modi di inizializzare/riempire un array monodimensionale
Esempio
… e se non si vuole riempire tutto lo array, ma utilizzare solo alcuni elementi (tutti consecutivi, a partire dalla prima posizione)? ….
Analisi e Specifica
Definizione del problema: Inserire, in un array monodimensionale di interi composto da 50 elementi, un prefissato numero, immesso da tastiera, di valori e visualizzare il contenuto dell’array così ottenuto
Definizione dei dati del problema:
I: la quantità (riempimento) dei valori che si vogliono inserire; il valore di ciascun elemento dell’array di numeri interi
Pi: il numero degli elementi da inserire (il riempimento) non può essere maggiore della cardinalità dell’array (e deve essere maggiore di zero)
U: l’array ‘riempito’ con i valori degli elementi Pu: nessuna
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 15
Esempio
Nome variabile Descrizione Tipo
RIEMP riempimento dell’array INT VET(I) elemento dell’array INT
Nome variabile Descrizione Tipo
VET array di interi con i valori immessi INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
I indice array INT Tabella delle variabili di algoritmo
Esempio
Progettazione
Descrizione del metodo di elaborazione:
Si legge il numero di quanti elementi si vogliono inserire
(riempimento): tale numero deve essere minore della cardinalità dell’array
.Si legge, con un ciclo, il valore di ciascun elemento dell’array.
Si visualizza il contenuto dell’array, visualizzando il valore di ciascun elemento immesso
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 17
#include< stdio.h>
main()
{ int vett [ 50], riemp, i;
/* legge il numero indicante quanti elementi si vogliono inserire (deve essere minore della cardinalità) */
do
{ printf(" Numero elementi che vuoi inserire\ n");
scanf("% d", &riemp);
}
while ((riemp>50)||(riemp<=0)); // riemp minore cardinalità ma maggiore di zero // Legge in input tutti gli elementi del vettore
for (i= 0; i< riemp; i++)
{ printf(" dammi elemento di posto %d\ n", i);
scanf("% d", &vett[ i]);
}
// Stampa tutti gli elementi del vettore
for (i= 0; i< riemp; i++) printf("% d\ n", vett[i]);
}
Esempio - il programma C
#include< stdio.h>
main() {
int vett [ 50], riemp, i;
/* legge il numero indicante quanti elementi si vogliono inserire (deve essere minore della cardinalità) */
do
{ printf(" Numero elementi che vuoi inserire\ n");
scanf("% d", &riemp);
}
while ((riemp>50)||(riemp<=0);
Esempio - il programma C
Supponendo che sia immesso 4 come valore del riempimento si avrà
Vett
0 1 2 3 4 5
…...
49
… solo le prime 4 posizioni saranno effettivamente utilizzate
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 19
// Legge in input gli elementi del vettore for (i= 0; i< riemp; i++)
{ printf(" dammi elemento di posto %d\ n", i);
scanf("% d", &vett[ i]);
}
// Stampa il valore degli elementi inseriti nel vettore for (i= 0; i< riemp; i++) printf("% d\ n", vett[ i]);
}
Esempio - il programma C
Vett
0 1 2 3 4 5
…...
49
Supponendo che l’utente, ad ogni passo del ciclo, digiti in inputi valori:
5; 36; 28; 447;
i=0 => Vett[0]=5 => 5 36 28 447 i=1 => Vett[1]=36 =>
i=2 => Vett[2]=28 =>
i=3 => Vett[3]=447 =>
Esempio
… e se non si vuole riempire tutto lo array, senza però sapere prima quanti sono gli elementi da immettere , ovvero senza conoscere a priori il riempimento?
Analisi e Specifica
Definizione del problema: Inserire, in un array monodimensionale di interi composto da 50 elementi, un certo numero di valori (non noto a priori) . Visualizzare il contenuto dell’array così ottenuto e calcolare la media dei valori inseriti
Definizione dei dati del problema:
I: il valore di ciascun elemento dell’array di numeri interi
Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array (e deve essere magigore di zero) U: l’array ‘riempito’ con i valori degli elementi, il riempimento la media dei valori inseriti
Pu: il riempimento non può essere maggiore della cardinalità
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 21
Esempio
Nome variabile Descrizione Tipo
vett(i) elemento dell’array INT
Nome variabile Descrizione Tipo
vett array di interi con i valori immessi INT riemp riempimento dell’array INT
media media dei valori inseriti FLOAT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
i indice array INT sommatoria sommatoria valori inseriti INT
risp risposta utente INT
Tabella delle variabili di algoritmo
Esempio
Progettazione
Descrizione del metodo di elaborazione:
Si inizializza a zero il riempimento dello array
Si chiede all’utente se deve essere immesso un valore nello array (Si = 1)
Se la risposta è affermativa, ed il riempimento è minore della cardinalità, si inizia un ciclo iterativo in cui:
Si legge il valore di un elemento dell’array.
Si incrementa di 1 il valore del riempimento
Si chiede all’utente se c’è un altro valore da immettere e si torna all’inizio del ciclo Alla fine del ciclo, si visualizza il contenuto dell’array, visualizzando il valore di ciascun elemento immesso fino al valore del riempimento
Con un ciclo ripetitivo si visita lo array fino al valore del riempimento e si calcola la sommatoria dei valori inseriti. Alla fine del ciclo si calcola la media dei valori inseriti e si stampa il risultato.
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 23
#include<stdio.h>
main()
{const int CARD=50; // costante con nome con valore 50 int vett[CARD], riemp=0, i, risp, sommatoria=0;
float media;
printf(“Hai valori da inserire nello array? (1=SI)\n");
scanf("%d", &risp);
while ((risp == 1) && (riemp < CARD))
{printf("dammi elemento di posto %d\n", riemp);
scanf("%d",&vett[riemp]);
riemp++;
printf("Puoi inserire altri %d elementi \n", CARD - riemp);
printf("Vuoi immettere un altro valore? (1=SI)\n");
scanf("%d", &risp);
}
Esempio - il programma C
if (riemp >= CARD)
printf("\n Superata la cardinalita': ");
printf("NON possibile inserire ulteriori elementi!!\n");
if (riemp>0)
{ printf("\n Stampa valori elementi nello array:\n");
for (i=0; i<riemp; i++) // stampa i valori dello array e // calcola anche la loro sommatoria { printf("vett[%d]=%d \n", i, vett[i]);
sommatoria = sommatoria + vett[i];
} // fine for
media = (float) sommatoria / (float) riempimento;
printf(“media = %f \n", media);
} else
printf ("Array VUOTO \n");
system("Pause");
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 25
• In C, nell’attivazione di un sottoprogramma lo scambio di parametri effettivi /formali di tipo array è sempre effettuato per riferimento senza mettere lo ‘*’ prima del nome del parametro
• Per paramentri formali di tipo array monodimensionali non va indicata la cardinalità dello array
Array monodimensionali e sottoprogrammi in C
Es.
void leggivet(int Vet1[ ],int card1);
{ ....}
main ()
{ const card=10;
int Vet[card],I;
leggivet(Vet,card); }
Array monodimensionale:
non è necessario indicare la cardinalità nel parametro formale
Vet1 è passato per
riferimento anche se non c’è lo ‘*’ prima del nome !!!
Array monodimensionali e Sottoprogrammi un esempio
… un programma per leggere e stampare i valori di array di interi
… una strutturazione in moduli (sottoprogrammi)
main
leggivet stampavet
… ciascun modulo risolve uno specifico problema ...
Elementi di Informatica 27 Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
void leggivet(int Vet1[ ], int card1) // procedure per leggere da tatstiera i valori { int I; // degli elementi dello array
for (I=0;(I< card1); I++) // Vet1 per riferimento, card1 per valore {printf("immetti Vet[ %d ]= \n”,I) ;
scanf(“%d”, &Vet1[I]);
} }
… le due procedure per leggere e stampare i valori dello array ...
Array e Sottoprogrammi: un esempio
void stampavet(int Vet1[ ], int card1) // procedure per visualizzare i valori { int I; ; // degli elementi dello array
for (I=0;I<card1; I++) // Vet1 per riferimento, card1 per valore
printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );
}
main ()
{ const card=50;
int Vet[card];
leggivet(Vet,card); // chiama la procedure leggivet
// Vet per riferimento anche se non
//c’è & prima del nome, card per valore
stampavet(Vet,card); // chiama la procedure stampavet
// Vet per riferimento, anche se non
//c’è & prima del nome, card per valore
}
Array e Sottoprogrammi: un esempio
… il main che attiva le due procedure ...
Elementi di Informatica 29 Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
void leggivet(int Vet1[ ], int card1) { int I;
for (I=0;(I< card1); I++)
{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);
} }
void stampavet(int Vet1[ ], int card1) { int I; ; for (I=0;I<card1; I++)
printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );
}
main ()
{ const card=50;
int Vet[card];
leggivet(Vet,card);
stampavet(Vet,card);
}
… il programma per leggere e visualizzare i valori di array di interi usando due sottoprogrammi:
• La procedure leggivet per la lettura del valore degli elementi da tastiera
• La procedure stampavet per visualizzare i valori degli elementi sul monitor
Array e Sottoprogrammi:
un esempio
#include <stdio.h>
void leggivet(int Vet1[ ],int card1); // prototipo procedure leggivet
void stampavet(int Vet1[ ],int card1); // prototipo procedure stampavet
main ()
{ const card=5;
int Vet[card];
leggivet(Vet,card);
stampavet(Vet,card);
}
… usando i prototipi di funzione
Sottoprogrammi: esempio
Elementi di Informatica 31 Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
void leggivet(int Vet1[ ], int card1) void stampavet(int Vet1[ ], int card1) main ()
{ const card=50;
int Vet[card];
leggivet(Vet,card);
stampavet(Vet,card);
}
void leggivet(int Vet1[ ], int card1) { int I;
for (I=0;(I< card1); I++)
{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);
} }
void stampavet(int Vet1[ ], int card1) { int I; ; for (I=0;I<card1; I++)
printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );
}
… il programma per leggere e visualizzare i valori di array di interi usando i prototipi di leggivet e stampavet
Sottoprogrammi:
esempio
#include <stdio.h>
#include <leggivet.h> //indica che il file leggivet.h è nella cartella di inclusione
#include <stampavet.h> // indica che il file stampavet.h è nella cartella di inclusione
main ()
{ const card=5;
int Vet[card];
leggivet(Vet,card);
stampavet(Vet,card);
}
… un programma per leggere e visualizzare i valori di un array di interi
… usando file separati per ciascun modulo ...
Sottoprogrammi: esempio
Elementi di Informatica 33 Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
void leggivet(int Vet1[ ],int card1) { int I;
for (I=0;(I< card1); I++)
{printf("immetti Vet[ %d ]= \n”,I) ; scanf(“%d”, &Vet1[I]);
} }
#include <stdio.h>
void stampavet(int Vet1[ ],int card1) { int I;
for (I=0;I<card1; I++)
printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );
}
Le procedure leggivet e stampavet sono memorizzate, rispettivamente, nei file
leggivet.h stampavet.h
nella cartella include nella cartella contenente il compilatore
stampavet sono due procedure
… i due sottoprogrammi … in file separati ….
Sottoprogrammi: qualche esempio
void leggivet_riemp(int Vet1[ ],int card1, int *riemp1) { int I;
do
{ printf("immetti riemp\n");
scanf("%d",&(*riemp1));
}
while(*riemp1>card1);
for (I=0;(I<*riemp1); I++)
{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);
} }
... nel caso di riempimento parziale ...
... bisogna aggiungere il parametro riemp1 passato per riferimento indicante il
riempimento
Array e Sottoprogrammi:
un esempio
Elementi di Informatica 35 Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
void leggivet_riemp(int Vet1[ ],int card1, int *riemp1) { int I;
do
{ printf("immetti riemp\n");
scanf("%d",&(*riemp1));
}
while(*riemp1>card1);
for (I=0;(I<*riemp1); I++)
{ printf("immetti Vet[ %d ]= \n",I) ; scanf("%d", &Vet1[I]);
} }
void stampavet_riemp(int Vet1[ ],int riemp1) { int I; ; for (I=0;I<riemp1; I++)
printf("Vet1[ %d ]= %d \n”, I, Vet1[I] );
}
Il programma completo per lettura e visualizzazione dei valori nel caso di riempimento parziale dello array ...
main ()
{ const card=50;
int Vet[card], riemp;
leggivet_riemp(Vet,card, &riemp);
stampavet_riemp (Vet, &riemp);
}
Il tipo stringa di caratteri
• Una stringa di caratteri è una sequenza di caratteri ASCII, atti a rappresentare una parola, una frase, un testo
• E’ un tipo strutturato costruito con l’operatore sequenza
• Una delle operazioni tipiche sulle stringhe di caratteri è la
concatenazione di due o più stringhe, tipicamente indicata con il simbolo // (in LDP).
Es.
A=“calcolatore “ B=“elettronico”
C=A//B=“calcolatore elettronico”
Altre tipiche operazioni sono la comparazione, la copia, calcolo lunghezza, ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 37
Il tipo stringa di caratteri in C
• In C una stringa di caratteri è un array monodimensionale di caratteri ASCII terminante con il carattere null => ‘\0’
La dichiarazione di una variabile di tipo stringa è uguale a quella di un array monodimensionale :
char <nome variabile>[<lunghezza stringa>];
• Esempio: la frase “Questa è una stringa”
costituisce un array di 21 caratteri:
Q u e s t a è u n a s t r i n g a \0
elemento posizione [0] ‘Q’
elemento posizione [1] ‘u’
elemento posizione [2] ‘e’
... ....
elemento posizione [19] ‘g’
elemento posizione [19] ‘a’
elemento posizione [20] ‘\0’
… l’istruzione per l’input formattato scanf (….) non consente di immettere spazi, ovvero legge tutti i caratteri consecutivi immessi fino al primo carattere spazio
se all’esecuzione dell’istruzione scanf("%s",&b);
viene immessa la stringa:
CORSO DI ELEMENTI DI INFORMATICA la variabile b conterrà solo la stringa “CORSO”
tutti gli altri caratteri dopo lo spazio non sono considerati
… uso della funzione di input getchar()
… una considerazione ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 39
/* Legge e stampa una stringa di max 100 caratteri*/
#include <stdio.h>
main()
{const int cardinalita=101; //deve contenere 100 caratteri + ‘\0’
char c, linea[cardinalita];
int i ; i=0;
printf("Immetti stringa \n");
c=getchar(); /* funzione getchar() per input da tastiera, */
/* legge un solo carattere */
while ( i< (cardinalita - 1) && (c != ‘\n’)) // ciclo per lo input dei { linea[i] = c; // caratteri della stringa c=getchar(); // nello array linea[]
i++; // l’input termina quando } // si batte ‘return’
// aggiunge carattere di fine stringa linea[i++] = ‘\0’;
i = 0;
// Stampa stringa immessa printf(" Stringa Immessa \n");
while ( linea[i] != ‘\0’) { printf(“%c” , linea[i]);
i++;
}
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 41
/* Stampa i caratteri di una stringa e la loro codifica ASCII */
main()
{ char stringa[] = “Questa è una stringa”; // cardinalità pari a 21 (20 + ‘\0’)
int X, i = 0;
while ( stringa[i] != ‘\0’ )
{ printf ( “carattere=%c -- ASCII = %d\n”,stringa[i], stringa[i] );
i++;
}
X = 10 + ‘a’; // nell’espressione ‘a’ è uguale a 97 (suo codice ASCII )
printf(“X = %d\n”, X); // sarà stampato X = 107 }
Esempio
In C i caratteri sono rappresentati secondo il loro codice ASCII, ovvero sono considerati come degli interi, ed è possibile trattarli come tali ...
... ad esempio sommarli a numeri interi o conoscere il loro codice ASCII ...
Carattere = Q -- ASCII = 81 Carattere = u -- ASCII = 117 Carattere = e -- ASCII = 101 Carattere = s -- ASCII = 115 Carattere = t -- ASCII = 116 Carattere = a -- ASCII = 97 .
. .
Carattere = g -- ASCII = 103 Carattere = a -- ASCII = 97
Output del programma
X = 107
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 43
Definizione del problema: Calcolare l’occorrenza di ciascun carattere alfabetico minuscolo in una frase
Definizione dei dati del problema:
I: la frase, ovvero l’array che la contiene
Pi: i caratteri della frase devono essere tutti minuscoli U: per ciascun carattere minuscolo componente la frase il numero di volte che esso compare nella frase
Pu: il numero di volte che ciascun carattere minuscolo compare nella frase non negativo
Esempio
Esempio
Nome variabile Descrizione Tipo frase array monomensionale di char CHAR
Nome variabile Descrizione Tipo
count array con le occorrenze di ogni carattere INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
i, j indici INT Tabella delle variabili di algoritmo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 45
Descrizione del metodo di elaborazione:
Si dichiara lo array frase[ ], per la stringa di caratteri, e lo si inizializza con una frase nella dichiarazione stessa
Si considera un altro array monodimensionale di nome count[ ] di cardinalità 26, pari al numero delle lettere minuscole.
Si inizializzano a zero gli elementi di count[ ].
Ciascun elemento dell’array count[ ] corrisponde ad una lettera secondo l’ordine alfabetico (primo elemento lettera ‘a’, ultimo elemento lettera ‘z’).
La corrispondenza tra i caratteri minuscoli e le posizioni dell’array è fatta sulla base del codice ASCII dei caratteri: basterà sottrarre al codice ASCII di ciascun carattere il valore 97 (codice ASCII di ‘a’).
Si scandisce completamente la stringa in frase [] e ad ogni occorrenza di ciascun carattere minuscolo si incrementa di 1 il corrispondente elemento dell’array count[].
Si stampa il contenuto di count[].
/* Calcola la frequenza dei caratteri minuscoli in una frase*/
#include <stdio.h>
main()
{ char ch, frase[ ] = “questa frase contiene molti caratteri”;
int count[26] , j,i ; for (j=0; j<26;j++)
count[j]=0; // azzera elementi di count[ ] i=0;
while (frase[i]!=‘\0’)
{ if ((frase[i]>=‘a’) && (frase[i]<=‘z’) {ch=frase[i];
count[ch – ‘a’]+ +; /* incrementa di 1 il valore dell’elemento di count corrispondente al carattere ch in frase */
} i++;
}
for (j=0; j<26;j++)
printf(“%c %4i \n”, ‘a’+j, count[j]);
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 47
Definizione del problema: Calcolare l’occorrenza di ciascun carattere alfabetico minuscolo in una frase formata al massimo da 250 caratteri, leggendo da tastiera la frase e verificando che ciascun carattere
immesso sia una lettera minuscola Definizione dei dati del problema:
I: la frase, ovvero l’array che la contiene
Pi: i caratteri della frase devono essere tutti minuscoli U: per ciascun carattere minuscolo componente la frase il numero di volte che esso compare nella frase
Pu: il numero di volte che ciascun carattere minuscolo compare nella frase non negativo
Esempio
Esempio
Nome variabile Descrizione Tipo frase array monomensionale di char CHAR
Nome variabile Descrizione Tipo
count array con le occorrenze di ogni carattere INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
i, j indici INT Tabella delle variabili di algoritmo
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 49
Descrizione del metodo di elaborazione:
Si dichiara lo array frase[ ], per la stringa di caratteri,
Si leggono da tastiera i caratteri che formano la frase verificando che siano lettere minuscole e reimmettendo i caratteri non validi
Si considera un altro array monodimensionale di nome count[ ] di cardinalità 26, pari al numero delle lettere minuscole.
Si inizializzano a zero gli elementi di count[ ].
Ciascun elemento dell’array count[ ] corrisponde ad una lettera secondo l’ordine alfabetico (primo elemento lettera ‘a’, ultimo elemento lettera ‘z’).
La corrispondenza tra i caratteri minuscoli e le posizioni dell’array è fatta sulla base del codice ASCII dei caratteri: basterà sottrarre al codice ASCII di ciascun carattere il valore 97 (codice ASCII di ‘a’).
Si scandisce completamente la stringa in frase [] e ad ogni occorrenza di ciascun carattere minuscolo si incrementa di 1 il corrispondente elemento dell’array count[].
Si stampa il contenuto di count[].
/* Calcola la frequenza dei caratteri minuscoli in una frase*/
#include <stdio.h>
main()
{ const cardinalita = 251; // 250 caratteri più lo ‘\0’
char ch, frase[cardinalita ];
int count[26] , j, i ; for (j=0; j<26;j++)
count[j]=0; // azzera elementi di count[ ] i=0;
// riempe frase
printf("Immetti una frase di al MAX 250 caratteri\n");
do
{ ch = getchar();
if ((ch>='a') && (ch<='z')) { frase[i] = ch;
i++;
} }
while ( i<(cardinalita - 1) && (ch != '\n'));
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 51
frase[i]='\0'; // aggiunge carattere di fine stringa
// conta la frequenza di ciascuna lettera in frase, dove tutte le lettere sono minuscole puts(frase); // stampa la stringa contenuta in frase
i=0; // conta frequenze while (frase[ i ] != '\0')
{ ch=frase[ i ];
count[ch - 'a']++; // incrementa di 1 il valore dell’elemento di count // corrispondente al carattere ch in frase i++;
}
//stampa frequenza solo delle lettere presenti in frase for (j=0; j<26;j++)
if (count[j]!=0)
printf("%c %4i \n", 'a'+j, count[j]);
system("Pause");
}
Definizione del problema: Calcolare quanti caratteri cifra sono in una stringa di max 80 caratteri, leggendo la stringa da tastiera
Definizione dei dati del problema:
I: la stringa, ovvero gli elementi dello array che la contiene Pi: la stringa ha al massimo 80 caratteri
U: la stringa immessa; il numero totale di caratteri cifra contenuti nella stringa
Pu: il numero totale di caratteri cifra non può essere negativo
Esempio
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 53
Esempio
Nome variabile Descrizione Tipo linea array monomensionale di char CHAR
Nome variabile Descrizione Tipo
numero contatore dei caratteri cifra nella stringa INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Nome variabile Descrizione Tipo
I indici INT
c singolo carattere della stringa CHAR
Tabella delle variabili di algoritmo
Esempio
… strutturando in moduli ...
main
LeggiLinea ContaDigit
Calcolare quanti caratteri cifra sono in una stringa di max 80 caratteri, leggendo la stringa da tastiera
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 55
Descrizione del metodo di elaborazione:
.... LO STUDENTE DEFINISCA L’ALGORITMO DA USARE ...
Esempio
/* Conta i caratteri numerici in una stringa */
#include <stdio.h>
void LeggiLinea(char ln[], int max);
void ContaDigit(char ln2[], int *times);
main()
{ char linea[81];
int numero;
printf(“Inserisci una linea di testo\n”);
LeggiLinea(linea,81);
ContaDigit(linea, &numero);
printf(“La linea %s contiene %d numerici”, linea, numero);
}
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 57
Esempio
/*Legge una linea in input */
void LeggiLinea(char ln[], int max) { int i = 0;
char c;
while (((c = getchar()) != '\n') && (i < max)) {ln[i] = c;
i++;
}
ln[i] = '\0';
}
Esempio
/*Conta il numero di cifre numeriche */
void ContaDigit(char ln2[], int *times) {int i;
*times = 0;
i=0;
while (ln2[i] != '\0')
{ if ((ln2[i] >= '0') && (ln2[i] <= '9'))
*times++;
i++;
} }
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 59
Definizione del problema: Calcolare l’occorrenza di ciascuna cifra in una stringa formata al massimo da 250 caratteri, leggendo da tastiera la frase
Definizione dei dati del problema:
LO STUDENTE DEFINISCA I DATI, IL DIZIONARIO DATI E L’ALGORITMO E QUINDI SCRIVA IL PROGRAMMA
STRUTTURANDOLO CON SOTTOPROGRAMMI I: ....
Pi: ...
U: ...
Pu: ...
Esempio
Operazioni su stringhe
• Concatenazione di due o più stringhe
• Copia di una stringa in un’altra
• Calcolo della lunghezza di una stringa
• Confronto fra due stringhe (es. verificare se due stringhe sono uguali)
• …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 61
Operazioni su stringhe
• Concatenazione di due o più stringhe
…. Implica unire i due (o più) array costituenti le stringhe … A = C A L C O L A T O R E \0
E L E T T R O N I C O \0
B =
A = A // B =
C A L C O L A T O R E E L E T T R O N I C O \0
…. Un (sotto)programma per accodare lo array B allo array A …
Operazioni su stringhe
• Copia di una stringa in un’altra
…. Implica assegnare a ciascun elemento dello array copia il valore del corrispondente elemento dello array originale
A =
B =
… copia A in B
…. Un (sotto)programma per accodare lo array B allo array A …
… cioè B = A
i=0;
while (A[i] != ‘\0’) { B[i] = A[i];
i++ ;}
…
C A L C O L A T O R E \0
E L E T T R O N I C O \0
C A L C O L A T O R E \0
B =
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 63
Operazioni su stringhe
• Calcolo della lunghezza di una stringa
…. Contare quanti caratteri formano la stringa
A =
… Un (sotto)programma per contare quanti caratteri formano la stringa A … cont = 0;
while (A[cont] != ‘\0’) cont ++ ;
…
C A L C O L A T O R E E L E T T R O N I C O \0
D = Lungh (A);
Operazioni su stringhe
• Confronto fra due stringhe (es. verificare se due stringhe sono uguali)
…. Verificare se gli elementi, nei due array formanti le due stringhe, nelle posizioni con lo stesso indice sono tutti uguali
… Un (sotto)programma per … i = 0; uguale = 1;
while ((A[i] != ‘\0’) && uguale)
{ uguale = uguale && (A[i] = = B[i];
i++;
}…
A = C A L C O L A T O R E \0 C A L C O L A T O R E \0
B =
uguale = (A == B);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 65
Funzioni per le operazioni su stringhe
• Il linguaggio C dispone di funzioni, predefinite, per eseguire operazioni di stringhe, quali :
– strcat(strg1,strg2) concatenazione di stringhe – strcmp(strg1,strg2) confronto fra due stringhe – strcpy(strg1,strg2) copia la stringa strg2 in strg1 – strlen(strg1) lunghezza di una stringa
• Dette funzioni fanno parte della libreria standard <string.h>
• Esistono altre funzioni di manipolazione di stringhe, quelle indicate sono le più usate in ambiente C.
Funzioni per la manipolazione di stringhe: Esempi
#include <stdio.h>
#include <string.h> // libreria standard funzioni stringa
main ()
{const char a[]=", Evviva";
char c[200],b[20],f;
printf("Immetti stringa b \n");
scanf("%s",&b);
printf("Immetti stringa c \n");
scanf("\n%s",&c);
printf("B = %s -- C = %s\n",b,c);
if (strcmp(b,c)==0) // confronta le strighe b e c
printf ("B e C sono uguali \n");
else printf("B e C NON sono uguali\n");
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 67
strcat(b,c); //concatena b e c con stringa risultante in b
printf("\n CONCATENAZIONE B e C \n B = %s \n",b);
printf("\n C= %s \n",c);
strcat(c,a); //concatena c e a con stringa risultante in c
printf("\n CONCATENA C e A in C:\nC = %s \n",c);
printf("\n A=%s \n",a);
// stampa lunghezza stringa b
printf("\n lunghezza stringa B= %d \n",strlen(b));
strcpy(b,a); //copia stringa a in stringa b
printf("\n Copia A in B\n A =%s -- B = %s\n",a,b);
system("Pause");
}
Funzioni per la manipolazione di stringhe: Esempi
strcat(b,c);
Il valore di B è cambiato Il valore di C è immutato
strcat(c,a);
Il valore di C è cambiato Il valore di A è immutato
strcpy(b,a);
A e B ora sono uguali strcmp(b,c) Compara stringhe
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 69
Array Bidimensionali
tipo array Bidimensionale= cartesiano(T 1,T 2, … , T n) con T 1 = T 2 =...= T n = T
Tipo T = cartesiano (q1, q2, …, qm) q1=q2= ….. =qm
…. Ovvero un array bidimensionale è un array in cui ciascun elemento è a sua volta un array
… array tutti della stessa dimensione e tipo
Array Bidimensionali
… un modello interpretativo ...
A
Nome array1 2 3 4 5 6
1 2 3 4 5 6 7
Valori dell’indice (posizione componente)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 71
Array Bidimensionali
… la posizione di ciascun elemento è individuata da 2 indici …
… il primo indice, indica la riga …
… il secondo indice, indica la colonna ...
1 2 3 4 5 6
1 2 3 4 5
[1,1] [1,2] [1,3] [1,4] [1,5]
[2,1] [2,2] [2,3] [2,4] [2,5]
[6,1] [6,2] [6,3] [6,4] [6,5]
A[4,2]
Array Bidimensionali
… la posizione di ciascun elemento è individuata da 2 indici …
1 2 3 4 5 6
1 2 3 4 5
23 47 63 96 8
27 66 23 44 567
42 28 34 125 47
A[4,2] = 57
57
A[6,3] = 34
… il primo indice, indica la riga …
… il secondo indice, indica la colonna ...
… ciascuna posizione conterrà un (solo) valore …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 73
Array Bidimensionali
Parametri caratterizzanti un array bidimensionale:
• Strutturali:
• Nome dello array
• Tipo componente
• Cardinalità di riga: numero di righe costituenti lo array
• Cardinalità di colonna: numero di colonne costituenti lo array
Array Bidimensionali
Parametri caratterizzanti un array bidimensionale:
• di utilizzo:
• Indice di riga: appartenete ad un tipo ordinato
• Indice di colonna: appartenete ad un tipo ordinato
la coppia ordinata [indice di riga, indice di colonna] indica la posizione di un elemento nello array bidimensionale.
Gli indici possono essere espressi tramite:
• una costante (es. A[4,2], elemento in quarta riga e seconda colonna)
• una variabile (es. A[I, J], elemento in riga i-esima e colonna j- esima)
• una espressione (es. A[c+d*e, k],
(elemento dello array nella riga corrispondente al valore di c+d*e, e k-esima colonna)
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 75
Array Bidimensionali
Parametri caratterizzanti un array bidimensionale:
• di utilizzo:
• Riempimento: numero di elementi effettivamente utilizzati
• Riempimento di riga
• Riempimento di colonna
N.B. non confondere Riempimento con Cardinalità Deve sempre essere :
indice riga Cardinalità riga
indice colonna Cardinalità colonna Riempimento riga Cardinalità riga
Riempimento colonna Cardinalità colonna
Array Bidimensionali
La dichiarazione di una variabile di tipo array bidimensionale è fatta specificando:
• tipo componente
• nome dello array (nome della variabile)
• cardinalità di riga e di colonna dello array (racchiusa tra parentesi quadre)
<tipo> <nome_array_bidim> [<cardinalità_riga] [cardinalità_colonna>]
Es.:
int A[10] [15];
float Mat[7] [22];
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 77
Array Multidimensionali
… generalizzando opportunamente ….
… un array di array di array di array …. Quante sono le dimensioni
… tutti array dello stesso tipo …
… per ciascuna dimensione, tutti array con stessa cardinalità …
… posizione individuata mediante tanti indici quanti sono le dimensioni
… un indice per ciascuna dimensione ...
<tipo><nome_array_multidim>[<card_dim1] [card_dim2>] …[card_dimK]
Es.:
int A[10] [15] [20];
float Multi [7] [22] [30] [45];
Array Bidimensionali in C
In C la dichiarazione di una variabile di tipo array è composta da:
• indicazione del tipo componente
• nome dello array
• due coppie di parentesi quadre [ ] [ ], che racchiudono le
• cardinalità di riga
• cardinalità di colonna
<tipo_componente> <nome_array> [<card_riga>] [<card_colonna>];
Esempio:
double Matrice [10] [15];
dichiara una matrice, di nome Matrice. di numeri reali con10 righe e 15 colonne
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 79
Array Bidimensionali in C
Attenzione: gli indici di riga e di colonna iniziano da 0 (zero) int A[5][6]
dichiara una matrice di nome A con 5 righe e 6 colonna Gli indici di riga vanno da 0 a 4, quelli di colonna da 0 a 5
0 1 2 3 4 5
0 1 2 3 4
[0,0] [0,1] [0,2] [0,3] [0,4]
[1,0] [1,1] [1,2] [1,3] [1,4]
[5,0] [5,1] [5,2] [5,3] [5,4]
A[3][1]
Array Bidimensionali in C
… la posizione di ciascun elemento è individuata da 2 indici …
0 1 2 3 4 5
0 1 2 3 4
23 47 63 96 8
27 66 23 44 567
42 28 34 125 47
A[3][1] = 57
57
A[5][2] = 34
… il primo indice, indica la riga …
… il secondo indice, indica la colonna ...
… ciascuna posizione conterrà un solo valore …
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 81
Esempio - Array Bidimensionale
Definizione del problema: Inserire i valori degli elementi di un array bidimensionale di interi, composto da 6 righe e 5 colonne, e visualizzare il contenuto dell’array così ottenuto, ordinato per righe
Definizione dei dati del problema:
I: il valore di ciascun elemento dello array bidimensionale Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
U: l’array bidimensionale ‘riempito’ con i valori degli elementi Pu: array bidimensionale non ‘vuoto’
Esempio
Nome variabile Descrizione Tipo
MAT(I,J) elemento dell’array INT
Nome variabile Descrizione Tipo
MAT array di interi con i valori immessi INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 83
Esempio - Array Bidimensionale
Descrizione del metodo di elaborazione:
Con due cicli ripetitivi innestati, si legge il valore di ciascun elemento da immettere, immettendo i valori per riga. Quindi, il ciclo più esterno controlla l’indice di riga, quello più interno l’indice di colonna.
Con due cicli ripetitivi innestati, si visualizza il contenuto dell’array, visualizzando i valori immessi per righe. Anche in qiesto caso il ciclo più esterno controlla l’indice di riga, quello più interno l’indice di colonna.
Esempio - il programma C
#include<stdio.h>
main()
{ const cardR=6, cardC=5;
// uso di costanti con nome per le cardinalità (numero)di riga e colonna
int MAT[cardR] [cardC], i,j;
// Legge in input tutti gli elementi della matrice
for (i= 0; i< cardR; i++) //scandisce le righe for (j= 0; j< cardC; j++) //scandisce le colonne { printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("% d", &MAT[i][j]);
}
// Visualizza tutti gli elementi della matrice
for (i= 0; i< cardR; i++) //scandisce le righe for (j= 0; j< cardC; j++) //scandisce le colonne printf(”(%d, %d) = % d\n",i,j, MAT[i][j]);
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 85
0 1 2 3 4 5
0 1 2 3 4
23 47 63 96 8
27 66 23 44 567
42 28 34 125 47
for (i= 0; i< cardR; i++) for (j= 0; j< cardC; j++) {
printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("% d", &MAT[i][j]);
}
i = 0
j = 0 => MAT[0,0]= 23
...
...
84 ... ...
... ...
...
j = 1 => MAT[0,1]= 47 j = 2 => MAT[0,2]= 63 j = 3 => MAT[0,3]= 96 j = 4 => MAT[0,4]= 8
i = 1
j = 0 => MAT[1,0]= 27 j = 1 => MAT[1,1]= 66 j = 2 => MAT[1,2]= 23 j = 3 => MAT[1,3]= 44 j = 4 => MAT[1,4]= 567 i = 2
j = 0 => MAT[2,0]= 84
… … i = 5
j = 0 => MAT[5,0]= 42
j = 4 => MAT[5,4]= 47 j = 1 => MAT[5,1]= 28 j = 2 => MAT[5,2]= 34 j = 3 => MAT[5,3]= 125
#include <stdio.h>
main ()
{const cardriga=3, cardcol=4;
int Vett[]={3,6,12,45}; // la cardinalità è 4, uguale al numero di valori che lo valorizzano int MAT[cardriga] [cardcol] = {{1,7, 22, 33}, {2,1, 44, 55}, {66, 77, 88,5}}
// i valori sono indicati secondo le righe int I, J;
// Stampa valori elementi dell’array Vett
for(I=0;I<4;I++) printf(“Vett[%d]=%d \n”, I, Vett[i]);
// Stampa valori elementi dell’array MAT for (I=0; I<cardriga, I++)
{ for J=0; J<cardcol, J++) printf(“ %d – “, MAT[i][j]);
printf(“\n”);
} }
Esempio
... valorizzare un array quando lo si dichiara ...
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 87
Array e sottoprogrammi in C
• In C, nell’attivazione di un sottoprogramma lo scambio di parametri (effettivi – formali) di tipo array è sempre effettuato per riferimento
• Nel caso di array monodimensionali non va indicata per il paramentro formale la cardinalità dello array
• Nel caso di array bidimensionali va indicata per il paramentro formale la cardinalità della seconda dimensione dello array
• Nel caso di array multi-dimensionali vanno indicate per il paramentro formale tutte le cardinalità eccetto quella della prima dimensione dello array
Array e sottoprogrammi in C
Es.
void leggivet(int Vet1[],int card1);
main ()
{ const card=10;
int Vet[card],I;
leggivet(Vet,card); }
Es.
void leggimat(int Mat1[][4],int cardr, int cardc) main ()
{ const cardr=2; const cardc=4;
int Mat[cardr][cardc],I,J;
Array monodimensionale: non è necessario indicare la cardinalità nel parametro formale
Array bi-dimensionale:
deve essere indicata la cardinalità della seconda dimensione nel relativo parametro formale
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 89
Array e sottoprogrammi in C
Es.
void leggimat(int Mat1[][4],int cardr, int cardc) main ()
{ const cardr=2; const cardc=4;
int Mat[cardr][cardc],I,J;
leggimat(Mat,cardr,cardc);}
… quando il numero di colonne è diverso da quello indicato (nell’esempio è 4), il sottoprogramma deve essere modificato e ricompilato … !!
… qualche considerazione …
Array e sottoprogrammi in C
#include <stdio.h>
#define COL 5 // crea un nome (un simbolo) associato al valore costante // indicato. Nel programma le occorrenze del simbolo sono // automaticamente sostituite dal valore ad esso associato void leggimat (int Mat1[ ][COL],int cardr, int cardc);
void stampamat (int Mat1[ ][COL],int cardr, int cardc);
main ()
{ const cardc=COL; const cardr=7;
int Mat[cardr][cardc];
leggimat (Mat,cardr,cardc);
stampamat (Mat,cardr,cardc);
printf("\n");
}
… una possibile soluzione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 91
Array e sottoprogrammi in C
void leggimat (int Mat1[][COL],int cardr, int cardc) {int I, J;
for (I=0;(I< cardr); I++) for (J=0;J<cardc;J++)
{ printf("immetti Mat[ %d ] [%d]= \n", I, J) ; scanf("%d", &Mat1[I][J]);
} }
… una possibile soluzione
Array e sottoprogrammi in C
void stampamat (int Mat1[][COL],int cardr, int cardc) { int I,J;
for (I=0; I<cardr; I++) { printf("\n");
for (J=0; J<cardc; J++)
printf("Mat1[%d][%d]= %d - ", I,J, Mat1[I][J]);
} }
… una possibile soluzione
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 93
• In C un record è una struct: una collezione di una o più variabili normalmente di tipo diverso raggruppate sotto lo stesso nome.
• Per dichiarare un record si usa la parola chiave struct
struct <nome struttura>
{
<tipo campo> <nome campo1>;
…………
<tipo campo> <nome campo_n>;
}
Il tipo record in C: le strutture (struct)
Esempio di struttura
/* Struttura di elementi logicamente correlati */
struct dipendente { int codice;
char nome[30];
float stipendio;
}
L’identificatore dipendente NON è una variabile:
– dipendente è il nome del tipo record definito (è l’identificatore della nuova struttura)
– il tipo dipendente sarà usato per dichiarare variabili di tipo dipendente