elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14
61  Programación / Ingeniería Inversa / Re: Programa que valida licencia por internet en: 13 Junio 2013, 00:13 am
puedes usar un firewall para caparle el acceso a internet.
62  Programación / Programación C/C++ / Re: Obtener ruta más corta en: 13 Junio 2013, 00:03 am
yo no te puedo ayudar en eso pero alguna vez he preguntado por algo parecido y me comentaron que buscara info sobre como se crean juegos y sobre los algoritmos de colisiones asi que supongo que es lo que necesitas.
63  Programación / Programación C/C++ / Re: Necesito ayuda urgente en: 12 Junio 2013, 11:10 am
Bueno, no seria tan urgente cuando ni me contestaste  :rolleyes:
De todos modos te pongo el enlace a algo que acabo de contestar donde puedes ver un codigo que te puede servir, y mucho, de apoyo para tu tarea: http://foro.elhacker.net/programacion_cc/problema_fwrite-t391462.0.html
64  Programación / Programación C/C++ / Re: Problema Fwrite en: 12 Junio 2013, 11:08 am
No he podido responderte antes. Prueba este codigo a ver si te sirve:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct stRegistro {
  6.   int ID;
  7.   char nombre[25];
  8.   int cantidad;
  9. };
  10.  
  11. int Menu(void);
  12. void ChangeStock(char *operacion, struct stRegistro *reg);
  13. void MostrarCabecera(void);
  14. void MostrarProducto(long n, struct stRegistro *reg);
  15. long LeeNumero(void);
  16. void Borrar(FILE **fa, long numero);
  17. int Size(FILE **fa, int tam);
  18. //--------------------------------------------------------------------------
  19.  
  20. int main()
  21. {
  22.   struct stRegistro reg;
  23.   struct stRegistro aux;
  24.   char nombre[25];
  25.   FILE *fa;
  26.   int i, opcion, nRegistros, encontrado, ID;
  27.   long numero;
  28.   fa = fopen("stock.dat", "r+b");          // Este modo permite leer y escribir
  29.   if(!fa) fa = fopen("stock.dat", "w+b");  // si el fichero no existe, lo crea.
  30.   do {
  31.      opcion = Menu();
  32.      switch(opcion) {
  33.         case '1': // Añadir o incrementar el stock
  34.            encontrado = 0;
  35.            ChangeStock("Añadir al stock", &aux);
  36.            nRegistros = Size(&fa, sizeof(struct stRegistro));
  37.            for(i=0; i<nRegistros; i++)
  38.            {
  39.                fread(&reg,sizeof(struct stRegistro),1,fa);
  40.                if(strcmp(aux.nombre, reg.nombre) == 0)
  41.                {
  42.                        reg.cantidad += aux.cantidad;
  43.                        fseek(fa,i*sizeof(struct stRegistro),SEEK_SET);
  44.                        fwrite(&reg, sizeof(struct stRegistro), 1, fa);
  45.                        encontrado = 1;
  46.                        break;
  47.                }
  48.            }
  49.            if(encontrado == 0)
  50.            {
  51.                if(nRegistros == 0)
  52.                        ID = 0;
  53.                else
  54.                {
  55.                        fseek(fa, 0, nRegistros);
  56.                        fread(&reg,sizeof(struct stRegistro), 1, fa);
  57.                        ID = reg.ID + 1;
  58.                }
  59.                fseek(fa, 0, SEEK_END);
  60.                aux.ID = ID;
  61.                fwrite(&aux, sizeof(struct stRegistro), 1, fa);
  62.            }
  63.            break;
  64.         case '2': // Ventas de stockaje
  65.            encontrado = 0;
  66.            ChangeStock("Venta de stockaje", &aux);
  67.            nRegistros = Size(&fa, sizeof(struct stRegistro));
  68.            fseek(fa, 0, SEEK_SET);
  69.            for(i=0; i<nRegistros; i++)
  70.            {
  71.                fread(&reg,sizeof(struct stRegistro),1,fa);
  72.                if(strcmp(aux.nombre, reg.nombre) == 0)
  73.                {
  74.                        encontrado = 1;
  75.                        if(aux.cantidad <= reg.cantidad)
  76.                        {
  77.                                reg.cantidad -= aux.cantidad;
  78.                                fseek(fa,i*sizeof(struct stRegistro),SEEK_SET);
  79.                                fwrite(&reg, sizeof(struct stRegistro), 1, fa);
  80.                        }else{
  81.                                printf("No hay suficiente stockaje de ese producto para esta venta.\n");
  82.                                MostrarCabecera();
  83.                                MostrarProducto(i, &reg);
  84.                                printf("|---------|-------------------------|--------|\n\n");
  85.                                system("PAUSE");
  86.                        }
  87.                        break;
  88.                }
  89.            }
  90.            if(encontrado == 0)
  91.            {
  92.                printf("No se puede encontrar el producto indicado.\n\n");
  93.                system("PAUSE");
  94.            }
  95.            break;
  96.         case '3': // Mostrar stock de un producto por su ID
  97.            encontrado = 0;
  98.            system("cls");
  99.            printf("Buscar stock por ID: ");
  100.            ID = LeeNumero();
  101.            nRegistros = Size(&fa, sizeof(struct stRegistro));
  102.            for(i=0; i<nRegistros; i++)
  103.            {
  104.                fread(&reg,sizeof(struct stRegistro),1,fa);
  105.                if(ID == reg.ID)
  106.                {
  107.                        encontrado = 1;
  108.                        MostrarCabecera();
  109.                        MostrarProducto(i, &reg);
  110.                        break;
  111.                }
  112.            }
  113.            if(encontrado == 0)
  114.            {
  115.                printf("No se puede encontrar el producto indicado.\n\n");
  116.            }
  117.            else
  118.            {
  119.                printf("|---------|-------------------------|--------|\n\n");
  120.            }
  121.            system("PAUSE");
  122.            break;
  123.         case '4': // Mostrar stock de un producto por su nombre
  124.            encontrado = 0;
  125.            system("cls");
  126.            printf("Buscar stock por nombre: ");
  127.            fgets(nombre,25,stdin);
  128.            for(i = strlen(nombre)-1; i && nombre[i] < ' '; i--)
  129.                nombre[i] = 0;
  130.            nRegistros = Size(&fa, sizeof(struct stRegistro));
  131.            for(i=0; i<nRegistros; i++)
  132.            {
  133.                fread(&reg,sizeof(struct stRegistro),1,fa);
  134.                if(strcmp(nombre, reg.nombre) == 0)
  135.                {
  136.                        encontrado = 1;
  137.                        MostrarCabecera();
  138.                        MostrarProducto(i, &reg);
  139.                        break;
  140.                }
  141.            }
  142.            if(encontrado == 0)
  143.            {
  144.                printf("No se puede encontrar el producto indicado.\n\n");
  145.                system("PAUSE");
  146.            }
  147.            else
  148.            {
  149.                printf("|---------|-------------------------|--------|\n\n");
  150.            }
  151.            system("PAUSE");
  152.            break;
  153.         case '5': // Mostrar todo el stockaje
  154.            encontrado = 0;
  155.            rewind(fa);
  156.            numero = 0;
  157.            system("cls");
  158.            nRegistros = Size(&fa,sizeof(struct stRegistro));
  159.            if(nRegistros > 0)
  160.            {
  161.                encontrado = 1;
  162.                MostrarCabecera();
  163.                for(i = 0; i < nRegistros; i++)
  164.                {
  165.                        fread(&reg, sizeof(struct stRegistro), 1, fa);
  166.                        MostrarProducto(numero++, &reg);
  167.                }
  168.            }
  169.            if(encontrado == 0)
  170.            {
  171.                printf("No existen entradas en el registro.\n");
  172.            }
  173.            else
  174.            {
  175.                printf("|---------|-------------------------|--------|\n\n");
  176.            }
  177.            system("PAUSE");
  178.            break;
  179.         case '6': // Eliminar del stock
  180.            system("cls");
  181.            printf("Eliminar del stock: ");
  182.            numero = LeeNumero();
  183.            Borrar(&fa, numero);
  184.            break;
  185.      }
  186.   } while(opcion != '0');
  187.   fclose(fa);
  188.   return 0;
  189. }
  190. //--------------------------------------------------------------------------
  191.  
  192. // Muestra un menú con las opciones disponibles y captura una opción del usuario
  193. int Menu()
  194. {
  195.   char resp[20];
  196.   do {
  197.      system("cls");
  198.      printf("MENU PRINCIPAL\n");
  199.      printf("--------------\n\n");
  200.      printf("1- Añadir al stock\n");
  201.      printf("2- Venta\n");
  202.      printf("3- Buscar stock por su ID\n");
  203.      printf("4- Buscar stock por su nombre\n");
  204.      printf("5- Mostrar todo el stockaje\n");
  205.      printf("6- Eliminar producto del stock por su ID\n");
  206.      printf("0- Salir\n");
  207.      fgets(resp, 20, stdin);
  208.   } while(resp[0] < '0' && resp[0] > '6');
  209.   return resp[0];
  210. }
  211. //--------------------------------------------------------------------------
  212.  
  213. // Permite que el usuario introduzca un producto por pantalla
  214. void ChangeStock(char * operacion, struct stRegistro *reg)
  215. {
  216.   int i;
  217.   char numero[6];
  218.   system("cls");
  219.   printf("%s:", operacion);
  220.   printf("\n\n");
  221.   printf("Nombre: ");
  222.   fgets(reg->nombre, 25, stdin);
  223.   // la función fgets captura el retorno de línea, hay que eliminarlo:
  224.   for(i = strlen(reg->nombre)-1; i && reg->nombre[i] < ' '; i--)
  225.      reg->nombre[i] = 0;
  226.   printf("Cantidad: ");
  227.   fgets(numero, 6, stdin);
  228.   reg->cantidad = atoi(numero);
  229. }
  230. //--------------------------------------------------------------------------
  231.  
  232. // Muestra la cabecera de la tabla por pantalla
  233. void MostrarCabecera(void)
  234. {
  235.   printf("\n");
  236.   printf("|---------|-------------------------|--------|\n"
  237.          "|ID       |Nombre                   |Cantidad|\n"
  238.          "|---------|-------------------------|--------|\n");
  239. }
  240. //--------------------------------------------------------------------------
  241.  
  242. // Muestra un producto por pantalla
  243. void MostrarProducto(long n, struct stRegistro *reg)
  244. {
  245.        printf("|[%6ld] |%-25s| %4d   |\n", reg->ID, reg->nombre, reg->cantidad);
  246. }
  247. //--------------------------------------------------------------------------
  248.  
  249. // Lee un número suministrado por el usuario
  250. long LeeNumero()
  251. {
  252.   char numero[6];
  253.   fgets(numero, 6, stdin);
  254.   return atoi(numero);
  255. }
  256. //--------------------------------------------------------------------------
  257.  
  258. // Borra una entrada del archivo
  259. void Borrar(FILE **fa, long numero)
  260. {
  261.        struct stRegistro reg;
  262.        FILE *ftemp;
  263.        int largo, nRegistros, i;
  264.        rewind(*fa);
  265.        ftemp = fopen("temp.dat", "wb");
  266.        nRegistros = Size(*&fa,sizeof(struct stRegistro));
  267.        for(i=0; i<nRegistros; i++)
  268.        {
  269.                fread(&reg,sizeof(struct stRegistro),1,*fa);
  270.                if(numero != reg.ID)
  271.                {
  272.                        fwrite(&reg, sizeof(struct stRegistro), 1, ftemp);
  273.                }
  274.        }
  275.        fclose(ftemp);
  276.        fclose(*fa);
  277.        remove("stock.dat");
  278.        rename("temp.dat", "stock.dat");
  279.        *fa = fopen("stock.dat", "r+b");
  280. }
  281. //--------------------------------------------------------------------------
  282.  
  283. int Size(FILE **fa, int tam)
  284. {
  285.        int largo, n;
  286.        fseek(*fa, 0, SEEK_END);
  287.        largo = ftell(*fa);
  288.        n = largo / tam;
  289.        fseek(*fa, 0, SEEK_SET);
  290.        return n;
  291. }
  292. //--------------------------------------------------------------------------
  293.  
