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 - vangodp

#21
Si pones un valor que vaya mas lento el juego puedes ver lo que pasa.

Unos cuantos asteroides se pintan encima de la linea, luego como se borra el asteroide para que se vaya bajando se queda en blanco por que las lineas no las estas refrescando, ademas no hay por que refrescarlas, solo hay que refrescar los elementos que se mueven, todo lo demás será trabajo extra.

La solución esta en arreglar las llamadas a rand que creo que las estas haciendo mal. justo en esta linea: A.push_back(new AST(rand()&75 + 3, rand()&5 + 3));

...Tienes el borde de la pantalla que inicia a partir de la 4ª letra y lo mismo pasa con la parte de arriba, inicia en la 4ª linea.   si quieres hacer un rand que te funciones prueba eso:  bordeIzquierdo + rand() % bordeDerecho donde el borde derecho inicie dentro de ese "marco", creo que un 4 seria lo suyo. El borde derecho es lo que hace lo mismo pero impide que se salga por el lado derecho. En otras palabras... 4 + rand() % 75 hace que los asteroides inicien en la coordenada 4 y no pasen de la 74.

Ademas falto poner el srand() para que te genere valores aleatorios. te dejo el código como lo arregle y me funciono perfecto.

Quede claro que no mire nada más ;)

http://codepad.org/yNUTWY4K
#22
Programación C/C++ / Re: Problema codigo en C
23 Febrero 2015, 02:44 AM
si declaras double u[20][20]; no puedes ir en los bucles de a 20 como lo haces en for (j=0; j<=20; j++). si tienes claro que en C/C++ si inicias j= 0 de 0 a 19 tienes 20,  j<=20 es como decir < o == y va parar en == seguro.

Otra cosa que vi es que si quieres un archivo binario .dat debes poner wb en el modo de apertura: fp = fopen("Solution_LW-Solver_005.dat","wb");. La b de binario.

Arregla esas cosas y ya nos cuentas como ha ido. Quizas haya mas cosas pero no veo mas nada. =(

Suerte
#23
Reconstruyendo el post:
Aqui dejo el codigo completo: http://codepad.org/Cfv3Qp9G
dejo claro que es para ayudar al compañero Gaspi.  ;-)

Hola, cómo va todo?
Estoy con un trabajo bastante largo, y tengo un pequeño problema al ordenar una lista.
La función ordenar la llamo desde lo siguiente

Código (cpp) [Seleccionar]
void GenerarFixture(Equipo vectorequipos[], tipofixture *&fixture, int &fechastotales, int &PartidosPorFecha, int &totalequipos, tipofixture *&puntero1, tipofixture *&punterofin,tipofixture *&punteroinicial) //Genera el fixture y además me devuelve algunos parámetros necesarios para saber tamaños
{
    int i=0;
    int r=1;

    int local = 0;
    int visitante = 0;
   int y=0;
   int vec[99];
   int g=0;
LlenarVector(vectorequipos, i);


   if(i!=0){
   cout<<"Generando el fixture"<<endl;

   totalequipos = i+1;
   int t= totalequipos%2;

if (t==0){
       fechastotales=totalequipos-1;
}else fechastotales= totalequipos;

   PartidosPorFecha = totalequipos/2;

   crearlista(fixture);

   if(fechastotales!=0){

   int w=0;
   int l=1;
   while (l<=fechastotales){
       fixture=new(tipofixture);

       while(r<=totalequipos/2){

                   generarPartido(totalequipos, l, r, local, visitante);
                   ponerenlista(fixture,vectorequipos,local,visitante,i);
                   r++;
           };

       Aleatoriafecha(l,fechastotales,fixture,w,vec);
           if(puntero1==NULL && punteroinicial==NULL){ // Probablemente esta asignación esté mal hecha!
               puntero1=new(tipofixture);
               punteroinicial=new(tipofixture);
               puntero1=fixture;
               punteroinicial=fixture;
           };

       l++;

       fixture->infofixture.fuesimulado=false;

       if( l <= fechastotales){
       fixture=fixture->siguiente;
       }else punterofin=fixture->siguiente;




   };

   };

   cout<<"..."<<endl;
   cout<<"Generado!"<<endl;
   //                   <-----------------              acá llamaría a la función ordenarlista

 } else cout<<"En el archivo no hay equipos participantes!"<<endl; //si el archivo está vacío.

}



Donde puntero1 y punteroinicial pretendo que sean punteros al primer nodo de la lista fixture.

