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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 [148] 149 150 151 152 153 154 155 156 157 158 159 160
1471  Programación / Programación C/C++ / Re: Necesito ayuda para hacer (comenzar) un programa en C en: 22 Octubre 2011, 15:25 pm
La forma mas sencilla es utilizando un array de caracteres para ahí almacenar cada uno de los dígitos, eso mas calcular su numero lo relegas a la función sprintf.

Un ejemplo del uso de esa funcion:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    char digito[33]; /* 33 == ALGUN_VALOR */
  7.    int num_digitos;
  8.    int numero = 5694;
  9.    int i;
  10.  
  11.    num_digitos = sprintf(digito, "%d", numero);
  12.  
  13.    printf("Numero de digitos: %d\n", num_digitos);
  14.    for (i = 0; i < num_digitos; i++)
  15.        printf("%c\n", digito[i]);
  16.  
  17.    return EXIT_SUCCESS;
  18. }
Por supuesto debes considerar que los dígitos se almacenan como caracteres. Antes de procesarlos debes restarles '0' para en base al carácter obtener el numero:
Código:
'0' - '0' == 0
'1' - '0' == 1
'2' - '0' == 2
...

El resto es verificar si el numero de dígitos es par o impar, eso lo realizas mediante el operador de modulo. Finalmente realizas la división con el operador del mismo nombre.

Un saludo
1472  Programación / Programación C/C++ / Re: Problema con este programa básico en: 22 Octubre 2011, 01:41 am
Un detalle:
Código
  1. printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
  2. scanf("%c", &simba);
Cuando se utiliza el especificador "%c" este no descarta el espacio blanco previo (de ahi la llamada a getchar).

Para eliminar el espacio blanco y leer un unico caracter se puede utilizar:
Código
  1. printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
  2. scanf(" %c", &simba);
El espacio en " %c" es critico (con el se elimina primero el espacio blanco y solo entonces se lee el caracter).

Un saludo
1473  Programación / Programación C/C++ / Re: Pilas C++ usando Estructuras (STRUCT) en: 19 Octubre 2011, 23:53 pm
Si se trata de compilar tu programa en Dev-C++ con las opciones predeterminadas se genera el mensaje:
Código:
#warning This file includes at least one deprecated or antiquated header. 
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++
standard. Examples include substituting the <X> header for the <X.h> header for
C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To
disable this warning use -Wno-deprecated.
Ello en relación a la inclusión de <iostream.h>, caso similar con <stdlib.h>. En cuanto a <conio.h> no es necesario utilizarla.

En cuanto a la función principal esta debe retornar cero o bien un valor distinto en caso de error (tu devuelves 9 de forma indiscriminada).

En mi opinión deberías revisar alguna pagina sobre pilas en la red (por ejemplo Wikipedia) y rescribir el programa desde cero ya que tiene varios errores.

Un saludo
1474  Programación / Programación C/C++ / Re: ayuda con una funcion en c en: 19 Octubre 2011, 19:29 pm
Lo digo sin mala intención: ese programa esta muy mal y si apenas empiezas con el lenguaje C deberías conseguir un buen libro, para ello revisa los temas fijos de este foro.

Casi todo el proceso que haces en la función de comparación como pedir las cadenas e indicar el resultado lo debes pasar a la función principal con ciertas correcciones como evitar el uso de "gets" y "fflush(stdin)".

En cuanto a la implementación de la función para comparar, a esta se le pasa la dirección base de dos cadenas y debe retornar el resultado indicado. Un solución utilizando punteros:
Código
  1. int fn_cmp(char const *s, char const *t)
  2. {
  3.   while (*s == *t && *s != '\0'){
  4.      s++;
  5.      t++;
  6.   }
  7.  
  8.   return (*s > *t) - (*s < *t);
  9. }

El resto te toca a ti.

Un saludo
1475  Programación / Programación C/C++ / Re: Que Libros de C++ recomiendais? en: 18 Octubre 2011, 16:07 pm
¿Leiste la descripcion y opiniones sobre el? Es un libro sobre Visual C++ 6.0 enfocado en la programacion en MS Windows.

Primero define que es lo que realmente quieres.

Un saludo
1476  Programación / Programación C/C++ / Re: Que Libros de C++ recomiendais? en: 18 Octubre 2011, 04:27 am
Para alguien que apenas empieza con el lenguaje C++ dos libros muy buenos pero en ingles:

Accelerated C++: Practical Programming by Example
Andrew Koenig and Barbara E. Moo
Addison-Wesley, 2000
ISBN 0-201-70353-X


C++ Primer, 4th Edition
Stanley B. Lippman, Josée LaJoie, Barbara E. Moo
Addison-Wesley Professional
ISBN-10: 0-201-72148-1
ISBN-13: 978-0-201-72148-5


Otras dos opciones (si ya se tiene un buen manejo del lenguaje) por desgracia tambien en ingles:

The C++ Programming Language
Bjarne Stroustrup
Addison-Wesley Professional
ISBN-10: 0201327554
ISBN-13: 978-0201889543

The C++ Standard Library: A Tutorial and Reference
Nicolai M. Josuttis
Addison-Wesley Professional
ISBN-10: 0201379260
ISBN-13: 978-0201379266

