[C++] Passaggio di una matrice a un sottoprogramma

Messaggioda Cesc99 » 26/02/2015, 17:48

Salve a tutti,ritorno,dopo tempo,a scrivere in c++ e sono un pochino arruginito riguardo il passaggio di una matrice a un sottoprogramma. Allora io nel main dichiaro la mia matrice di dimensioni d,decise dall'utente.Quindi scriverò int m[d][d]; in modo da creare la mia matrice. Il problema sorge quando voglio passare per valore la matrice al sottoprogramma. Come devo scrivere i parametri. Con i puntatori è semplice,basta fare (int *m,int d) e sto tranquillo.Ma se non volessi usare i puntatori come potrei fare? Magari se potete allegare un esempio con la lettura di una matrice,così risolviamo subito. Grazie a tutti della disponibilità :) :smt023
Cesc99
Junior Member
Junior Member
 
Messaggio: 70 di 170
Iscritto il: 07/07/2014, 21:55

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda vict85 » 26/02/2015, 18:03

Quello che scrivi di fare nel main non è standard C++, ma permesso da una estensione di gcc e io sinceramente lo sconsiglierei fortemente. Per quanto riguarda il secondo punto non puoi farlo in modo diverso da quello che hai già segnalato. Potresti farlo se il numero delle colonne fosse deciso in tempo di compilazione ma dalle premesse direi che è semplicemente impossibile (a meno di usare i template, ma in quel caso il codice si complica e non vedo alcun reale vantaggio).
vict85
Moderatore
Moderatore
 
Messaggio: 7495 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda Cesc99 » 26/02/2015, 19:13

Se quindi faccio inserire la dimensioni all'utente non ho alternative ai puntatori?
Cesc99
Junior Member
Junior Member
 
Messaggio: 71 di 170
Iscritto il: 07/07/2014, 21:55

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda vict85 » 26/02/2015, 21:18

Volendo puoi inserire la matrice in una struttura e passare la struttura ma sostanzialmente il punto è quello.

Comunque il problema è che tu hai d inserito dall'utente e definisci la matrice come int M[d][d]; Seppur il tuo compilatore te lo accetta è codice C++ non valido, non portabile e problematico se d diventa grande. Il medoto più appropriato sarebbe usare la memoria dinamica o le librerie standard.
vict85
Moderatore
Moderatore
 
Messaggio: 7499 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda Super Squirrel » 26/02/2015, 21:59

Salve a tutti,ritorno,dopo tempo,a scrivere in c++ e sono un pochino arruginito riguardo il passaggio di una matrice a un sottoprogramma. Allora io nel main dichiaro la mia matrice di dimensioni d,decise dall'utente.Quindi scriverò int m[d][d]; in modo da creare la mia matrice. Il problema sorge quando voglio passare per valore la matrice al sottoprogramma. Come devo scrivere i parametri. Con i puntatori è semplice,basta fare (int *m,int d) e sto tranquillo.Ma se non volessi usare i puntatori come potrei fare? Magari se potete allegare un esempio con la lettura di una matrice,così risolviamo subito. Grazie a tutti della disponibilità :) :smt023


provo a dire la mia, così mi tolgo anche qualche dubbio.
da quel che so gli array nel c++ sono sempre passati per riferimento. nel caso della lettura il problema non si pone, in quanto l'array non viene modificato. per esempio un semplice sottoprogramma per la lettura di una matrice potrebbe essere il seguente

Codice:
void mostra_matrice(int v[20][20], int rig, int col)
{
    for(int i = 0; i < rig; i++)
    {
        std::cout << std::endl;
        for(int j = 0; j < col; j++)
        {
            std::cout << v[i][j] << " \t ";
        }
    }
}


per quanto riguarda l'allocazione dinamica dell'array , se indispensabile, potresti usare la classe vector
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 46 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda Cesc99 » 26/02/2015, 22:50

Grazie delle risposte,gentilissimi :)
Cesc99
Junior Member
Junior Member
 
Messaggio: 72 di 170
Iscritto il: 07/07/2014, 21:55

Re: [C++] Passaggio di una matrice a un sottoprogramma

Messaggioda vict85 » 26/02/2015, 23:17

Super Squirrel ha scritto:per quanto riguarda l'allocazione dinamica dell'array , se indispensabile, potresti usare la classe vector


Supponendo l'uso del C++11 o C++14, la classe array è più appropriata nel caso in questione. D'altra parte non sono bidimensionali e io non consiglierei l'uso di
Codice:
std::array<std::array<int, d>, d> m;
quanto piuttosto di
Codice:
std::array<int, d*d> m;
ma il codice del passaggio a funzione sarebbe solo parzialmente differente da quello con il puntatore.

E comunque non è una questione di indispensabile, ma di correttezza del codice.
vict85
Moderatore
Moderatore
 
Messaggio: 7502 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite