In questa lezione, si inizia a parlare dell strutture dati in C, e in particolar modo dell’array.
Le strutture dati sono composte da tipi dati semplici o atomici come gli interi, i numeri reali o i caratteri nel caso del linguaggio C.
A partire da questi si costruiscono due tipologie di strutture dati quelle omogenee che sono caratterizzate dall’avere tutti elementi dello stesso tipo, e quelle eterogenee che sono composti da dati di tipo differenti. Tutte le strutture dati citate basano la loro memorizzazione sullla memoria RAM che è appunto una memoria volatile e quindi adibita solo alla memorizzazione temporanea delle informazioni.
Un array o vettore è una struttura dati mono dimensionale caratterizzata da un nome collettivo e i cui elementi sono individuati da un indice che ha un intervallo di variazione da [0, n-1] ove n-1 è il numero degli elementi diminuito di un’unità. Questo perché nel linguaggi di programmazione l’elemento con posizione zero ha significato perché rappresenta il primo indirizzo di memoria libero, ove è allocata la struttura dati come un’insieme contiguo di celle.
La dichiarazione del vettore in C avviene con tre sintassi:
tipo dati identificatore[dimensione];
tipo dati identificatore[]={e1, e2, e3, ….., en-1};
tipo dati identificatore[dimensione]={e1, e2, ….., edimensione-1};
Gli elementi dell’array devono essere del tipo dichiarato ad esempio:
int x[10]={1,3,4,5,6,-11,-22,-3,5,0};
Si definiscono per gli array in generale delle operazioni quali il caricamento dati, la stampa, il calcolo di valori di riepilogo, la ricerca, la cancellazione di elementi, l’ordinamento, il compattamento.
E’ importante che sottolineare che il vettore è una struttura dati ad accesso diretto e quindi con l’indice del vettore è possibile accedere direttamente all’elemento interessato a patto che l’indice sia nell’intervallo di variazione [0, .. , dimensione-1}.
Per gli array come ogni altra variabile è opportuno ricordare che l’uso degli stessi come parametri formali di un sotto programma prevedono solo il richiamo per indirizzo. Ad esempio una procedura può richiamare un vettore con la sintassi generale:
void nome procedura (tipo identificatore[], ….)
In questo caso il vettore viene passato per riferimento senza l’indicazione delle dimensioni effettive che possono essere specificate ma bloccano la procedura o funzione su una dimensione prefissata.
Adesso proponiamo il codice di un programma che inserisce dati in un array, stampa i dati e calcola la media come valore di ritorno di una funzione.
Ecco il codice:
#include <stdio.h>
void carica(int x[],int s);
void stampa(int x[],int s);
float media(int x[],int s);
main()
{
int n;
float m;
printf("\n Inserisci la dimensione del vettore:");
scanf("%d",&n);
int vet[n];
printf("\n Caricmento dei dati:");
getchar();
carica(vet,n);
printf("\n Stampa degli elementi:");
stampa(vet,n);
m=media(vet,n);
printf("\n La media degli elementi:%f",m);
}
void carica(int x[],int s)
{
int k;
for (k=0;k<s;k++)
{ printf("\n Inserisci elemento numero:%d:",k+1);
scanf("%d",&x[k]);
}
}
void stampa(int x[],int s)
{
int k;
printf("\n Elementi :");
for (k=0;k<s;k++)
{
printf("\nElemneto n.:%d",k+1);
printf("-->%d",x[k]);
}
}
float media(int x[],int s)
{
int somma=0;
float med=0.0;
int k;
for (k=0;k<s;k++)
somma=somma+x[k];
med=((float)somma)/((float)s);
return med;
}
Nel video è spiegato passo passo cosa fa il programma e quali sono le sue funzionalità principali.