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ú

Temas - erickgracia

#1
Hola a todos, tengo la siguiente duda:


Estoy escribiendo bytes dentro de un archivo de la siguiente manera:


short lenght = 6;

fwrite(&lenght, sizeof(lenght), 1, file);


esperando que el archivo guarde en Hexadecimal los Bytes 0x00 0x06, en ese orden. Sin embargo el archivo de salida sale primero 0x06 y luego el 0x00.

Haciendo este mismo movimiento con variables int =6, me guarda  los bytes en el orden 0x06 0x00 0x00 0x00, o sea, tambien me los manda al reves de lo esperado.



He investigado y tiene que ver con un tema llamado Endianess, (Big Endian, Little Endian), lo cual me pareció interesante, pero aun no me quito la duda de como hacer para que mi programa guarde los bits del modo que yo quiero. Mas que nada con las variables de tamaño short.  Alguna idea? ;D


De antemano, gracias por su tiempo
#2
Buenas tengan, estoy teniendo una duda con respecto al como es posible crear un archivo de imagen mediante código, tomando en cuenta que todos los archivos tienen un trasfondo binario  ;D, y quisiera saber si alguen me pudiera explicar , por lo menos con pseudocódigo como sería posible generar una cadena de información de 1 y 0´s (o codigo hexadecimal, la verdad no tengo idea como esta confomada un formato de imagen ya que nunca tuve la oportunidad de estudiar una ingeniería  >:( )

dejo un ejemplo base para dar idea:

* ¿Como se podria generar/exportar una imagen... digamos .png a partir de leer un archivo .jpg (o mediante puro codigo :D ), y que el archivo nuevo sea legible por un programa que muestre imagenes?

-Esto por supuesto ya sabiendo los codigos de los metadatos, el número mágico, etc.


Perdon si esta posteado en la sección equivocada, pero tengo un considerable conocimiento en c++ y debido al manejo de memoria dinámica que ofrece este lenguaje me parece el lugar adecuado para postear mi duda :D


-De antemano gracias por su tiempo
#3
Buenas a todos  ;D, mi problema es el siguiente, ando practicando programando un juego de plataformas, , ya tengo las acciones de movimiento del personaje y las plataformas las cuales detectan al personaje cuando esta arriba de las mismas.

Mi duda viene al momento de querer programar que el personaje de un salto en la pantalla, y mas que codigo , quería ver si alguno de ustedes podría explicarme la lógica para crear una función, o funciones para que esto se logre, tengo una idea mas o menos clara de como se hace esto, pero siento que me falta una pieza de este rompecabezas que me impide desarrollarlo.

mi duda tambien va con respecto a que todo el movimiento del salto, lo de junto con el loop del juego para que todos los demas componentes se muevan, o si ya de plano me recomiendan el uso de hilos .


gracias por su tiempo cualquier respuesta que aporte a mi responder mi duda será bienvenida
#4
hola a todos :)

En esta ocasión no tengo ningun error (por lo menos de compilación :D , aunque esperaría que checaran si se puede escribr mejor la matriz) , pero tengo un warning que me marcan el IDE al declarar esta matriz


const char ejemplo[10][10]={
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X'},
};


Estos son los warnings en cuestion, ¿tienen alguna idea de por que los marcan y como evitarlos?, no me molestan al momento de ejecutar, pero si me perturba el ver los warnings marcados en el codigo jejeje.

Citar
Multiple markers at this line
   - non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by
    default]
   - extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

De antemano gracias por su tiempo, si me pudieran decir una manera más óptima de declarar este tipo de matriz sería una gran ayuda (y puede que hasta sea el motivo por el que me marca el warning xD).  ;D
#5
Hola a todos, estoy empezando a programar en lenguaje SDL, y he hecho un par de prácticas generadas correctamente, el problema es cuando tengo este código que no hace nada del otro mundo, solo abre una ventana y muestra una imagen dentro de ella. al correr el programa, se muestra la ventana con la imagen sin embargo a los pocos segundo la ventana No Responde y debo cerrarla, tengo alguna idea de que debe ser por el loop pero no tengo exactitud de que lo causa o el por que e traba el programa a l ejecutarse...

Les dejo el código a continuación :)


#include"SDL/SDL.h"
#include"Objeto.h"

