Pagina 1 di 1

ritonare una matrice!?!?

Inviato: sab 18 nov 2006, 11:12
da Absolut
In C++ una funzione mi genera una matrice 2 x 2, e la chiamo da lmain!?

come fare per far ritornare la matrice al main!?

coem si ritorna una matrice?

thanks!

Inviato: sab 18 nov 2006, 11:47
da airex
ritorna un puntatore alla matrice oppure usa un altro metodo, qualcosa del tipo:

Codice: Seleziona tutto

void tua_funz(int **a) {
  ....
}

void main(...) {
...
 int matr[2][2];
....
  tua_funz(matr);
....
...
}

Re: ritonare una matrice!?!?

Inviato: sab 18 nov 2006, 12:07
da elettronicha
slackvitto ha scritto:In C++ una funzione mi genera una matrice 2 x 2, e la chiamo da lmain!?

come fare per far ritornare la matrice al main!?

coem si ritorna una matrice?

thanks!
Proprio come un vettore o una stringa di caratteri, col puntatore. Prova a pensare a tutte le funzioni che modificano stringhe che conosci. ;)

Inviato: sab 18 nov 2006, 14:44
da dapuzz
occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main :(
Spero che qualcuno mi smentisca :D

Inviato: sab 18 nov 2006, 14:53
da Simone_R
dapuzz ha scritto:occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main :(
Spero che qualcuno mi smentisca :D
si puoi.
nulla di più semplice

Codice: Seleziona tutto

 tipo **crea_matrice(x,y)
{
   tipo** matrice = new tipo*[x] 
   for ( int i = 0 ; i < x ; i++ ) 
   {
      matrice[i] = new tipo[y] ;
   }

   int a , b ;
   //  riempi la matrice ..... 
    matrice[a][b] = quello che vuoi;

    return matrice ;
}

Inviato: sab 18 nov 2006, 15:06
da elettronicha
In realtà i puntatori se li si sanno usare offrono un'ampia libertà, più di quanta possano far pensare coloro che "spacciano" (detto simpaticamente) linguaggi che non ne fanno uso. Il problema reale è la loro corretta gestione e la loro allocazione/deallocazione, che spesso porta a impacci o perdite di tempo. Io non sono un genio dei puntatori e ammetto che possono far sudare a volte. :lol:

Inviato: sab 18 nov 2006, 19:45
da Paoletta
dapuzz ha scritto:occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main :(
Spero che qualcuno mi smentisca :D

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

#define NUM 3

int ** func(void){

  int **mat;int i,j;

  mat=(int **)malloc(NUM*sizeof(int*));
  for(i=0;i<NUM;i++)
    mat[i]=malloc(NUM*sizeof(int));
  for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
      mat[i][j]=i;        
  return mat;     
}

int main(void){

  int** punt;int i,j;

  punt=func();
  for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
      printf("%d \n",punt[i][j]);
  return 0;
}
siccome questo è possibile in C, lo è pure in C++ 8)

Inviato: sab 18 nov 2006, 19:47
da Paoletta
oooops, non avevo visto il post di simone! chiedo venia e lascio il codice, magari se serve a qualcuno...fa in C la stessa cosa che fa simone in C++