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

#11
no me gusta revivir temas tan viejos, pero lo prometido es deuda...

es una función que busca en un archivo de struc de cualquier dimensión un dato int, y vos solo le pasas la ruta del archivo, a partir de cuantos byte empieza ese dato en la estructura, cuanto mide (es redundante por que es siempre 4, error mio) y la cantidad de registros que posee (para eso ya tengo otra función que mostrare mas abajo)



int Buscar_int (const char* ruta,int principio /*luego de cuantos byte empieza el campo buscado en la estructura*/, int fin /* tamaño de int, si es redundante xd*/, int registros, int dato )
{
    FILE *f;
    int buffer;

    f=fopen(ruta,"rb");

    for(int i=0; i< registros; i++)
    {
        fseek(f,pricipio,1);

        fread(buffer, fin, 1, f);

        if (buffer==dato) //se puede hacer otra con strcpy para cadenas de caracteres
        {
            fclose(f);
            return i; //regresa lugar en el archivo en cual se encuentra
        }
    }

    fclose(f);
    return -1; //-1 si no existe
}



y la de cantidad de registros



int Cant_registros(const char* ruta, size_t tam) //size_t es lo que regresa sizeof (tipo de variable)
{
    int tamanio;

    FILE *f;
    f=fopen(ruta,"rb");
    error_archivo("\t ERROR: no se pudo abrir el archivo - T x 78", &f);
    //si, soy tan vago que hasta cree una función con un simple if(f==NULL) y mensaje...

    fseek(f,0,2);

    tamanio=(ftell(f)/tam);

    fclose(f);
    return tamanio;
}


y ahora por que yo decía que eso era algo muy general ? por que en la facultad me mandaron un trabajo con 5 estructuras diferentes (y por ende archivos diferentes) y que en todas había que hacerle cosas similares y yo de vago cree esas funciones para cualquiera que sea la estructura.
#12
genial, muchas gracias, me sacaste la duda :D
después mas tarde subiré acá la función en la que lo aplique como método practico por si alguien en algún futuro necesita un ejemplo de uso =P
huy que mal no note esas faltas de ortografía O_o

PD: viva la aritmética de punteros
#13
hola a todos, como andan ? , veran, estoy optimizando un codigo mio con funciones super genericas (que sean capases de resivir cualquier tipo de estruc y recorrer cada uno de sus campos) , el tema es que realizandolo me surgio una duda, sobre como son asignados los espacios en memoria de una estructura, por ejemplo la siguiente:



struct dato
{
    int ID;
    int lock;
};



yo se que si le doy un sizeof (dato) , me dará 8 ( cada dato int ocupa 4 byte), mi pregunta es esta, supongamos que la estructura empieza en la direccion de memora 0x0001 , esa dirección de inicio, también corresponde a la de inicio de int ID ? y si le sumo 4 byte mas, osea, 0x0005 , esa seria la dirección de memoria de int lock ?

desde ya muchas gracias.
#14
bueno, acordate, el cout es "sacar" (out en ingles)  datos en pantallas, y el cin es para ingresar (in en ingles) datos, ej:

cout[b]<<[/b]"hola mundo"<<endl;
cin  [b]>>[/b] variable;


ahora hace un intento de leer tu propio codigo linea por linea, vas a ver que a la variable opcion que controla tu dato jamas le ingresas un valor con cin, como primer instancia, y como segunda instancia, si yo ingreso, por ejemplo, un 6, va al default, y termina el programa, ya que no quedan mas instrucciones. esto es la estructura de un menu:



char opcion;
bool loop=true; //las variables tipo bool, solo poseen dos posibles valores, 0 y 1 (true / false)

while (loop)
{
cout<<"opciones de menu"<<endl;

cout<<"eleccion: ";

cin >> opcion;

  switch (opcion)
  {
//cases del switch, acordate que es tipo char, iran entre comillas simples los case, ej: case '1' :
//eso es para evitar errores mas adelante....

case '4':
loop=false //corta el while y termina programa
break;

default:
system("CLS"); //limpia pantalla, termina switch, encuentra la llave de cierra del while, y empiesa del principio
break;
  }

}

