Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Una volta dichiarati o inizializzati dei vettori o delle matrici in un programma, per agire su di esse mediante
delle funzioni, necessariamente dovremo usare funzioni by reference. Nel caso (che non analizzeremo) in
cui vettori e matrici verranno letti (o determinati) e stampati all’interno di una funzione di tipo void (e non
nel main), non sarà necessario l’impiego delle funzioni by reference.
Invece, per agire tramite funzioni su vettori e matrici già dichiarati, usiamo funzioni di tipo by reference
perché quando un array è passato ad una funzione, quello che deve essere passato è l’indirizzo di memoria
del suo elemento iniziale. Dunque struttureremo funzioni di questo tipo tramite l’ausilio di puntatori a
vettori e le proprietà che legano questi ultimi ai vettori.
ESEMPIO:
// Questo programma stampa tramite una funzione un vettore inizializzato nel main
#include<stdio.h>
#define DIM 5
int* pnt;
pnt = &conta[0];
input_vett(pnt);
#include<stdio.h>
#define DIM 5
input_vett(conta); // Qui non ci sono problemi nell’inserire “conta”, perchè nel main conta è
definito come un vettore e sarà trattato come tale
ESEMPIO:
// Questo programma legge un vettore nel main ed usa una funzione per stamparlo
#include<stdio.h>
input_vett(conta, dim_conta);
Per le matrici, il procedimento è molto simile (ricordiamo che anche le matrici sono vettori). Alcune
precisazioni, tuttavia, sono necessarie.
Prima di tutto, ricordiamo che il computer non “vede” le matrici come tabelle, o griglie, ma come un
vettore in cui ogni elemento è esso stesso un vettore. Per questo motivo (non approfondiremo perché è un
discorso complesso e non utile ai fini pratici, in questa fase) nel passare il puntatore della matrice alla
funzione, dobbiamo specificare il numero di colonne. Basti sapere che il compilatore userà un certo indice
k, calcolato come segue, per muoversi all’interno della matrice attraverso gli indirizzi di memoria:
k = ( i * DIM_COLONNE ) + j
Dove i e j sono gli indici che usiamo per muoverci all’interno della matrice.
ESEMPIO:
Si faccia il caso di una matrice con 4 righe e 6 colonne. Consideriamo il numero corrispondente alla
posizione (1,3) della matrice. Per come stiamo procedendo, vogliamo che il compilatore faccia riferimento
al contenuto dell’indirizzo di memoria corrispondente all’indirizzo di memoria della prima cella più un certo
valore, che sarà proprio l’indice k.
k = (1 * 6) + 3 = 9
Infatti, l’elemento corrispondente alla posizione (1,3) si trova a 9 celle di distanza dal primo elemento:
ESEMPIO:
// Questo programma usa una funzione per leggere e stampare una matrice quadrata di dimensione prefissata
ESEMPIO:
// Questo programma usa una funzione per leggere e stampare una matrice quadrata di stabilita dall’utente (bisogna inserire la dimensione fra i parametri della
funzione, in maniera analoga a quanto si è visto con i vettori)
ESEMPIO:
// Questo programma usa una funzione per leggere e stampare una matrice con dimensione di righe e colonne di stabilita dall’utente (bisogna inserire la dimensione
delle righe e quella delle colonne fra i parametri della funzione, in maniera analoga a quanto si è visto con i vettori)