65  Programación / Programación C/C++ / Re: Necesito ayuda urgente en: 11 Junio 2013, 17:39 pm
tengo dudas con alguna que otra cosa que estáen catalan o no se que es pero intentaré ayudarte. Tengo varias preguntas para poder ayudarte. ¿Puedes usar archivos para guardar los datos o tiene que ser un array de estructuras de tamaño fijo o tiene que ser con asignacion de memoria dinamica? Dependiendo de lo que se use la cosa cambia. En el caso de usar archivos pues necesitarias tocar el tema de archivos de acceso aleatorio, para el caso de usar asignacion de memoria dinamica pues tendrias que estudiar mas el tema de punteros y el uso de malloc y free, y en el caso de usar un tamaño fijo de array de estructura pues la cosa se hace mucho mas sencilla y solo tendrias que tener claro el uso de punteros.
66  Programación / Ingeniería Inversa / Re: Un exe con secuROM en: 10 Junio 2013, 01:09 am
yo hace muchos años que no copio cds de juegos que son los que traian este tipo de proteccion pero era la version 4 y se podia copiar perfectamente usando el alcohol 120% y luego usabas la emulacion del securom del mismo alcohol o el daemon tools y funcionaba de maravilla. La version ya a avanzado pero tambien el alcohol y el daemon asi que supongo que sigue siendo posible por ese metodo.
67  Programación / Programación C/C++ / Re: Gama de colores. en: 10 Junio 2013, 00:50 am
que yo sepa la consola no admite rgb, va a 8 bits que ya es bastante. Para trabajar con rgb tienes que usar poo y ahi si que puedes usar rgb.
68  Programación / Programación C/C++ / Re: Problema Fwrite en: 10 Junio 2013, 00:13 am
que lio de codigo, todo se ve sin identar al menos donde lo estoy viendo. De todos modos creo que si lo que quieres es simplemente leer un fichero en busca de un valor concreto y si existe incrementas x pues te sobra la mitad del codigo. Yo es que no termino de entender para que abres y cierras tanto los ficheros y para que tantos. Yo lo que haria seria abrir el fichero y primero de nada me iria al final del fichero y luego obtendria la posicion, eso se hace con fseek y ftell y el valor obtenido lo divido entre el tamaño de la estructura para obtener el numero de entradas y luego en un for uso ese valor como limite para buscar el nombre de la fruta usando fread para rellenar la estructura y luego si lo encuentra le sumo el valor que sea y como tengo el valor donde fue encontrado pues me posiciono ahi en el fichero y con fwrite machaco ese registro. Para hacerlo asi tienes que haber creado el fichero con el mismo formato que lo estes leyendo ya que si para crearlo usas fprint y para luego leerlo usas fread no te va a ir bien. Busca informacion sobre archivos de acceso aleatorio en C.
69  Programación / Programación C/C++ / Re: [aporte]codigo c solo permitir una ejecucion a la vez en: 9 Junio 2013, 23:35 pm
¿createfile para ver si se esta ejecutando un proceso? ¿Pero eso lo que haria no seria crear un archivo o abrirlo y darnos el handle? Yo para eso uso dos formas diferentes, la primera lo que haria es buscar la ventana con findwindow y si la encuentra es que ya se esta ejecutando. El segundo metodo lo que haria es un snapshop de todos los procesos que esten ejecutandose y comparando el nombre de mi proceso con el que lea y si coincide pues esta ya ejecutandose.
70  Programación / Programación C/C++ / Re: bingo c++ super urgente!! en: 9 Junio 2013, 09:50 am
¿Puedes usar c++builder? Yo crearia un array de enteros tridimensional, el primer indice seria el numero de bolas que han salido de dicho carton y que se inicializa a 0 y el segundo las bolas que contiene. Reservamos la memoria necesaria dependiendo del numero de cartones que le pidamos.  Rellenaria esos valores de bolas usando rand de forma que no se puedan repetir las bolas. Una vez relleno todo pues seria ir usando rand con la misma funcion para no repetir bolas e ir buscando cada bola en todos los cartones. Si encuentro ese valor incremento el primer valor del array y cuando ese valor sea igual al numero de bolas del carton pues ya sabriamos que hay bingo. Para el resto es mas o menos igual, podrias hacer que el array fuera de mas dimensiones para poder ir viendo si se encuentran las esquinas, las diagonales... Es solo una idea.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines