• Sábado 9 de Noviembre de 2024, 02:23

Autor Tema:  Hola problema con la utilizacion de punteros+array+funciones  (Leído 1630 veces)

Garethsoul

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Hola problema con la utilizacion de punteros+array+funciones
« en: Miércoles 27 de Enero de 2010, 01:44 »
0
Buenas

Necesitaría ayuda con la utilización de punteros para pasar un array a una funcion. Porque se me es facil hacer el ejercicio si esta dentro del main() EJEMPLO:
-------------------
Código: Text
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.  
  8.     int a, b,i,j;
  9.     a=b=0;
  10.     int **m;
  11.  
  12.     cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl;
  13.             cin>>a>>b;
  14.     m = new int *[a]; // array de A punteros a int
  15.     for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b]
  16.  
  17.     cout<<"Ingrese la matriz por filas"<<endl;
  18.     for(i=0;i<a;i++){
  19.         for(j=0;j<b;j++)
  20.             cin>>m[i][j];
  21.     }
  22.     for(i=0;i<b;i++){
  23.             for(j=0;j<a;j++)
  24.                 cout<<m[i][j];
  25.             cout<<endl;
  26.         }
  27.  
  28.  
  29.  
  30. delete[] m;
  31. system("pause");
  32. return 0;
  33. }
  34.  
  35.  
------------

Pero si lo quiero usar a traves de que la funcion lo imprima se me complica...

A esto es lo que llegue yo :

--------------------------------------------
Código: Text
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void escribemat(int* t,int nf,int nc);
  6.  
  7. int main(){
  8.  
  9.     int a, b,i,j;
  10.     a=b=0;
  11.     int **m;
  12.  
  13.     cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl;
  14.             cin>>a>>b;
  15.     m = new int *[a]; // array de A punteros a int
  16.     for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b]
  17.  
  18.     cout<<"Ingrese la matriz por filas"<<endl;
  19.     for(i=0;i<a;i++){
  20.         for(j=0;j<b;j++)
  21.             cin>>m[i][j];
  22.     }
  23.     /*for(i=0;i<b;i++){
  24.             for(j=0;j<a;j++)
  25.                 cout<<m[i][j];
  26.             cout<<endl;
  27.         }*/
  28.  
  29.  
  30.     escribemat(&m,a,b);
  31.  
  32. delete[] m;
  33. system("pause");
  34. return 0;
  35. }
  36.  
  37. void escribemat(int* t,int nf,int nc){
  38.     int i,j;
  39.  
  40.     for(i=0;i<nc;i++){
  41.         for(j=0;j<nf;j++)
  42.             cout<<* t[i][j];
  43.                 cout<<endl;
  44. }
  45. }
  46.  
  47.  
--------------------------

Pero me salen los siguientes errores:
1) Cannot convert 'int***' to 'int*' for argument to 'void escribemat(int*,int,int)'
2) Invalid types 'int[int]' for array subscript.


desde ya muchas gracias. y si alguien tiene un manual en donde salga bien explicado el uso de punteros con funciones se lo agradeceria muchisimo yo ya trate con unos 6 y ninguno me lo explica de forma que lo entienda....
« última modificación: Miércoles 27 de Enero de 2010, 04:09 por Garethsoul »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Hola problema con la utilizacion de punteros+array+funciones
« Respuesta #1 en: Miércoles 27 de Enero de 2010, 03:29 »
0
Antes que nada, cuando publiques codigo, usa las etiquetas [ code][ /code] (sin espacios entre corchetes) para que tu codigo sea mas legible.

No es gran ciencia, tu variable m es de tipo int** (apuntador a apuntador de entero), por lo tanto asi lo debes declarar en la cabecera de tu funcion.

Código: C++
  1.  
  2. void escribemat(int **t,int nf,int nc)
  3.  
  4.  

y la llamada a tu funcion, escribela sin el &, puesto que m ya contiene una direccion al ser apuntador, por lo que no se necesita el &

Código: C++
  1.  
  2.     escribemat(m,a,b);
  3.  
  4.  

Pero revisando tu codigo, he notado que no liberas de manera correcta tus punteros, debes usar un ciclo adicional para eliminar, igual que usas un ciclo al principio para crear. Lee el siguiente enlace para que veas que te falta:

http://c.conclase.net/curso/index.php?cap=017

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Garethsoul

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Hola problema con la utilizacion de punteros+array+funciones
« Respuesta #2 en: Miércoles 27 de Enero de 2010, 04:14 »
0
Muchisimas gracias por responder tan bien, tan rápido y por el link.
No se me da muy bien todavía el uso de punteros con arrays je