Aquí las estructuras para la lista (sé que el typedef está de más):

Código (cpp) [Seleccionar]

typedef struct{
   char equipo[31];
   int resultado;
   int paramA;
   int paramB;
   int puntos;
}tipopartido;
typedef struct{ // local y visitante tienen almacenado un array tipopartido por fecha
   tipopartido local[99];
   tipopartido visitante[99];
   }partidosfixture;

typedef struct{ //nodo de información de la lista
   int fecha;
   partidosfixture tabla[99];
   bool fuesimulado;
}info;

typedef struct tipofixture{ // la lista del fixture
info infofixture;
tipofixture *siguiente;
}tipofixture;



La función anterior funciona correctamente, pero cuando llamo a la función burbuja que creé para ordenar la lista, explota (no por error, sino porque hace comparaciones de NULL):

Código (cpp) [Seleccionar]
void OrdenarLista(int fechastotales, tipofixture *&puntero1){

   cout<<"Ordenando por fecha..."<<endl;
   tipofixture *auxiliar= NULL;
   if(auxiliar=NULL)
   {
     auxiliar=new(tipofixture);
   };
   
   auxiliar=puntero1;
   int aux=0;
   if(puntero1->siguiente==NULL){ //comprobé si era por esto que explotaba, y sí, justamente es nulo.
       cout<<"es nulo";
   }else cout<<" sigue"<<endl;

   while(puntero1!=NULL){
   for(int j=0;j<=(fechastotales-1);j++){
            auxiliar=auxiliar->siguiente;
           if(puntero1->infofixture.fecha>auxiliar->infofixture.fecha){
               aux=puntero1->infofixture.fecha;
               puntero1->infofixture.fecha=auxiliar->infofixture.fecha;
               auxiliar->infofixture.fecha=aux;
           }
       } puntero1=puntero1->siguiente;
   }


La idea es ordenar la lista por fecha en forma ascendente (ya que en aleatoriafecha estoy pasando numeros al azar desordenados), y que me quede ordenada por puntero1.
Fechastotales es el tamaño de la lista, puntero1, como dije, debería apuntar al primer nodo de la lista. La lista tiene más de un nodo, lo comprobé con salidas por pantalla, pero el error surge porque puntero1->siguiente es NULL, no entiendo porqué, quizá asigné mal el puntero.
Necesito ayuda urgente!
GRACIAS.



Uso CodeBlocks, y como dato aparte puntero1 y punteroinicial los inicié en el main como nulos. Tengo también un puntero para el final de la lista. La lista que uso en todo el programa se llama fixture.


EDITO: parece que tampoco me estaría rellenando la lista fixture, solo llena con la fecha en cada nodo, y no con los nombres (eso sólo lo hace en el primer nodo); alguna idea?
Esta es la función que uso:

Código:

Código (cpp) [Seleccionar]
void ponerenlista(tipofixture *&fixture, Equipo vectorequipos[], int &local, int &visitante, int i) //Para poner en lista tengo que revisar los índices.
{

   int a=0;


   buscarlocal(fixture,vectorequipos,local,visitante,i,a);
   buscarvisitante(fixture,vectorequipos,visitante,i,a);

}

void buscarlocal (tipofixture *&fixture, Equipo vectorequipos[], int local, int visitante, int i,int &a){ //Como el vector de equipos está ordenado por índice, hago una búsqueda binaria.

int inicio = 0;
int fin = i;
bool encontrado = false;
int pos = 0;
while (inicio<=fin && !encontrado){

   pos = (inicio+fin)/2;


   if(vectorequipos[pos].indice == local){


       encontrado=true;
       strncpy(fixture->infofixture.tabla[a].local[a].equipo, vectorequipos[pos].nombre,31);
       fixture->infofixture.tabla[a].local[a].paramA = vectorequipos[pos].paramA;
       fixture->infofixture.tabla[a].local[a].paramB = vectorequipos[pos].paramB;

       a++;
   } else if (vectorequipos[pos].indice>local){
           fin=pos-1;
           }else inicio = pos+1;

}
}
void buscarvisitante(tipofixture *&fixture, Equipo vectorequipos[], int visitante, int i, int &a){ //Búsqueda binaria para el visitante

int inicio = 0;
int fin = i;
bool encontrado = false;
int pos = 0;
while (inicio<=fin && !encontrado){
   pos = (inicio+fin)/2;
   if(vectorequipos[pos].indice == visitante){

       encontrado=true;
       strncpy(fixture->infofixture.tabla[a].visitante[a].equipo, vectorequipos[pos].nombre,31);
       fixture->infofixture.tabla[a].visitante[a].paramA = vectorequipos[pos].paramA;
       fixture->infofixture.tabla[a].visitante[a].paramB = vectorequipos[pos].paramB;
       cout<<fixture->infofixture.tabla[a].visitante[a].equipo<<endl;


       a++; // sumo acá el a porque ya terminé esta sección
   } else if (vectorequipos[pos].indice>visitante){
           fin=pos-1;
           }else inicio = pos+1;
}
}


De nuevo, nada tira error, todo compila, sigo pensando que es algo de la lista

Edit por vangodp:
aqui pongo el archivo de equipos

equipos.txt

1        1157    315    River Plate
2 736     412    Lanús
3 947     842    Independiente
4 631     526    At. de Rafaela
5 631     578    N.O. Boys
6 736     578    Estudiantes L.P.
7 789     789    Racing Club
8 578     526    Vélez Sarsfield
9 526     631    Boca Juniors
10 684     421    Tigre
11 473     473    Gimnasia y Esgrima L.P.
12 736     842    Rosario Central
13 631     736    San Lorenzo de Almagro
14 578     736    Arsenal F.C.
15 578     631    Banfield
16 736    1000    Defensa y Justicia
17 578     789    Belgrano
18 526     842    Godoy Cruz (Mza.)
19 315     578    Olimpo (B. Blanca)
20 631     947    Quilmes A.C.
#24
me parece que sobra ese if dentro de la función.

#include <stdio.h>

char* extraerPalabra ( char frase[20] ) {
    char *elemento = strtok ( frase, " " );
   
    strcpy ( frase, elemento );
   
    while ( elemento != NULL ) {
        //if ( !strcmp ( frase, elemento ) ){ // Comparamos las dos cadenas
        elemento = strtok ( NULL, " " );
       
    }
   
    return frase;
   
}

int main () {
    char frase[20] = "Hola mundo cruel.";
   
    printf ( "String mostrando la 1r palabra: ' %s '", extraerPalabra ( frase ) );
   
    getchar();
    return 0;
}
#25
Programación C/C++ / Re: Juego del Telesketch
16 Febrero 2015, 18:50 PM
 >:D Pero no se entiende un pimiento lo que hablas. Has abreviado demasiado el tema, ni dices cual es el lenguaje, si usas librerías gráficas, ni aportas nada de código..... Muy difícil de ayudarte así, de echo puedes ver que no recibes ayuda rápida.
Denos algo mas de información y así te podemos ayudar mejor.  :silbar:
#26
Si tienes una matriz de chars de 10 lineas por 10 columnas no deberías ocupar la ultima columna ya que en ella deberia ir el caracter '\0' que indica el fin de la cadena. Si ocupas las 10 columnas el compilador va intentar poner el '\0' en la 11ª  :o  ¡Y PUEDE QUE LO CONSIGA! eso es lo peor que veo. Los demás son avisos... Aun que no sabría decirte el por que.

Sobre la matriz mejor declaras de 10 por 11 así te queda el ultimo asegurado.

char matriz [10][10+1] =D

suerte
#27
Foro Libre / Re: El hacking y la soledad (?)
11 Febrero 2015, 20:15 PM
Ser hacker es así como ser un jedi. Que la fuerza te acompañe jajajaja  :laugh:
#28
no tengo mucha experiencia con memoria dinamica, pero se que malloc devuelve un puntero a void, si vas a reservar memoria para lo que sea del tipo ColaInt, no entiendo por que el cast lo haces a CrearColaInt si el tipo del puntero es ColaInt.
Para que entiendas esto es lo que deberia pasar:
void puntero = malloc(sizeof(ColaInt));
ColaInt *nueva = (ColaInt*)puntero;

...Sin embargo pasa:
ColaInt *nueva = (CrearColaInt *)puntero;

¿¿que pinta CrearColaInt ahí si el puntero es ColaInt?? :huh:
Creo que el correcto seria: ColaInt *nueva = (ColaInt *)malloc(sizeof(ColaInt));  :huh:
#29
...y ahora la parte numero 2 que esta esta muy mona. XD  ;-)
#30
Muy bien! Cual es la pregunta??? :laugh:
No eres del todo muy claro con la pregunta.