#15
si estas empezando, te doy un consejo cuando te encontras con un problema, antes de programar, pensa, "yo como ser humano,¿ como lo resuelvo ?" , una ves que ya lo tenes, solo estructuralo y dale un "paso a paso" , usando decisiones y repeticiones, y listo.
#16
acordarte también, que si vas a sacar todos los datos del archivo de una, tenes que saber la cantidad de registros que contiene y almacenarlo en un vector de la estructura. osea, si yo tengo 5 registros del tipo de estructura "fulano" , al sacarlos de una debería hacer el sizeof de fulano y al siguiente parámetro ponerle 5 en vez de 1, y lo otro que te quería agregar, es que vos al archivo le podes poner la extensión que se te cante, ya sea .dat o .fulanoestuboaquiescribiendoextenciones
#17
si, es que en el code blocks hay que ir a la parte de configuración del compilación, agregar las librerías en la solapa de linkeado, y alado en el otro panel escribir:

-L/usr/lib -lSDL -lSDL_mixer -lSDL_net -lpthread -I/usr/include/SDL -D_REENTRANT

en este caso, lo resaltado es lo importante:
fijense que alado del nombre de las librerias: SDL , SDL_mixer y SDL_net hay un -l , eso significa que cuando compile debe tomar esas librerias de la carpeta de /usr/lib en el caso de librerías (no se si estáticas o dinámicas, ya que cambia en cada caso, osea si las le das el #include con "" o con < > si mal no me equivoco)

lo saque del siguiente libro en la parte de apendice, uno altamente recomendable y que lo explica mejor que yo en la parte de apendice:

http://www.mediafire.com/view/?2zlmgjaw92bllor

y muchas gracias a todos lo que invirtieron su tiempo :D

si sale bien el game se lo dejo, junto con el codigo fuente xd
#18
ya esta, ya lo solucione , le agregue unos comandos para que me linkee bien al compilar y lo toma bien, es que era rraro que compila bien antes sin tener que hacer eso =/
#19
no, linkeada la libreria creo que esta bien, por por ejemplo, cuando declaro
Mix_Music *musica;
que pertenece a esa librería, no salta error. pero bueno, seguiré investigando gracias.
#20
hola, como andan, espero que bien.
verán, ando estudiando por mi cuenta lo que es la librería SDL y la programación con respecto a video juegos, usando base linux ( ubuntu) y de IDE Code::blocks ,
el problema es que, cuando realizo una función como :

Código (c++) [Seleccionar]
Mix_OpenAudio(22050, AUDIO_S16, 2, 4096);
Mix_LoadMUS("turbo tunnel.mp3"); 


me salta error de compilación :

undefined reference to 'Mix_OpenAudio'
undefined reference to 'Mix_LoadMUS'



no se si sera por que instale la biblioteca del SDL_mixter por separado de las demás...

bueno, les dejo el codigo completo:

Código (c++) [Seleccionar]


#include <iostream>
#include <cstring>

#include <cstdlib>
#include <stdlib.h>

#include <SDL.h> //edite en los include iniciales de mi SDL.h para que incluya a la SDL_mixter que no estaba ya que la agregue mas tarde

using namespace std;



int main ( int argc, char** argv )
{
    //inicializamos el video y audio
    SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_AUDIO);

    //loop game
    bool GameLoop=true;

    //variable para eventos
    SDL_Event evento;

    //inicializo el modo grafico con un 500 x 200
    SDL_Surface *screen;
    screen=SDL_SetVideoMode(500,800,32,SDL_HWSURFACE);
    SDL_WM_SetCaption("Ball Race", NULL);

    Mix_Music *musica;
   // Inicializamos SDL_mixer
    Mix_OpenAudio(22050, AUDIO_S16, 2, 4096);
    // Cargamos la musica
    musica = Mix_LoadMUS("turbo tunnel.mp3");

    while (GameLoop)//loop game
    {


        SDL_Flip(screen);
    }

    return 0;
}


bueno, desde ya muchas gracias.