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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ... 160
221  Programación / Programación C/C++ / Re: Ayuda al leer archivo en: 13 Octubre 2014, 18:13 pm
Lo primero que debes hacer es verificar el numero de llaves ya que tal como esta tu fragmento las ultimas dos lineas:
Código
  1. }
  2. fi.close();
Están fuera de la función main.

Ademas:

* Si no utilizas los argumentos pasados mediante la linea de comandos eliminalos, deja la definición de la función como "int main() ...".

* Si la declaración de los arrays m1 y m2 funciona depende del compilador utilizado, no es parte del estándar de C++ (para el caso utilizar objetos de la clase vector).

* Ya que todo lo que lees del archivo son valores de tipo int no es necesario leer por linea con getline, en su lugar utiliza directamente el operador ">>".

* Para leer la primera matriz utilizas tres bucles cuando solo necesitas dos.

Para leer mediante un objeto de la clase vector la primera matriz el código fuente seria mas o menos así:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. using namespace::std;
  6.  
  7. int main()
  8. {
  9.   ifstream fi("bur26a.csv");
  10.  
  11.   if (fi.good()){
  12.      int num_elem;
  13.      fi >> num_elem;
  14.      vector< vector<int> > mat(num_elem, vector<int>(num_elem));
  15.  
  16.      for (int i = 0; i != num_elem; ++i)
  17.         for (int j = 0; j != num_elem; ++j)
  18.            fi >> mat[i][j];
  19.      fi.close();
  20.  
  21.      for (int i = 0; i != num_elem; ++i){
  22.         for (int j = 0; j != num_elem; ++j)
  23.            cout << ' ' << mat[i][j];
  24.  
  25.         cout << endl;
  26.      }
  27.   }
  28.  
  29.   return 0;
  30. }

Para leer la segunda matriz el proceso es similar.

Un saludo
222  Programación / Programación C/C++ / Re: Lista Genérica en c en: 13 Octubre 2014, 17:13 pm
validación robusta? no tengo idea que significa.
Significa que se debe verificar que toda entrada este dentro de los parámetros esperados, por ejemplo ponte a pensar que pasara si a la función que crea un nodo se le pasa un valor que no es parte de la enumeración de tipos. También se debe verificar el resultado de toda función que pueda fallar (el mejor ejemplo es la lectura de datos de un archivo y las funciones de reserva de memoria).

Un saludo
223  Programación / Programación C/C++ / Re: Ayuda con lenguaje C++ por favor en: 13 Octubre 2014, 16:54 pm
estoy aprendiendo a programar y les agradecería si me pueden ayudar con este programa que me da error: cout undeclared (first use in this function)
Si estas aprendiendo C++ el encabezado que debes incluir es <iostream> y debes indicar que el mentado objeto se encuentra en el nombre de espacios estándar mediante el prefijo "std::", de esta forma:
Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.   int cont1 = 0, cont2 = 0, i;
  6.   float rut, nota;
  7.  
  8.   for (i = 0; i < 10; i++){
  9.  
  10.      // Proceso: lectura de notas y calculo del promedio
  11.  
  12.   }
  13.  
  14.   std::cout << "Cantidad de aprobados es: " << cont1 << std::endl;
  15.   std::cout << "Cantidad de reprobados es " << cont2 << std::endl;
  16.  
  17.   return 0;
  18. }
Una alternativa al uso de "std::" es agregar la sentencia:
Código
  1. using namespace::std;
Justo antes de la definición de main en tu programa.

Por supuesto debes agregar las correcciones que ya te indico leosansan.

Un saludo
224  Programación / Programación C/C++ / Re: Ejercicio simple estructuras en: 13 Octubre 2014, 16:40 pm
No me deja ingresar el Nombre, sino que me sale seguido Sex cuando deberia salir en la siguiente linea luego de yo digitar el nombre
Ese problema se debe al uso intercalado del operador ">>" y la función getline, para solucionarlo se debe eliminar el resto de la linea después de pedir el numero de empleados y, como ya te comento ivancea96, después de pedir el pago. Un programa de ejemplo sobre el uso de la función ignore se encuentra en el tema getline().

Y la declaración del array "data" indica el numero de elementos de este mediante un valor calculado en tiempo de ejecución, el problema: su soporte depende del compilador (no es parte del estándar de C++), por ello mejor utiliza un objeto de la clase vector (hay muchos ejemplos sobre el uso de esa clase en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda).

