Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Littlehorse

#301
Hilo oficial abierto!

Comienza el periodo para entregar las aplicaciones! finaliza el 30 de noviembre.  :D
#302
Hilo oficial abierto!



Comienza el periodo para entregar las aplicaciones, finaliza el día 30 de noviembre!
#303
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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;

void imprimir(); //Funcion que retorna void, no acepta ningun parámetro.

int array[]={1,2,3,4,5}; //Array global

int main()
{
imprimir(); //Llamando funcion

cin.get();
}

void imprimir()
{
for(int i=0;i<5;i++)//Imprimiendo elementos del array global
cout<<array[i]<<endl;
}


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 (cpp) [Seleccionar]
cout<<*ptr<<endl;
ptr++;


que hacer esto:

Código (cpp) [Seleccionar]
cout<<ptr[i]<<endl; // == *(ptr+i);

Un ejemplo:


Para ordenar un array pasándolo como referencia a una función, te basta con seguir este pequeño bosquejo:


Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

void imprimir(int*); //Puede ser bool o int, dependiendo si queres retornar algun valor util para chequeo de errores

int main()
{
int array[]={1,2,3,4,5};

imprimir(array); // Pasaje por referencia automatico, el identificador del array es como si fuese un puntero

cin.get();
}

void imprimir(int *ptr)
{

for(int i=0;i<5;i++)
cout<<ptr[i]<<endl;
}


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
#304
Agregados algunos términos.

Recuerden que:

CitarPueden aportar los términos que quieran con o sin su definición correspondiente, los iremos poniendo en este post y creando el glosario. Los términos pueden estar compuestos por varias palabras y las definiciones se modificaran para crear un conjunto mas o menos uniforme (extensión, registro del lenguaje utilizado...).
Saludos!
#305
Los arreglos locales declarados en una función permanecen solamente en el ámbito de la función respectiva.

Todo esto:

Código (cpp) [Seleccionar]
int aux, a=0,i, array2[10];;

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 (cpp) [Seleccionar]
int* OrdenarMeMa(int* array)

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 (cpp) [Seleccionar]
for(a==0;a<10;a++)

== es para comparar, = es para asignar.

Código (cpp) [Seleccionar]
cout<<*arrayord[a]<<" | ";

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
#306
Cuando usas callbacks lo ideal es que utilices funciones estándar u miembros static. De otra forma aparecen estos errores, ya que un miembro de una clase no es lo mismo que una función, siendo que el primero tiene un parámetro oculto (this) y opera en el marco de un objeto.

Si usas la clase a modo de contenedor siempre podes declarar todos los miembros static, pero no habría forma de acceder a las variables miembro por tanto tendrías que usar globales. No es una muy buena idea pero tal vez es la solución mas fácil, pero no tendría mucho sentido ya que seria como no utilizar una clase en absoluto.

Otra es declarar el proc como static:

Código (cpp) [Seleccionar]
static LRESULT CALLBACK Proc(HWND, UINT, WPARAM, LPARAM);

y darle un par de vueltas al resto del código.

O podes hacer un miembro static que haga como intermediario, algo así:

Código (cpp) [Seleccionar]
static LRESULT CALLBACK WrappingSome(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)//The tricky way...
{
a* ObjPtr = reinterpret_cast<a*>(GetWindowLong(hWnd, GWL_WNDPROC));
return ObjPtr->NewProc( hWnd, uMsg, wParam, lParam );
}



Y hay otras formas mas, pero comienza buscando sobre punteros a miembros para tener claro el porque del error y el porque te funciona utilizando funciones y no miembros.

Saludos

#307
Hardware / Re: Problema con Mouse Ps2
20 Noviembre 2010, 16:57 PM
No, no se puede. Como ya te ha dicho Aprendiz, PS2 no es USB, los primeros no están diseñados para conectar en caliente.

Si necesitas desconectar y conectar con el sistema encendido, compra un mouse USB.

Extendiendo un poco lo que mencionaba en mi mensaje anterior, revisa este link

Saludos
#308
Si, se puede, de lo contrario no la hubiese mencionado en primera instancia. El tema es que no vas a tener ventanas rebotando y menúes coloridos a los 5 minutos de codificar. Independientemente de la librería que elijas te vas a tener que meter a darle un tiempo para ver que podes lograr y como hacerlo.
#309
Hardware / Re: Problema con Mouse Ps2
20 Noviembre 2010, 16:18 PM
Depende de la interfaz utilizada en la conexión. Mediante USB se puede desconectar y conectar pero si la interfaz es PS2 depende de otros factores. Los dispositivos PS2 no fueron creados en primera instancia para que soporte hot swapping, aunque obviamente en la actualidad se soporta es posible que al reconectar el sistema no reconozca el dispositivo, y en esos casos no queda mas alternativa que reiniciar.



#310
CitarSisi, definitivamente quiero que sea portable, SDL lo vi facil de usar, pero como veo que dice 16BITBoy, soporta solo cargar imágenes en BMP

Con SDL podes cargar otro tipo de imágenes perfectamente utilizando SDL_IMAGE.

SDL