In questo tutorial impareremo a trattare gli array con Algobuild.
Ricordiamo che gli array sono delle strutture dati che contengono dati omogenei, cioè dello stesso tipo.
Ogni elemento dell’array viene identificato attraverso il nome dell’array e il suo indice che indica la posizione dell’elemento nell’array.
Per definire gli array monodimensionali utilizziamo anche il termine di vettore.
Gli array in Algobuild si possono indicare con una lettera qualunque (anche più lettere) seguita dalla variabile racchiusa tra parentesi quadre. L’indice è un valore numerico di tipo interno. Ad esempio a[i], vet[i] o ancora a[6] sono alcuni modi possibili che posso utilizzare per indicare un elemento di un vettore.
Esercizio sugli array con Algobuild
Realizziamo un semplicissimo esercizio che prende in input dei numeri e poi li stampa.
Quindi innanzitutto chiediamo quanti numeri vogliamo inserire nell’array e con un ciclo do while facciamo un controllo per verificare che il numero inserito sia maggiore di zero, per avere almeno un numero.
Dopo utilizziamo il ciclo for per inizializzare l’array e con un altro ciclo visualizziamo i dati inseriti.
Ecco il diagramma a blocchi che rappresenta un primo esercizio sugli array con algobuild.
Potremmo anche voler inizializzare un array con dei numeri random ad esempio da 1 a 10.
È possibile caricare un array con numeri random in C, ovvero con dei numeri a caso tra un intervallo di valori.
Ecco un esempio che carica in modo random, con numeri da 1 a 100, un array di 20 numeri.
A questo scopo, viene utilizzata l’istruzione srand(time(0)) che serve a inizializzare il generatore sull’ora attuale dell’elaboratore.
Questo infatti garantisce che ogni volta si ottengano valori diversi. La funzione 1+rand()%100; crea numeri casuali tra 1 e 100.
Quindi con un semplice ciclo for che scandisce tutte le posizioni dell’array vado ad inserire gli elementi nelle varie posizioni.
Ecco dunque il listato completo:
#include
#include
#define N 20
main(){
int a[N];
int i;
/*inizializzamo il generatore sull'ora attuale
dell'elaboratore time(0), in questo modo si hanno
valori diversi*/
srand(time(0));
for(i = 0; i < N; i++){
a[i]=1+rand()%100; //numeri casuali tra 1 e 100
printf("%d\t", a[i]);
}
}
```c
#include <stdio.h>
#include <time.h>
#define N 20
main(){
int a[N];
int i;
/*inizializzamo il generatore sull'ora attuale
dell'elaboratore time(0), in questo modo si hanno
valori diversi*/
srand(time(0));
for(i=0;i<N;i++){
a[i]=1+rand()%100; //numeri casuali tra 1 e 100
printf("%d\t", a[i]);
}
}
```
Chiaramente questo è solo un semplice esempio di come generare un array con numeri random in C, nella prossima lezione impareremo a generare dei numeri casuali senza ripetizioni.
Invece ad esempio i vettori di vettori sono bidimensionali; i vettori di vettori di vettori sono tridimensionali, ecc… In genere, sebbene non vi sia alcun limite, non si utilizzano più di tre dimensioni.
Il numero dei valori Costante coincide con il numero di dimensioni del vettore.
Una matrice ad esempio richiede due costanti, un vettore tridimensionale richiede tre costanti e così via.
Facciamo degli esempi:
vettore – int a[M]
matrice – int a[M][N]
vettore tridimensionale int a[M][N][P]
Rappresentazione di una matrice
Per rappresentare una matrice facciamo riferimento ad una tabella in cui il primo indice rappresenta la riga, il secondo la colonna.
<TipoElementi><NomeArray>[<Righe>] [ <Colonne>]
dove righe e colonne indicano rispettivamente il numero di righe e di colonne della matrice.
Guardiamo questa matrice di esempio, ho omesso gli indici di riga e colonna.
12
21
33
44
67
1
6
11
58
34
23
2
45
8
6
11
4
7
18
3
1
7
9
34
78
In questa matrice il numero 8, in grassetto è l’elemento (2,3) cioè di riga 2 e colonna 3 (ricordiamo che gli indici di riga e di colonna partono da 0). L’ultimo numero, 78, sarà l’elemento (4,4) cioè di riga e colonna 4.
Quindi si può accedere ad un singolo elemento di un array bidimensionale usando i doppi indici (per righe e colonne). Ad esempio A[2][3] seleziona il quarto elemento della terza riga.
Se invece utilizziamo un solo indice, ad esempio A[2], selezioniamo tutta la terza riga, che rappresenta un array monodimensionale.
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
/*Dato un intero ed un vettore di interi determinare se il numero
è presente nel vettore e quante volte compare
*/
int insert_array(int a[]){
int i, n;
printf("elementi?:");
scanf("%d", &n);
for (i=0;i<n;i++){
printf("inserisci elemento %d:", i);
scanf("%d", &a[i]);
}
return(n);
}
int stampa_array(int a[], int n) {
int i;
for (i=0;i<n;i++) {
printf("\t%d", a[i]);
}
return;
}
int ricerca(int a[], int n) {
int i, x, quanto=0;
printf("\ninserisci un numero da cercare nell'array:");
scanf("%d", &x);
for(i=0; i<n; i++) {
if(x==a[i]) {
quanto++;
}
}
if(quanto==0) {
printf("\nil numero non e' stato trovato");
}
else {
printf("\nil numero e' stato trovato %d volte", quanto);
}
return;
}
int main(){
int n, a[MAX];
n=insert_array(a);
stampa_array(a,n);
ricerca(a,n);
}
In questa lezione implementeremo un semplice algoritmo per la ricerca di elementi uguali in un array.
Per implementare questo algoritmo utilizziamo le funzioni che poi richiameremo nella funzione principale main.
Quindi realizziamo una prima funzione che permette l’inserimento dei numeri interi nell’array.
Dopo implementiamo una funzione per la stampa degli elementi dell’array.
Poi implementiamo la funzione di ricerca che quando individua elementi uguali li visualizza in output.
Ricerca di elementi uguali in un array – Procedimento
La ricerca funziona in questo modo:
Si prende il primo elemento e si confronta con il secondo, dopo con il terzo e così via fino all’ultimo.
Dopo si prende il secondo elemento e si confronta con il terzo, e così via fino all’ultimo.
Si procede fino al penultimo elemento che verrà confrontato solo con l’ultimo.
Al termine si confronta la variabile che tiene traccia del conteggio e si visualizza in output il messaggio opportuno.
Ecco dunque il listato completo in linguaggio C dell’algoritmo per la ricerca di elementi uguali in un array.
#include <stdio.h>
#include <stdlib.h>
//Ricerca di elementi uguali in un array
#define MAX 100
int insert_array(int a[]){
int i, n;
printf("quanti elementi vuoi inserire?:");
scanf("%d", &n);
for(i=0;i<n;i++) {
printf("inserisci elemento %d:", i);
scanf("%d", &a[i]);
}
return(n);
}
int stampa_array(int a[], int n){
int i;
for(i=0;i<n;i++) {
printf("%d\t", a[i]);
}
return;
}
//ricerca elementi uguali
int ricerca_uguali(int a[], int n){
int i, j, f;
f=0;
for(i=0;i<n-1;i++) {
j=i+1;
while((j<n) && (f==0)) {
if(a[i]==a[j]) {
printf("\nelementi uguali trovati: %d \t%d", a[i], a[j]);
f+=1;
}
j++;
}
}
if(f==0)
printf("\nnon ci sono uguali");
else
printf("\nci sono uguali");
return;
}
int main(){
int n, a[MAX];
n=insert_array(a);
stampa_array(a, n);
ricerca_uguali(a, n);
}
Chiaramente questo è solo un semplicissimo esempio,, più avanti proporrò altri esercizi sugli array.