Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Mie Mar 28, 2012 2:48 pm  Asunto:  Problema para pasar una matriz a un procedimiento Responder citandoFin de la PáginaVolver arriba

El tema es que quiero inicializar una matriz, con rango max=10 (poniendo ceros). Para ello creo un procedimiento que se encarge de eso. El procedimiento lo creo en un "header". Aca les paso el codigo, es cortito:

MAIN.CPP

#include <iostream>

using namespace std;
#include "procedimiento.h"

void inicializarMatriz(int **matriz,int rango);

int main() {
cout << "ingrese la rango de la matriz (MAX=10)"<<endl>> rango;

int matriz [10][10];
inicializarMatriz(matriz,rango);
int i,j;
i=1;
while (i<=rango){
j=1;
while (j<=rango){
cout << matriz[i][j];
j=j+1;
}
i=i+1;
{

return 0;
}



PROCEDIMIENTO.H


#ifndef PROCEDIMIENTO_H_
#define PROCEDIMIENTO_H_


void inicializarMatriz(int **matriz, int rango){
int i,j;
i=1;

while (i<=rango){
j=1;
while (j<=rango){
matriz[i][j]=0;
j=j+1;
}
i=i+1;
}
}




#endif /* PROCEDIMIENTO_H_ */


El error me lo tira en el MAIN.CPP en la linea que dice: "inicializarMatriz(matriz,rango);"

me dice: "invalids arguments Candidates are: void inicializarMatriz(int** , int)"

La verdad es que nose porque esta mal. Previo habia hechoo uno que haga lo mismo para un vector y me andaba perfecto.

Bueno cualquier ayudita que me puedan dar, bienvenida será!

Saludos. Uciel


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Mie Mar 28, 2012 2:53 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Perdon, borre sin querer una parte del MAIN.CPP, este es el verdadero.

MAIN.CPP

#include <iostream>

using namespace std;
#include "procedimiento.h"

void inicializarMatriz(int **matriz,int rango);

int main() {
cout << "ingrese la rango de la matriz (MAX=10)"<<endl>> rango;
int i=rango;
int j=rango;
int matriz [i][j];
inicializarMatriz(matriz,rango);
i=1;
while (i<=rango){
j=1;
while (j<=rango){
cout << matriz[i][j];
j=j+1;
}
i=i+1;
{

return 0;
}

El PROCEDIMIENTO.H esta bien ^^u

Salute Smile


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
csebas
Nivel 9


Edad: 71
Registrado: 16 Feb 2009
Mensajes: 1634

Carrera: No especificada
estonia.gif
MensajePublicado: Mie Mar 28, 2012 2:58 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

tu inicializar matriz recibe un puntero a un puntero de int, y vos le estas mandando un puntero.

inicializarMatriz(&matriz,rango);


Leo Género:Masculino Dragón OcultoGalería Personal de csebasVer perfil de usuarioEnviar mensaje privado
Symbolic
Nivel 6


Edad: 33
Registrado: 25 Ago 2011
Mensajes: 204
Ubicación: Avellaneda
Carrera: Informática
CARRERA.informatica.3.jpg
MensajePublicado: Mie Mar 28, 2012 3:00 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

El problema es que int** matriz es un puntero a un puntero a un entero y no una matriz. Te recomiendo pasarla como matriz[][]. Total siempre pasa por referencia, sino pasalo como int* matriz, ya que es siempre un puntero al primer elemento que aparezca.


Geminis Género:Masculino Caballo OcultoGalería Personal de SymbolicVer perfil de usuarioEnviar mensaje privado
Pablisho
Nivel 5



Registrado: 25 Sep 2008
Mensajes: 142

Carrera: Electrónica y Informática
blank.gif
MensajePublicado: Mie Mar 28, 2012 7:18 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

NO es lo mismo un array bidimensional(matriz) que un puntero a puntero!
Un array comun lo podes intercambiar con un puntero, y un puntero a puntero lo podes intercambiar con un array de punteros, que tmp es lo mismo que un array bidimensional.
Los array bidimensionales en efecto "no existen", cuando tenes una declaracion del estilo int matriz[5][10] y despues haces matriz[2][4] eso el compilador lo convierte a *(matriz + 2 * 10 + 4) (porque los array bidemensionales se ubican con todos los elementos uno al lado del otro, lo que pone en evidencia que no es lo mismo que un puntero a puntero), para el caso de una funcion cuando pasas un array multidimensional como parametro, en la definicion solo podes dejar libre la primer variable, las otras dimensiones las tenes que poner para que pueda hacer la multiplicacion cuando se mueve en el puntero(como hice mas arriba 2 *10), en efecto la definicion correcta es funcion(int matriz[][tamaño]) o funcion (int (*matriz)[tamaño])

Ahora me vas a decir y no se de cuanto es la matriz hasta que el usuario no ingresa, y bueno, por eso la tenes que declarar antes y solo usar el tamaño que necesites.

Ah y con el vector te funcionaba porque un vector si lo podes intercambiar con un puntero!


   OcultoGalería Personal de PablishoVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 12:42 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Ante todo, muchas gracias por la ayuda que me estan dando. Excelente la explicacion de "Pablisho"

Hice lo que me recomendaron y ya no tengo ninguna marca en esa linea, osea me compilo bien esa parte.

Sin embargo, me aparecio una marca en la llave final "}" que me dice:

Descripción Información Ruta Ubicación Type
expected '}' at end of input main.cpp /matriz línea 24 C/C++ Problem

¿Es un bug o que? :S


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 12:51 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

diossss.....corregi lo de la llave y me volvi a aparecer la marca en la linea

"inicializarMatriz(matriz, rango)"

probe lo de poner "inicializarMatriz(&matriz, rango)"

tmb lo de declarar el procedimiento de otras formas como

inicializarMatriz(int matriz[][rango]) o inicializarMatriz (int (*matriz)[rango])

pero sigo con el mismo error :S

¿¿que estare haciendo mal??

Saludos . Uciel


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Daiana_Stefanelli
Nivel 2



Registrado: 27 Jun 2009
Mensajes: 19
Ubicación: Bs As
Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 1:00 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

habia que inicializar la matriz? yo directamente deje que la cargue el usuario :P

cuando declaras la funcion podes hacer ser:

tipo inicializarMatriz( int matriz[10][10], rango);

cuando la vayas a usar lo haces igual, yo lo hice asi y el programa me funciono lo mas bien.


 Género:Femenino  OfflineGalería Personal de Daiana_StefanelliVer perfil de usuarioEnviar mensaje privadoMSN Messenger
Daiana_Stefanelli
Nivel 2



Registrado: 27 Jun 2009
Mensajes: 19
Ubicación: Bs As
Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 1:10 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Asi la defini yo:

#ifndef FUNCIONES_H_INCLUDED
#define FUNCIONES_H_INCLUDED

#include <iostream>
#define MAXIMO 10
using namespace std;

int validarRango ();
void cargarMatriz (short int matriz[MAXIMO][MAXIMO], short int rango);
void buscarCamino (short int matriz[MAXIMO][MAXIMO], short int rango, bool &encontrado);
void buscarEnFila (short int matriz[MAXIMO][MAXIMO],short int rango, bool &encontrado);
void buscarEnColumna (short int matriz[MAXIMO][MAXIMO],short int rango, bool &encontrado);
void saltoDeLinea();


#endif // FUNCIONES_H_INCLUDED


asi la invoco:

cargarMatriz(matriz,rango);

y asi creo el procedimiento:

void cargarMatriz (short int matriz[MAXIMO][MAXIMO], short int rango){

espero que te sirva


 Género:Femenino  OfflineGalería Personal de Daiana_StefanelliVer perfil de usuarioEnviar mensaje privadoMSN Messenger
koreano
Nivel 9



Registrado: 15 Jul 2010
Mensajes: 1796

Carrera: No especificada
blank.gif
MensajePublicado: Jue Mar 29, 2012 8:42 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

int[] y int[MAXIMO] son tipos distintos estrictamente hablando (aplica para mas de 1 "dimensión"). Son detalles de C y C++ que hay que tener en cuenta.

Código:
int bar[5][5];

void procfoo(int asd[][]) { //illegal
}

void procbar(int** asd) { //no match
}

void procpoo(int* asd) { //no match
}

void procbaz(int asd[5][5]) { // works
}

// Manera mas elegante

const int size = 500;
typedef int matriz[size][size];

void procmatriz(matriz* pepe){ ... }
matriz foo;
procmatriz(&foo);


   OcultoGalería Personal de koreanoVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 11:45 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Cita:
cuando declaras la funcion podes hacer ser:



tipo inicializarMatriz( int matriz[10][10], rango);



cuando la vayas a usar lo haces igual, yo lo hice asi y el programa me funciono lo mas bien.


Es una de las cosas que tmb probe, pero cuando invoco la funcion (bah, procedimiento) me sigue dando el mismo error:

"invalids arguments Candidates are: void inicializarMatriz(int** , int)"

mepa, que lo mejor es llevarselo a uno de los ayudantes en un pen y que lo miremos juntos en el Lab! ^^u

De todas formas, gracias a todos por la ayuda, aprendi igual algunas cositas nuevas Smile

saludoss !!


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Huey 7
Nivel 6



Registrado: 03 Mar 2010
Mensajes: 267

Carrera: Electrónica
CARRERA.electronica.5.gif
MensajePublicado: Jue Mar 29, 2012 7:46 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Uciel escribió:
Cita:
cuando declaras la funcion podes hacer ser:

tipo inicializarMatriz( int matriz[10][10], rango);

cuando la vayas a usar lo haces igual, yo lo hice asi y el programa me funciono lo mas bien.

Es una de las cosas que tmb probe, pero cuando invoco la funcion (bah, procedimiento) me sigue dando el mismo error:

"invalids arguments Candidates are: void inicializarMatriz(int** , int)"

Pestaneo Si tira eso, ¿no sigue estando definida como void inicializarMatriz(int **matriz, int rango)? Si está definida como:

void inicializarMatriz(int matriz[10][10], int rango)

o

void inicializarMatriz(int matriz[][10], int rango)

y se invoca como inicializarMatriz(matriz, rango), tiene que andar...

Ahora, trolleando:

Código:
#include <iostream>
#include <vector>
using namespace std;

int main(){
int rango;
cout << "Ingrese el rango de la matriz" << endl;
cin >> rango;
typedef vector<int> fila_de_ints;
vector<fila_de_ints> matriz(rango, fila_de_ints(rango));

//matriz inicializada con ceros y lista para usar...

return 0;}


Very Happy

_________________
Comisión de Estudiantes de Ingeniería Electrónica (ComElec)
Lista de correo - Página Web - Facebook

 Género:Masculino  OfflineGalería Personal de Huey 7Ver perfil de usuarioEnviar mensaje privado
mausq
Nivel 4


Edad: 35
Registrado: 15 Mar 2009
Mensajes: 81

Carrera: Informática
argentina.gif
MensajePublicado: Jue Mar 29, 2012 8:41 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Por que no creas la matriz(puntero a puntero en realidad) como atributo de la clase matriz. Ahí no tenes que mandarle nada. Solo llamas el método y listo.


Aries Género:Masculino Serpiente OfflineGalería Personal de mausqVer perfil de usuarioEnviar mensaje privado
Uciel
Nivel 6


Edad: 33
Registrado: 16 Ago 2010
Mensajes: 288

Carrera: Informática
argentina.gif
MensajePublicado: Sab Mar 31, 2012 12:00 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

DIOSSSS!!! al finnnnn....lo logree Very Happy ....no se porque rayos estaba definiendo la matriz como:

int matriz[i][j], osea lo cambie por un int matriz[10][10]

y el procedimiento lo defini como

void inicializarMatriz(int matriz[][10], int rango)

y me anduvo perfecto!!!

GRACIAS GENTE GRACIAS!!! despues de infinitas horas lo consegui XD

Saludos a todos =D


Tauro Género:Masculino Caballo OfflineGalería Personal de UcielVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.2057s ][ Pedidos: 20 (0.1447s) ]