Garethsoul

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Hola problema con la utilizacion de punteros+array+funciones
« Respuesta #3 en: Miércoles 27 de Enero de 2010, 20:02 »
0
Buenas de vuelta disculpen la molestia luego de que me explicaras como hacer con el otro puntero me di a la tarea de querer crear un programa que me leyera la matriz desde una funcion (osea le mandaba la matriz por referencia) y que luego en el main la pudiera imprimir...

Cual es el inconveniente... compila todo queda perfecto me lee la matriz pero cuando vuelvo al main y la quiero imprimir el programa se quiebra...
Código: C++
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. //int sumarF(int** H,int f, int c);
  6. //void maxF();
  7. void leerM(int** M, int f,int c);
  8.  
  9. int main(){
  10.     int nf,nc,i,j,**s;
  11.  
  12.     cout<<"Ingrese el numero de filas y de columnas"<<endl;
  13.     cin>>nf>>nc;
  14.  
  15.     leerM(s, nf,nc);
  16.  
  17.     cout<<"La matriz es :"<<endl;
  18.     for(i=0;i<nf;i++){
  19.         for(j=0;j<nc;j++){
  20.                 cout<< s[i][j];
  21.                          }
  22.                 cout<<endl;
  23.             };
  24.     //cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl;
  25.  
  26.     for(i=0;i<nf;i++)
  27.         delete[] s[i];
  28.     delete[] s;
  29.  
  30. system("pause");
  31. return 0;
  32. }
  33. //funcion que lee la matriz y la devuelve al main o eso trata je
  34. /*int sumarF(int** H,int f, int c){
  35.     int i,j,S=0;
  36.     for(i=0;i<f;i++){
  37.         for(j=0;j<c;j++){
  38.             S += H[i][j];
  39.         }
  40.     }
  41.     return S;
  42. }
  43. */
  44. void leerM(int** M, int f, int c){
  45.     int i, j;
  46.     M = new int *[f];
  47.     for(i=0;i<f;i++) M[i] = new int [c];
  48.  
  49.     cout<<"Introdusca la matriz por filas "<<endl;
  50.     for(i=0;i<f;i++){
  51.         for(j=0;j<c;j++){
  52.             cin>> M[i][j];
  53.         }
  54.  
  55. }
  56. }
  57.  
  58.  
[/code]

desde ya disculpen la molestia.

si por lo menos me tirara un error me las apañaria solo pero :S sinceramente dentro de mi logica el programa TENDRIA que andar o no?

Garethsoul

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Hola problema con la utilizacion de punteros+array+funciones
« Respuesta #4 en: Miércoles 27 de Enero de 2010, 21:04 »
0
je me auto respondo :P pero lo dejo aca por si a alguien mas le hace falta.

la razon por la que no funcionaba era porque yo guardaba la memoria (usaba new) en la funcion y la tenia que usar en el main :)

tiene que quedar asi!


Código: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //int sumarF(int** H,int f, int c);
  5. //void maxF();
  6. void leerM(int** M, int f,int c);
  7.  
  8. int main(){
  9.     int nf,nc,i,j,**s;
  10.  
  11.  
  12.     cout<<"Ingrese el numero de filas y de columnas"<<endl;
  13.     cin>>nf>>nc;
  14.     s = new int *[nf];
  15.             for(i=0;i<nf;i++) s[i] = new int [nc];
  16.  
  17.     leerM(s, nf,nc);
  18.  
  19.     cout<<"La matriz es :"<<endl;
  20.     for(i=0;i<nf;i++){
  21.         for(j=0;j<nc;j++){
  22.                 cout<< s[i][j];
  23.                          }
  24.                 cout<<endl;
  25.             };
  26.     //cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl;
  27.  
  28.     for(i=0;i<nf;i++)
  29.         delete[] s[i];
  30.     delete[] s;
  31.  
  32. system("pause");
  33. return 0;
  34. }
  35. //funcion que lee la matriz y la devuelve al main o eso trata je
  36. /*int sumarF(int** H,int f, int c){
  37.     int i,j,S=0;
  38.     for(i=0;i<f;i++){
  39.         for(j=0;j<c;j++){
  40.             S += H[i][j];
  41.         }
  42.     }
  43.     return S;
  44. }
  45. */
  46. void leerM(int** M, int f, int c){
  47.     int i, j;
  48.  
  49.     cout<<"Introdusca la matriz por filas "<<endl;
  50.     for(i=0;i<f;i++){
  51.         for(j=0;j<c;j++){
  52.             cin>> M[i][j];
  53.         }
  54.  
  55. }
  56. }
  57.  
  58.