Un saludo
225  Programación / Programación C/C++ / Re: Dev C++ me dice siempre librerias anticuadas en: 13 Octubre 2014, 05:08 am
Los mensajes de error que mencionas se deben a que en C++ los encabezados parte de la biblioteca estándar de C no deben terminar en ".h", en su lugar debe prefijarse con "c". Ademas el nombre correcto del encabezado es <iostream>, estas directivas:
Código
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <iostream.h>
  5. #include <stdlib.h>
  6. using namespace std;

Hay que cambiarlas a:
Código
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <cstdlib>
  5. using namespace std;

En cuanto a la biblioteca conio de Borland la recomendación es evitarla, las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Por ultimo cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

Un saludo
226  Programación / Programación C/C++ / Re: Lista Genérica en c en: 11 Octubre 2014, 18:26 pm
que les parece mi implementación?
Para empezar esta bien pero, como todo en programación, se puede mejorar.

Lo primero es eliminar el valor inicial de la enumeración ya que estas siempre empiezan con el valor cero, salvo una razón de peso se debe preferir el tipo double sobre el tipo float y evitar nombres en mayúsculas reservando estos para las macros y las constantes enumeradas.

Ademas:

* Los distintos tipos se pueden agrupar en una union:
Código
  1. #include <stdio.h>
  2.  
  3. enum tipo {INT, DOUBLE, STRING};
  4. typedef enum tipo Tipo;
  5.  
  6. struct nodo {
  7.   union {
  8.      int Int;
  9.      double Double;
  10.      char   *str;
  11.   } val;
  12.   Tipo tipo;
  13.  
  14.   struct nodo *sig;
  15. };
  16. typedef struct nodo Nodo;
  17.  
  18. typedef Nodo *Lista;

* En lugar de una función por cada tipo puedes utilizar una función con un numero variable de argumentos donde el ultimo argumento con nombre indica el tipo del valor, de esa forma cuando agregues tipos solo debes modificar las sentencias de selección y no crear tantas funciones.

Mas o menos así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5.  
  6. enum tipo {INT, DOUBLE, STRING};
  7. typedef enum tipo Tipo;
  8.  
  9. struct nodo {
  10.   union {
  11.      int Int;
  12.      double Double;
  13.      char *String;
  14.   } val;
  15.   Tipo tipo;
  16.  
  17.   struct nodo *sig;
  18. };
  19. typedef struct nodo Nodo;
  20.  
  21. typedef Nodo *Lista;
  22.  
  23. /* ... */
  24.  
  25. Lista LG_Apilar(Lista lst, Tipo tipo, ...);
  26. void LG_Imprimir(FILE *out, Lista lst);
  27.  
  28. int main(void)
  29. {
  30.   Lista lst = NULL;
  31.  
  32.   lst = LG_Apilar(lst, INT, 1);
  33.   lst = LG_Apilar(lst, INT, 2);
  34.   lst = LG_Apilar(lst, INT, 3);
  35.  
  36.   lst = LG_Apilar(lst, DOUBLE, 1.2);
  37.   lst = LG_Apilar(lst, DOUBLE, 3.4);
  38.   lst = LG_Apilar(lst, DOUBLE, 5.6);
  39.  
  40.   lst = LG_Apilar(lst, STRING, "Hugo");
  41.   lst = LG_Apilar(lst, STRING, "Paco");
  42.   lst = LG_Apilar(lst, STRING, "Luis");
  43.  
  44.   LG_Imprimir(stdout, lst);
  45.  
  46.   return EXIT_SUCCESS;
  47. }
  48.  
  49. /* ... */
  50.  
  51. Lista LG_Apilar(Lista lst, Tipo tipo, ...)
  52. {
  53.   Lista nuevo;
  54.  
  55.   if ((nuevo = malloc(sizeof *nuevo)) != NULL){
  56.      char *str;
  57.      va_list ap;
  58.  
  59.      va_start(ap, tipo);
  60.      switch (tipo){
  61.      case INT:
  62.         nuevo->val.Int = va_arg(ap, int);
  63.         break;
  64.      case DOUBLE:
  65.         nuevo->val.Double = va_arg(ap, double);
  66.         break;
  67.      case STRING:
  68.         str = va_arg(ap, char *);
  69.         nuevo->val.String = malloc(strlen(str) + 1);
  70.         strcpy(nuevo->val.String, str);
  71.         break;
  72.      }
  73.      va_end(ap);
  74.  
  75.      nuevo->tipo = tipo;
  76.      nuevo->sig = lst;
  77.   }
  78.  
  79.   return nuevo;
  80. }
  81.  
  82. void LG_Imprimir(FILE *out, Lista p)
  83. {
  84.   while (p != NULL){
  85.      switch (p->tipo){
  86.      case INT:
  87.         fprintf(out, "%d", p->val.Int);
  88.         break;
  89.      case DOUBLE:
  90.         fprintf(out, "%.2f", p->val.Double);
  91.         break;
  92.      case STRING:
  93.         fprintf(out, "%s", p->val.String);
  94.         break;
  95.      }
  96.      fputc('\n', out);
  97.  
  98.      p = p->sig;
  99.   }
  100. }