int main(int argc, char* args[]){
SDL_Surface* screen;
screen=SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
Objeto obj;
bool running=true;
while(running){
SDL_BlitSurface(obj.imagen,NULL,screen, NULL);
SDL_Flip(screen);
}
SDL_Quit();
return 0;
}
#6
Programación C/C++ / Sokoban en C++
17 Noviembre 2014, 18:03 PM
Hola compañeros :)

Ando buscando hacer un sokoban y me gustaría que me asesoraran en los conceptos básicos para crearlo. Tengo entendido que voy a tener que hacer uso de una matriz para el escenario, pero me haría mucho favor si me pudieran decir los conceptos básicos para crear este juego, no pido código, pero si una entrada en materia :D, se que es muy sencillo , varios me lo han comentado y por eso mismo quiero empezar con este proyecto.

Tambien me serviría si me pudieran decir alguna librería gráfica y donde podría ver el tema de multi hilos si se es posible en este lenguaje.
#7
Programación C/C++ / Rompecabezas numerico
8 Agosto 2014, 17:18 PM
Hola buenos días, tardes... me encuentro armando un rompecabezas numericos, de eso que tienes que acomodar los numeros moviendolos de uno en uno. El problema que tengo es que al intentar hacer movimientos, al presionar las flechas de arriba o la flecha izquierda, esta funcion se repite hasta que recorre todos los números en esa fila/columna :huh: , creo que va a ser algo en las funciones de mover para  arriba o para abajo, que tienen en comun el "num-1", pero no se exactamente que hace eso o el porque... de antemano gracias y perdonen algunas anomalías en el codigo en caso de haber, soy prinicipante en esto de la programación  ;D

saludos



#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<time.h>

#define num 4

#define arriba 72
#define abajo 80
#define izquierda 75
#define derecha 77

void generar_rompecabezas();
void imprimir_rompecabezas();
void comprobar_completo();
void mover();
void desordenar();

int main(){
int puzzle[num][num],reg=0, mov;
//unsigned char mov;
generar_rompecabezas(puzzle);
desordenar(250,puzzle);
imprimir_rompecabezas(puzzle);

do{
system("cls");
imprimir_rompecabezas(puzzle);
comprobar_completo(puzzle, reg);
if(reg==0){
mov=getch();
mover(mov,puzzle);
}
else{
system("cls");
printf("Completado");
}
}
while(reg!=1);

getch();
return 0;
}



void generar_rompecabezas(int puzzle[num][num]){
int aux=1;
int x,y;

for(x=0;x<num;x++){
for(y=0;y<num;y++){
puzzle[x][y]=aux;
if(x==num-1 && y==num-1){
puzzle[x][y]=0;
}
//printf("matriz %d %d = %d\n",x,y,puzzle[x][y]);
aux++;
}
}
}

void imprimir_rompecabezas(int puzzle[num][num]){
int x,y;

for(x=0;x<num;x++){
if(x==0)
printf("\t\t\t---------------------\n");
printf("\t\t\t|");
for(y=0;y<num;y++){
if(puzzle[x][y]<10){
printf(" ");
}
if(puzzle[x][y]==0)
printf("   |");
else
printf(" %d |", puzzle[x][y]);
}
printf("\n");
printf("\t\t\t---------------------\n");
}
}

void comprobar_completo(int puzzle[num][num],int reg){
int x,y;
int aux=1;
int z=num*num;

for(x=0;x<num;x++){
for(y=0;y<num;y++){
if(puzzle[x][y]==aux){
aux++;
}
}
}


if(aux==z){
printf("resuelto");
reg=1;

}
else{
printf("No Resuelto");
reg=0;
}

}

void mover(int direccion, int puzzle[num][num]){
int x,y,aux;
for(x=0;x<num;x++){
for(y=0;y<num;y++){
if(puzzle[x][y]==0){
switch(direccion){
case izquierda:
if(y!=num-1){
aux=puzzle[x][y];
puzzle[x][y]=puzzle[x][y+1];
puzzle[x][y+1]=aux;
printf("\nMovimiento izquierda\n");
}
break;

case derecha:
if(y!=0){
//printf("%d a cambiar con %d",puzzle[x][y], puzzle[x][y-1]);
aux=puzzle[x][y];
puzzle[x][y]=puzzle[x][y-1];
puzzle[x][y-1]=aux;
printf("\nMovimiento derecha\n");
}
break;

case arriba:
if(x!=num-1){
aux=puzzle[x][y];
puzzle[x][y]=puzzle[x+1][y];
puzzle[x+1][y]=aux;
printf("\nMovimiento Arriba\n");
}
break;

case abajo:
if(x!=0){
aux=puzzle[x][y];
puzzle[x][y]=puzzle[x-1][y];
puzzle[x-1][y]=aux;
printf("\nMovimiento abajo\n");
}
break;
}
}
}
}
}

