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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 [139] 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 ... 160
1381  Programación / Programación C/C++ / Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C] en: 5 Enero 2012, 17:03 pm
El algoritmo (procesar cada carácter de forma secuencial) esta bien. Lo que si hay que cambiar son algunos detalles como los nombres de los encabezados (deberían ser <cstdio> y <cstring>) y evitar el uso de la función "gets". Tampoco utilizas el valor de retorno de la función (en lugar de imprimir cada dígito debes calcular el numero y retornarlo).

Para el caso te conviene leer el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
1382  Programación / Programación C/C++ / Re: Duda con expresión booleana en: 5 Enero 2012, 02:51 am
Solo una nota:

La primera asignación es superflua ya que lo primero que se hace con la variable es asignarle un valor (true o false, resultado de la comparación). Debido a ello ese fragmento se debería acortar a solo:
Código:
bool encaixa = (x[j] == y[i+j]);

Un saludo
1383  Programación / Programación C/C++ / Re: [RETO] + Funcion Extraer Numeros de Cadenas! [Cpp/C] en: 5 Enero 2012, 02:42 am
Una forma ligeramente distinta en C estándar, utilizando la función strpbrk (prototipo en <string.h>) es:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int get_num(char const *s)
  5. {
  6.   int num = 0;
  7.  
  8.   while (s = strpbrk(s, "01234567890"))
  9.      num = num * 10 + *s++ - '0';
  10.  
  11.   return num;
  12. }
  13.  
  14. int main(void)
  15. {
  16.   printf("%d\n", get_num("ewiuc3dskhd8nkd62ndsnk9"));
  17.  
  18.   return 0;
  19. }

Editado: el proceso ahora esta en una funcion.

Un saludo
1384  Programación / Programación C/C++ / Re: Entrada y Salida de datos C++ en: 5 Enero 2012, 02:13 am
Son estandares o tengo que añadir alguna libreria?
Antes de utilizar las facilidades cortesía de la biblioteca estándar de C++ debes incluir los encabezados correspondientes.

En el caso de C++ estándar (es, por supuesto, el estándar ISO) puedes consultar la referencia en linea en esta pagina.

Para el estándar POSIX una de las mejores paginas es die.net.

Un saludo
1385  Programación / Programación C/C++ / Re: Entrada y Salida de datos C++ en: 4 Enero 2012, 15:28 pm
Solo como una nota al pie: fopen, fclose, etc. son parte del estándar ISO mientras que open, close, etc. son parte del estándar POSIX.

Pero como ya comentaron si la idea es aprender el manejo de archivos en C++ mejor utilizar sus facilidades como ifstream, ofstream, etc.

Un saludo
1386  Programación / Programación C/C++ / Re: Código más eficiente en: 2 Enero 2012, 01:33 am
Tambien puedes suplantar max(a, max(b, c)) por:

Código
  1.  
  2. ((a>((b>c)?b:c))?a:((b>c)?b:c))
  3. ///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!¡):
  4. a>b>c?b:c?a:b>c?b:c
  5.  
  6.  
No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:
Código:
((a > b) > c) ? b ...

Como ya comentaste mejor una función (C++) o macro (C) para obtener el máximo.

Un saludo
1387  Programación / Programación C/C++ / Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros en: 30 Diciembre 2011, 23:11 pm
Si nos enfocamos solo en el menú las operaciones a realizar son:

1) Leer un entero de la entrada estándar, para ello basta con scanf.

2) Descartar el resto de la linea, necesario ya que si scanf no puede realizar una conversión los caracteres se mantienen en el bufer de la entrada estándar.

3) Discriminar el numero mediante una sentencia de selección.