En ambos programas faltan muchas cosas como una validación robusta y la liberación de la memoria antes de finalizar el programa.

Un saludo
227  Programación / Programación C/C++ / Re: Reemplazar conio.h en: 11 Octubre 2014, 16:42 pm
Creo que hasta existe un conio2.h  :laugh: pero te dice vangodp lo mejor seria no usarlo nunca [...]
Edito: Si no es estandar, no sería caer en lo mismo?
El problema no es el uso de extensiones (características especificas del compilador y/o plataforma) sino que una parte significativa de los cursos no documentan que es C/C++ estándar y cuales son las extensiones con el resultado de que al final el estudiante no sabe que puede utilizar sin importar el entorno y que no.

En resumen si conoces las diferencias y hay una razón de peso no hay problema en el uso de extensiones, el problema es si no existen.

Un saludo
228  Programación / Programación C/C++ / Re: Funcion que no puede retornar un struct [C] en: 11 Octubre 2014, 03:33 am
Si logra encontrar un registro que tenga ese DNI deve devolver una copia de ese registro, entonces ¿que debería de poner en lugar de esos NULL para el caso de que no se encuentre el registro? ¿Que tengo que devolver?
Lo primero que debes hacer es publicar la declaración del alias (o macro) "Record" ya que la respuesta a tu problema depende de esa declaración (o definición, depende del caso). Lo mismo aplica a headerLength y recordLength.

fread devuelve un entero, pero no tengo idea que ponerle en lugar de NULL para evitar esos warnings.
El prototipo de fread es:
Código
  1. int fread(
  2.   void *addr,        /* Direccion donde se almacenaran los caracteres */
  3.   size_t size_elem,  /* Numero de bytes por elemento */
  4.   size_t num_elem,   /* Numero de elementos a leer   */
  5.   FILE *in           /* stream del cual se leeran los caracteres */
  6. );
La función trata de leer de "in" un numero de bytes igual a size_elem * num_elem y los almacena a partir de la dirección addr. Si no se utiliza el valor de retorno de la función el orden del segundo y tercer argumento no importa. La función después del intento de lectura retorna un entero igual al numero de bytes leídos entre el numero de bytes por elemento.

En base a lo anterior el bucle que mencionas se debe cambiar a (para leer elemento por elemento del archivo):
Código
  1. /* Mientras se lea con exito un registro del archivo */
  2. while (fread(&tmp, recordLength, 1, fd) == 1){
  3.   /* Comparar el campo del registro con el valor buscado */
  4.   if (strncmp(DNI,tmp.DNI,strlen(tmp.DNI)) == 0){
  5.      struct Record data = tmp;
  6.      return data;
  7.   }
  8. }

También hay que realizar otros cambios al programa, entre ellos:

* En caso de error puedes utilizar la función perror para que el mensaje de error se genere automáticamente.
* Si encuentras un registro con el valor buscado no cierras el archivo.
* La función strncmp solo compara los primeros N caracteres, si el valor del campo es "123" y el valor buscado "123456" la función retornara verdadero cuando las cadenas son distintas.

Un saludo
229  Programación / Programación C/C++ / Re: Pregunta libreria <ctype.h> en: 11 Octubre 2014, 02:55 am
En C++ (según el estándar C++98) cuando utilizas una función parte de la biblioteca estándar de C debes incluir el encabezado correspondiente (en tu caso <cctype>), si no lo haces el programa es "ill formed", en buen cristiano no hay garantías sobre su comportamiento (cualquier cosa puede pasar desde obtener los resultados esperados hasta el legendario BSOD).

Un saludo
230  Programación / Programación C/C++ / Re: Ayuda Vectores Dinámicos en: 8 Octubre 2014, 15:08 pm
Habría que saber a que te refieres con "vectores dinámicos" : al uso de los operadores new y delete o a la clase vector, en cualquier caso puedes encontrar ejemplos de ambos utilizando el motor de búsqueda de los foros.

Un saludo
Páginas: 1 ... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines