ritonare una matrice!?!?

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Absolut
Linux 4.x
Linux 4.x
Messaggi: 1465
Iscritto il: gio 10 feb 2005, 0:00
Slackware: current
Località: Roma

ritonare una matrice!?!?

Messaggio 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!

Avatar utente
airex
Linux 1.x
Linux 1.x
Messaggi: 121
Iscritto il: sab 8 lug 2006, 11:03
Slackware: -current
Desktop: xfce
Distribuzione: Slackware64
Località: Milano
Contatta:

Messaggio 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);
....
...
}

Avatar utente
elettronicha
Master
Master
Messaggi: 1712
Iscritto il: mer 13 apr 2005, 0:00
Località: Torino
Contatta:

Re: ritonare una matrice!?!?

Messaggio 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. ;)

Avatar utente
dapuzz
Linux 4.x
Linux 4.x
Messaggi: 1137
Iscritto il: mar 16 mag 2006, 11:09
Contatta:

Messaggio 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

Simone_R
Linux 2.x
Linux 2.x
Messaggi: 218
Iscritto il: mar 12 apr 2005, 0:00
Contatta:

Messaggio 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 ;
}

Avatar utente
elettronicha
Master
Master
Messaggi: 1712
Iscritto il: mer 13 apr 2005, 0:00
Località: Torino
Contatta:

Messaggio 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:

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio 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)
Ultima modifica di Paoletta il dom 19 nov 2006, 14:43, modificato 2 volte in totale.

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio 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++

Rispondi