Título: Problema con vector y direcciones Publicado por: OnLOL en 21 Noviembre 2010, 03:47 am Estoy precticando, e intente hacer un "ordenador" de numeros, los numeros dentro de un vector, se los deberia ordenar de menor a mayor, pero el compilador me esta dando problemas, se que es con las direcciones pero no se donde tocar, fuero de eso el programa no esta terminado, por que no se como automatizar que se de cuenta si ya se termino de ordenar o le falta.
Código
Aca los Errores: Código: 19:32: error: conversión inválida de ‘int*’ a ‘int’ Título: Re: Problema con vector y direcciones Publicado por: Mr.Blue en 21 Noviembre 2010, 04:47 am Hola, bueno primero usa las etiquetas geshi para poder ver bien el codigo. :xD
Si no me quedo siego. :P En primer lugar tenes unos problemas de sintaxis en tu codigo como por ejemplo esto Citar for(a==0;a<10;a++){//obteniendo valores a==0 // Estas comparando o preguntando si a es igual a cero no es necesario en este caso inicializar int a=0, y menos aun, no podes preguntar en el for si a efectivamente es 0. Citar for(a=0;a<10;a++){//obteniendo valores Ahi quedaria Respecto a usar un puntero, me parece q te hiciste mucho lio, primero trata de entender como es la logica del ordenamiento, y luego implementa punteros, detodas formas, no usastes los punteros correctamente. Mirate este post http://foro.elhacker.net/programacion_cc/c_iniciacion_al_manejo_de_los_punteros-t299174.0.html en la funcion no entiendo que haces ahi con declarar, bool listo; y en el while (0==listo), no entiendo q haces ahi. entodo caso podes inicializar una variale ej int k=0; y luego hacer esto while (k==0){ k=1; ............ y ahi dentro ir preguntado con if si la cadena en la posicion i es mayo q cadena en la posicion i+1. algo asi if (cad>cad[i+1]){ aux=cad[a]; cad[a]=cad[a+1]; cad[a+1]=aux; } saludos. Título: Re: Problema con vector y direcciones Publicado por: OnLOL en 21 Noviembre 2010, 18:29 pm Lei lo de punteros, y lo modifique pero me sigue diciendo lo mismo, creo que el problema esta en el return, va me suena por ahi, lo que queria hacer con la variable boleana ("listo" ahora se llama "ordenado") era pasar el valor a True cuando estuviera ordenado todo el vector, para que salga del while y devuelva el valor.
Código
Lo que no entiendo es por que si yo devuelvo los valores de "array2" al puntero "arrayord" me da el error de la conversion. Aca los errores: Código: 20:27: error: conversión inválida de ‘int*’ a ‘int’ Título: Re: Problema con vector y direcciones Publicado por: Littlehorse en 21 Noviembre 2010, 19:18 pm Los arreglos locales declarados en una función permanecen solamente en el ámbito de la función respectiva.
Todo esto: Código
desaparece al finalizar la función "OrdenarMeMa" por lo tanto no puedes acceder a "array2" desde otro modulo por mas que trates de retornar su dirección; al finalizar la función "OrdenarMeMa", "array2" es inaccesible. No se que le pasara a tu GCC, porque como mínimo te tendría que haber dado un warning al retornar la dirección de una variable local desde una función. Luego, el valor de retorno de la función "OrdenarMeMa" es incorrecto, ya que esta declarada como para retornar un entero y vos estas retornando un puntero a entero: Debería ser algo así: Código
o simplemente retornar un valor entero (0,1 u bool: true, false, como gustes) para chequear si la función fallo o cumplió su tarea correctamente. Si estas pasando el arreglo a ordenar mediante un puntero, no necesitas retornar nada, ya que los arreglos locales se pasan automáticamente por referencia dado que su identificador (su nombre) actúa en forma similar a un puntero. Seguís teniendo los errores que ya te mencionaron: Código
== es para comparar, = es para asignar. Código
Estas tratando a un puntero como a un doble puntero. Dale un repaso al tema de punteros, parece difícil al principio pero luego se hace mas fácil. Saludos Título: Re: Problema con vector y direcciones Publicado por: OnLOL en 21 Noviembre 2010, 21:54 pm Me baje un manual de punteros (http://www.mygnet.net/it/descargas/manuales/uso_de_punteros_en_c.1604.zip) , y pude arreglar el programa, sin embargo parece que no era lo unico :P, ahora que me deja ejecutar lo fui viendo con el depurador el gdb creo que es, uso CodeLite que me viene todo junto, y al llegar a
Código
El cout no me muestra el valor de donde apunta el puntero "aux", lo raro es que en el debuger, el valor de la direccion incrementa y tambien me muestra el valor de "*aux" que son correctos ambos, hice un programa aparte y si me lo muestra. Aca el codigo completo: Código
Título: Re: Problema con vector y direcciones Publicado por: Littlehorse en 21 Noviembre 2010, 22:45 pm No he visto todo el código porque deje de leer cuando vi los arreglos globales. Yo te recomendaría que te bajes "Como programar en C/C++" de Deitel y Deitel y en todo caso vayas directo al capitulo de punteros.
Si no entendes algo de lo mencionado anteriormente, postea las dudas puntuales y las vemos. Esto te lo digo porque al parecer no entendiste lo que te mencione antes, y me pareció que estaba bien explicado. Es decir, en vez de modificar el diseño del programa para pasar el array por referencia, optaste por usar un array global logrando que no tenga sentido siquiera pasar nada por referencia. Es decir, un array declarado en un scope global permite que puedas acceder a ese array desde cualquier función sin necesidad de ningún tipo de pasaje ni de ningún tipo de retorno, por tanto el uso de los punteros en este caso en particular pierde el sentido completamente. Mira este ejemplo: Código
Como podrás ver, accedes perfectamente desde cualquier función al array global sin necesidad de pasarlo siquiera como parámetro, por eso mismo se denomina global. Es una mala practica declarar variables/objetos globales dado que cualquier función puede modificar su contenido y por ende se hace mas difícil validar los datos u controlar los errores. Por otro lado, el manejo de punteros es bastante amplio y dependiendo de como se utilicen depende el significado de la sentencia, no es lo mismo hacer esto: Código
que hacer esto: Código
Un ejemplo: Para ordenar un array pasándolo como referencia a una función, te basta con seguir este pequeño bosquejo: Código
Añadiendo las funciones de ordenamiento y por supuesto del ingreso de datos. El proceso a seguir es similar. Pero recomiendo que te bajes el libro que te mencione al principio, explica los punteros de manera bastante amigable y comprensible. Saludos Título: Re: Problema con vector y direcciones Publicado por: OnLOL en 23 Noviembre 2010, 00:41 am Bueno, lei lo que me dijeron, y con la mano de un amigo el programa funciona y esta mejorado, por supuesto le faltan cosas, como comprobar si hay valores repetidos, o si pongo un numero grande da cualquier cosa :P, Muchas gracias a ambos por ayudar ^.^ dejo el codigo.
Código
Saludos, y gracias :D |