Oppure

Loading
03/01/12 12:40
a_butta
Ciao a tutti.
Ho un problema nello svolgimento di un programma. Ho un array bidimensionale, una matrice NxN quadrata di interi e devo estrarre ogni colonna per sommare i numeri in essa contenuti. Ho una funzione somma che mi prende in input un vettore e me ne restituisce la somma delle componenti:
int somma(int colonna[]);
.
Il mio problema è appunto come estrarre le colonne dall'array anziché le righe. Infatti se io passo alla funzione i valori in questo modo:
for (int i=0; i < N; i++) somma(matrice[i]);

ovviamente, come giusto che sia, mi somma le componenti di ogni riga.
Per ovviare senza modificare la matrice facendone la trasposta, l'unica soluzione è passare dai puntatori o c'è qualcos'altro?
Grazie mille in anticipo! :)

PS: ovviamente la funzione somma deve rimanere con quelle caratteristiche come da traccia del problema...
aaa
03/01/12 13:03
nessuno
Se alla funzione somma passi l'array e il numero di colonna, può andare bene?

int somma(matrice[][N], colonna)

??
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
03/01/12 13:53
Poggi Marco
Ciao!

Le soluzioni sono molteplici. Io ti suggerisco di dichiarare un tipo apposta per definire un vettore in questo modo:
typedef int tvet[N][N];


In questo modo, verrà semplificata di molto la dichiarazione delle funzioni.

Un' altra possibile altra soluzione, è quella di passare il puntatore di un elemento della prima riga.
Per ricavare gli elementi della relativa colonna, basta aggiungere al puntatore il numero di colonne della matrice.
Es.:
Funzione:
int somma(int *v, int fine)
{
    int s=0, i=0;
    for (i=0; i<fine; i++)
    {
        s+=v[i*fine];
    }
    return s;
}


Alla chiamata:
for (int i=0; i<10;i++)
    {
        s+=somma(&v[0][i], 10);
    }
aaa