Un programa de ejemplo, lo mas sencillo posible es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int opcion;
  7.   int ch;
  8.   int ok;
  9.  
  10.   do {
  11.      puts(" 1) Opcion A");
  12.      puts(" 2) Opcion B");
  13.      puts(" 3) Opcion C");
  14.      puts("10) Salir");
  15.  
  16.      /* 1) Tratamos de leer un numero */
  17.      ok = 1;
  18.      if (scanf("%d", &opcion) != 1){
  19.         puts("Entrada no valida!");
  20.         ok = 0;
  21.      }
  22.  
  23.      /* 2) Descartamos el resto de la linea */
  24.      while ((ch = getchar()) != EOF && ch != '\n')
  25.         ;
  26.  
  27.      /* 3) Si es un numero se selecciona la operacion */
  28.      if (ok)
  29.         switch (opcion){
  30.         case 1:
  31.            puts("La opcion seleccionada es la A");
  32.            break;
  33.         case 2:
  34.            puts("La opcion seleccionada es la B");
  35.            break;
  36.         case 3:
  37.            puts("La opcion seleccionada es la C");
  38.            break;
  39.         case 10:
  40.            puts("La opcion seleccionada es terminar");
  41.            break;
  42.         default:
  43.            puts("Numero fuera del rango valido!");
  44.            break;
  45.         }
  46.   }while (opcion != 10);
  47.  
  48.   return EXIT_SUCCESS;
  49. }

Por cierto utilizar scanf y similares tiene sus limitaciones, Si se necesita una validación a prueba de fallos se debe recurrir a las funciones strtol, strtoul o strtod.

Un saludo
1388  Programación / Programación C/C++ / Re: Dudas con malloc... en: 30 Diciembre 2011, 21:55 pm
Esas conversiones explicitas dependen del lenguaje utilizado (C o C++).

En el caso de C++ son obligatorias ya que lo requiere el lenguaje: un puntero de tipo "void *" como el retornado por malloc deben convertirse explícitamente al tipo apropiado. En este lenguaje se recomienda el uso de new + delete (ya que con ellos se llama a los constructores/destructores de los objetos, algo que no pasa con malloc).

En el caso de C no son necesarias y no se recomiendan ya que un "void *" puede almacenarse en una variable de tipo "T *" (donde "T" puede ser cualquier tipo).

En C el idioma o convención informal para una llamada a malloc es:
Código
  1. int *p;
  2.  
  3. /* ... */
  4.  
  5. p = malloc(N * sizeof *p);
Donde "N" es el numero de elementos y se utiliza "sizeof *p" para no tener que indicar el tipo (asi se puede cambiar el tipo de "p" a, por ejemplo, "long *" y la llamada a malloc no tiene que cambiarse).

Un saludo
1389  Programación / Programación C/C++ / Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros en: 30 Diciembre 2011, 20:37 pm
Como ya te comentaron hay que revisar el código completo del programa. En cuanto a utilizar solo funciones parte de la biblioteca estándar de C un problema es el uso (en el fragmento de tu primer mensaje) de getch que no lo es (es parte de la biblioteca conio de Borland).

La operación se debe separar en tres partes: primero debes obtener la entrada, validar que sea un numero y por ultimo verificar que este en el rango valido (en tu caso 1 .. 3 o bien 10).

Para el primer paso puedes utilizar la función fgets, para el segundo la función sscanf y para el tercero una sentencia de selección "switch".

Un saludo
1390  Programación / Programación C/C++ / Re: Ayuda con Código "Simple en C" Hacer que solo se ingresen numeros en: 30 Diciembre 2011, 20:35 pm
Como ya te comentaron hay que revisar el código completo del programa. En cuanto a utilizar solo funciones parte de la biblioteca estándar de C un problema es el uso (en el fragmento de tu primer mensaje) de getch que no lo es (es parte de la biblioteca conio de Borland).

La operación se debe separar en tres partes: primero debes obtener la entrada, validar que sea un numero y por ultimo verificar que este en el rango valido (en tu caso 1 .. 3 o bien 10).

Un saludo
Páginas: 1 ... 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 [139] 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines