Domingo 15 de Diciembre de 2024, 00:29
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Hola problema con la utilizacion de punteros+array+funciones
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Hola problema con la utilizacion de punteros+array+funciones (Leído 1649 veces)
Garethsoul
Nuevo Miembro
Mensajes: 13
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
#include <iostream>
using namespace std;
int main(){
int a, b,i,j;
a=b=0;
int **m;
cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl;
cin>>a>>b;
m = new int *[a]; // array de A punteros a int
for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b]
cout<<"Ingrese la matriz por filas"<<endl;
for(i=0;i<a;i++){
for(j=0;j<b;j++)
cin>>m[i][j];
}
for(i=0;i<b;i++){
for(j=0;j<a;j++)
cout<<m[i][j];
cout<<endl;
}
delete[] m;
system("pause");
return 0;
}
------------
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
#include <iostream>
using namespace std;
void escribemat(int* t,int nf,int nc);
int main(){
int a, b,i,j;
a=b=0;
int **m;
cout<<"Ingrese la cantidad de Filas seguido de la cantidad de columnas de la Matriz"<<endl;
cin>>a>>b;
m = new int *[a]; // array de A punteros a int
for(int i=0;i<a+1;i++)m[i]= new int[b]; // m es un array de [a]*[b]
cout<<"Ingrese la matriz por filas"<<endl;
for(i=0;i<a;i++){
for(j=0;j<b;j++)
cin>>m[i][j];
}
/*for(i=0;i<b;i++){
for(j=0;j<a;j++)
cout<<m[i][j];
cout<<endl;
}*/
escribemat(&m,a,b);
delete[] m;
system("pause");
return 0;
}
void escribemat(int* t,int nf,int nc){
int i,j;
for(i=0;i<nc;i++){
for(j=0;j<nf;j++)
cout<<* t[i][j];
cout<<endl;
}
}
--------------------------
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....
Tweet
«
última modificación: Miércoles 27 de Enero de 2010, 04:09 por Garethsoul
»
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
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++
void
escribemat
(
int
**
t,
int
nf,
int
nc
)
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++
escribemat
(
m,a,b
)
;
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
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
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++
#include <iostream>
using
namespace
std
;
//int sumarF(int** H,int f, int c);
//void maxF();
void
leerM
(
int
**
M,
int
f,
int
c
)
;
int
main
(
)
{
int
nf,nc,i,j,
**
s
;
cout
<<
"Ingrese el numero de filas y de columnas"
<<
endl
;
cin
>>
nf
>>
nc
;
leerM
(
s, nf,nc
)
;
cout
<<
"La matriz es :"
<<
endl
;
for
(
i
=
0
;
i
<
nf
;
i
++
)
{
for
(
j
=
0
;
j
<
nc
;
j
++
)
{
cout
<<
s
[
i
]
[
j
]
;
}
cout
<<
endl
;
}
;
//cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl;
for
(
i
=
0
;
i
<
nf
;
i
++
)
delete
[
]
s
[
i
]
;
delete
[
]
s
;
system
(
"pause"
)
;
return
0
;
}
//funcion que lee la matriz y la devuelve al main o eso trata je
/*int sumarF(int** H,int f, int c){
int i,j,S=0;
for(i=0;i<f;i++){
for(j=0;j<c;j++){
S += H[i][j];
}
}
return S;
}
*/
void
leerM
(
int
**
M,
int
f,
int
c
)
{
int
i, j
;
M
=
new
int
*
[
f
]
;
for
(
i
=
0
;
i
<
f
;
i
++
)
M
[
i
]
=
new
int
[
c
]
;
cout
<<
"Introdusca la matriz por filas "
<<
endl
;
for
(
i
=
0
;
i
<
f
;
i
++
)
{
for
(
j
=
0
;
j
<
c
;
j
++
)
{
cin
>>
M
[
i
]
[
j
]
;
}
}
}
[/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
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
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++
#include <iostream>
using
namespace
std
;
//int sumarF(int** H,int f, int c);
//void maxF();
void
leerM
(
int
**
M,
int
f,
int
c
)
;
int
main
(
)
{
int
nf,nc,i,j,
**
s
;
cout
<<
"Ingrese el numero de filas y de columnas"
<<
endl
;
cin
>>
nf
>>
nc
;
s
=
new
int
*
[
nf
]
;
for
(
i
=
0
;
i
<
nf
;
i
++
)
s
[
i
]
=
new
int
[
nc
]
;
leerM
(
s, nf,nc
)
;
cout
<<
"La matriz es :"
<<
endl
;
for
(
i
=
0
;
i
<
nf
;
i
++
)
{
for
(
j
=
0
;
j
<
nc
;
j
++
)
{
cout
<<
s
[
i
]
[
j
]
;
}
cout
<<
endl
;
}
;
//cout<<"La suma de todos los numeros de la matriz da "<<sumarF(s,nf,nc)<<endl;
for
(
i
=
0
;
i
<
nf
;
i
++
)
delete
[
]
s
[
i
]
;
delete
[
]
s
;
system
(
"pause"
)
;
return
0
;
}
//funcion que lee la matriz y la devuelve al main o eso trata je
/*int sumarF(int** H,int f, int c){
int i,j,S=0;
for(i=0;i<f;i++){
for(j=0;j<c;j++){
S += H[i][j];
}
}
return S;
}
*/
void
leerM
(
int
**
M,
int
f,
int
c
)
{
int
i, j
;
cout
<<
"Introdusca la matriz por filas "
<<
endl
;
for
(
i
=
0
;
i
<
f
;
i
++
)
{
for
(
j
=
0
;
j
<
c
;
j
++
)
{
cin
>>
M
[
i
]
[
j
]
;
}
}
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Hola problema con la utilizacion de punteros+array+funciones