Un saludo
1477  Programación / Programación C/C++ / Re: ayuda con pequeño detalle en programa de busqueda en un arreglo en: 17 Octubre 2011, 02:22 am
Si apenas empiezas con C++ deberías conseguir un buen libro sobre este, por favor revisa los temas fijos de los foros.

Te daría una solución pero honestamente el programa tiene errores y la aproximación es, para decirlo de forma amable, incorrecta.

En el caso de C++ para utilizar cadenas utilizas la clase "string" y para almacenar un numero indeterminado de estas puedes crear un vector de strings (con vector me refiero a la clase, no a un array).

Puedes empezar utilizando el motor de búsqueda (o alguno de los libros recomendados) para revisar temas sobre esas dos clases (string y vector).

Un saludo
1478  Programación / Programación C/C++ / Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars? en: 17 Octubre 2011, 02:16 am
Llevo mas de diez años programando en C, y nunca me ha dejado asignar directamente el puntero devuelto al asignar memoria dinamicamente. Siempre he utilizado MinGW (gcc, vamos)
Es extraño, habría que revisar la linea de comando que utilizas. En el caso de gcc/cygwin para compilar en el modo mas estricto posible se llama a este con:
Código:
gcc -c -ansi -pedantic -Wall -O main.c
Y al utilizarlo asi una llamada a malloc como esta:
Código
  1. num = malloc(10 * sizeof *num);
Debe compilar sin problemas (para el caso según el estándar de C debe pasar correctamente con cualquier compilador).

Al reves de lo que dices, en C++ no hace falta realizar el cast, ya que el propio new devuelve un puntero correcto (o deberia hacerlo), del tipo de la clase (o vector de clases) que estes creando.
Me refería a las llamadas a malloc y compañía. En ese lenguaje la misma llamada:
Código
  1. num = malloc(10 * sizeof *num);
Debe generar un mensaje indicando que falta la conversión, la forma correcta es (si "num" es de tipo "int *"):
Código
  1. num = (int *) malloc(10 * sizeof *num);
Pero como bien comentas es mejor utilizar el par new/delete para reservas de memoria en C++ ya que así se garantiza (si aplica) la ejecución de los constructores/destructores.

Un saludo
1479  Programación / Programación C/C++ / Re: Para que sirven los Punteros? en: 16 Octubre 2011, 17:15 pm
Aclaro que lo siguiente es en relación a C, la mayoría también aplica a C++ pero tienen sus diferencias así que, cuidado.

Una de las razones, como ya te comento El_Java, es para evitar la copia del argumento. Siguiendo su ejemplo otra ventaja es la posibilidad (mediante indireccion) de modificarlo. Sin embargo C++ agrego las referencias que solucionan ambos problemas.

Otra razón es la capacidad de indicar el uso de una función en particular (en C++ son los famosos predicados). Ya que los objetos y las funciones son entidades distintas la única forma de indicar una función es mediante un puntero a esta.

El mejor ejemplo en la biblioteca estándar de C son las funciones bsearch y qsort, como sus nombres lo indican la primera busca y la segunda ordena cualquier tipo de array. El problema es el método de comparación, ya que dependiendo del tipo se debe realizar una comparación distinta. Ello se soluciona con el paso de un puntero a función.

Un ejemplo de qsort para ordenar un array de enteros:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. #define NUM_ELEM 16
  6.  
  7. int fn_cmp(const void *p, const void *q);
  8.  
  9. int main(void)
  10. {
  11.   int i, num[NUM_ELEM];
  12.  
  13.   srand((unsigned) time(NULL));
  14.  
  15.   printf("Array sin ordenar:");
  16.   for (i = 0; i < NUM_ELEM; i++){
  17.      num[i] = rand() % NUM_ELEM;
  18.      printf("%3d", num[i]);
  19.   }
  20.   puts("");
  21.  
  22.   /* Ordenar el array de forma ascendente (menor a mayor) */
  23.   qsort(num, (size_t) NUM_ELEM, sizeof(num[0]), fn_cmp);
  24.  
  25.   printf("Array ordenado:   ");
  26.   for (i = NUM_ELEM; i > 0; i--)
  27.      printf("%3d", num[i - 1]);
  28.   puts("");
  29.  
  30.   return EXIT_SUCCESS;
  31. }
  32.  
  33. int fn_cmp(const void *p, const void *q)
  34. {
  35.   int a = *(int *) p;
  36.   int b = *(int *) q;
  37.  
  38.   if (a < b)
  39.      return -1;
  40.   else if (a == b)
  41.      return 0;
  42.   else
  43.      return 1;
  44. }

Un saludo
1480  Programación / Programación C/C++ / Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars? en: 15 Octubre 2011, 19:05 pm
Solo dos aclaraciones.

Los prototipos de las funciones malloc, calloc, realloc y free se encuentran en el encabezado <stdlib.h>.

Sobre la conversión explicita del "void *" que retornan esas funciones es obligatoria en C++ pero no se recomienda en C (ya que ella es automática).

Un saludo
Páginas: 1 ... 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 [148] 149 150 151 152 153 154 155 156 157 158 159 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines