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

#1381
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
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:
bool encaixa = (x[j] == y[i+j]);

Un saludo
#1383
Una forma ligeramente distinta en C estándar, utilizando la función strpbrk (prototipo en <string.h>) es:
#include <stdio.h>
#include <string.h>

int get_num(char const *s)
{
   int num = 0;
   
   while (s = strpbrk(s, "01234567890"))
      num = num * 10 + *s++ - '0';
   
   return num;
}

int main(void)
{
   printf("%d\n", get_num("ewiuc3dskhd8nkd62ndsnk9"));

   return 0;
}


Editado: el proceso ahora esta en una funcion.

Un saludo
#1384
Cita de: prometheus48 en  4 Enero 2012, 19:09 PMSon 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
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
Cita de: BlackZeroX (Astaroth) en  1 Enero 2012, 22:25 PM
Tambien puedes suplantar max(a, max(b, c)) por:



((a>((b>c)?b:c))?a:((b>c)?b:c))
///o tambien por (Son identicos solo quite los parentesis cosa NO recomendada!¡):
a>b>c?b:c?a:b>c?b:c


No. Esto porque el operador ">" tiene mayor prioridad que "?:" y por ello sin paréntesis esta se procesaría así:
((a > b) > c) ? b ...

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

Un saludo
#1387
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:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int opcion;
   int ch;
   int ok;
   
   do {
      puts(" 1) Opcion A");
      puts(" 2) Opcion B");
      puts(" 3) Opcion C");
      puts("10) Salir");
     
      /* 1) Tratamos de leer un numero */
      ok = 1;
      if (scanf("%d", &opcion) != 1){
         puts("Entrada no valida!");
         ok = 0;
      }
     
      /* 2) Descartamos el resto de la linea */
      while ((ch = getchar()) != EOF && ch != '\n')
         ;
     
      /* 3) Si es un numero se selecciona la operacion */
      if (ok)
         switch (opcion){
         case 1:
            puts("La opcion seleccionada es la A");
            break;
         case 2:
            puts("La opcion seleccionada es la B");
            break;
         case 3:
            puts("La opcion seleccionada es la C");
            break;
         case 10:
            puts("La opcion seleccionada es terminar");
            break;
         default:
            puts("Numero fuera del rango valido!");
            break;
         }
   }while (opcion != 10);
   
   return EXIT_SUCCESS;
}


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 C/C++ / Re: Dudas con malloc...
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:
int *p;

/* ... */

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