void desordenar(int cantidad, int puzzle[num][num]){
int x,opc;
srand (time(NULL));
for(x=0;x<cantidad;x++){

opc=(rand()%4+1);

switch(opc){
case 1:
mover(arriba, puzzle);
break;
case 2:
mover(abajo, puzzle);
break;
case 3:
mover(izquierda, puzzle);
break;
case 4:
mover(derecha, puzzle);
break;
}
}
}
#8
Hola, tengo un problema con una lista enlazada...lo que haria el programa  es guardar una lista de paises ademas de un ID para cada uno... basicamente al querer cargar los datos al abrir el archivo, pareciera que me da un loop o un error la funcion  "cargarPaises();" o mas bien una funcion  que esta adentro de ella que se llama "insertarPaisesG()" que lo que buscaria es que ingrese los datos de un .bat a la lista enlazada de acuerdo a los parametros que tenga la funcion.

aqui les dejo el codigo de las funciones especificas donde tengo el problema.


Estas seria la estrutura basica de la lista enlazada y sus punteros del principio y final

typedef struct paises{
int IDpais;
char Pais[20];
int NoParticipantes;
int NoMedallas;

struct paises* p;
} Paises;

Paises*PAIprimero=NULL;
Paises*PAIultimo=NULL;




estas serian las funciones con las que tendria problemas, agrego la funcion que usè para guardar los datos, que al parecer me sirvio, pero por si llega a ser el problema lo dejo (soy algo novato, asi que espero me perdonen algunas redundancias o errores de novato aqui  ;D )


void insertarPaisesG(int ID, char Nombre[]){
Paises * nuevo;
nuevo = (Paises *)malloc(sizeof(Paises));

nuevo->IDpais=ID;
strcpy(nuevo->Pais, Nombre);


if(PAIprimero->p!=PAIultimo){
PAIprimero=nuevo;
PAIprimero->p=PAIultimo;

}
else{
nuevo->p=NULL;
PAIultimo->p=nuevo;
PAIultimo=nuevo;
}

}







void guardarPaises(){
printf("\n\n\nGuardando informaci�n de paises");
FILE * archivo = fopen("Paises.dat", "wb");
if(archivo == NULL){
printf("\n\n\nError al guardar en archivo");
return;
}

Paises * recorre = PAIprimero;
while (recorre != NULL){
fwrite(recorre, sizeof(Paises), 1, archivo);
recorre = recorre->p;
}

fclose(archivo);
}








void cargarPaises(){
FILE * archivo = fopen("Paises.dat", "rb");
if(archivo == NULL){
printf("\n\n\nError al cargar desde archivo");
return;
}

Paises * actual = (Paises *) malloc(sizeof(Paises));
int leidos;
do{
leidos = fread(actual, sizeof(Paises), 1, archivo);
if (leidos == 1)
insertarPaisesG(actual->IDpais, actual->Pais);
} while (leidos == 1);

fclose(archivo);
}



de antemano gracias por la ayuda, y si se llegara a ocupar el codigo completo lo pondria mas adelante  ;D
#9
Hola a todos, mi duda, es el como guardar datos en un fichero para una lista enlazada, osease un conjunto de estructuras que contienen un puntero apuntando a otra estructura sucesivamente(por lo menos una explicaciòn muy, muy, muy generalizada :D).

mi duda es si alguien me podria instruir de que pasos o como deberia implementar los FILE de manera que se queden almacenados todos los elementos que agregue a la lista.
No pido un codigo que pueda copiar y pegar ya que seria contra las reglas del foro,pero por lo menos me seria de utilidad el saber en que momentos aplicar los ficheros y a que dirigirlos de manera justificada.
:)
#10
Hola, soy nuevo en este foro , tengo un problema al intentar hacer un codigo que borre los datos de una lista enlazada:

lo que intente fue que al declarar apuntadores de los nodos llamados anterior, actual y siguiente, dados que apuntaran a 3 nodos diferentes de la lista mientras se va recorriendo dentro del    "while(recorre != NULL){}"   y que si encontraba el valor de llave , el apuntador del nodo anterior , apunte a "siguiente" , y y "eliminar" el nodo "actual" mediante el comando free();


El problema es que al ejecutar el programa entero y entra en la funcion de eliminarLista();  se detiene el programa despues de pedir el valor del entero a eliminar (o tal vez esta teniendo un loop el ciclo, la verdad no estoy seguro) estaria muy agradecido si me ayudaran con este problema, ya que es una base para un trabajo de la universidad del cual me basarè.


he aqui el codigo, o por lo menos la parte que de eliminar datos, tambien pongo la estructura con la que anda trabajando el codigo.



typedef struct nodo{
int llave;
struct nodo * sig; /* auto referencia */
}nodoLista;



void eliminarLista(){
nodoLista* anterior;
nodoLista* actual;
nodoLista* siguiente;
nodoLista* recorre=primero;

int op;
printf("Cual es el entero a eliminar?");
scanf("%d", &op);

anterior=primero;
actual=primero;
siguiente=primero->sig;

while(recorre != NULL){

if(recorre->llave == op){
anterior->sig=siguiente;
free(actual);
}
else{}
anterior=recorre;
recorre = recorre->sig;
actual=recorre;
if(recorre != NULL){siguiente = recorre->sig;}
}
}













y por si acaso, aqui va el codigo entero(tomen en cuenta que es un archivo sencillo para practicar  ;D ) :

#include <stdio.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1

typedef int boolean;

boolean estaVacia();

typedef struct nodo{
int llave;
struct nodo * sig; /* auto referencia */
}nodoLista;

nodoLista * primero = NULL;
nodoLista * ultimo = NULL;

void insertarInicio();
void insertarFinal();
void mostrarLista();
void eliminarLista();

int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
int opcion;
do{
printf("\n\nMENU");
printf("\n0.- Salir");
printf("\n1.- Agregar un nodo al inicio");
printf("\n2.- Mostrar los valores de la lista");
printf("\n3.- Agregar un nodo al final");
printf("\n4.- Eliminar un elemento");

printf("\n\nDame tu opci�n");
scanf("%d", &opcion);

switch(opcion){
case 0:
break;
case 1:
insertarInicio();
break;
case 2:
mostrarLista();
break;
case 3:
insertarFinal();
break;
case 4:
eliminarLista();
break;
}

} while (opcion != 0);


return EXIT_SUCCESS;
}

void insertarInicio(){
nodoLista * nuevo;
nuevo = (nodoLista *)malloc(sizeof(nodoLista));

printf("\n\nDame el valor de la llave");
scanf("%d", &nuevo->llave);
nuevo->sig = primero;
primero = nuevo;

if(primero->sig == NULL)
ultimo = primero;
}

void insertarFinal(){
if (estaVacia()){
insertarInicio();
return;
}

nodoLista * nuevo;
nuevo = (nodoLista *)malloc(sizeof(nodoLista));

printf("\n\nDame el valor de la llave");
scanf("%d", &nuevo->llave);
nuevo->sig = NULL;
ultimo->sig = nuevo;
ultimo = nuevo;
}

void mostrarLista(){
if (estaVacia()){
printf("\n\nLa lista est� vac�a");
return;
}
nodoLista * recorre = primero;
while (recorre != NULL){
printf("%d  ", recorre->llave);
recorre = recorre->sig;
}
}

void eliminarLista(){
nodoLista* anterior;
nodoLista* actual;
nodoLista* siguiente;
nodoLista* recorre=primero;

int op;
printf("Cual es el entero a eliminar?");
scanf("%d", &op);

anterior=primero;
actual=primero;
siguiente=primero->sig;

while(recorre != NULL){

if(recorre->llave == op){
anterior->sig=siguiente;
free(actual);
}
else{}
anterior=recorre;
recorre = recorre->sig;
actual=recorre;
if(recorre != NULL){siguiente = recorre->sig;}
}
}

boolean estaVacia(){
if (primero == NULL)
return TRUE;
else
return FALSE;
}