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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 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 155 156 157 ... 160
1411  Programación / Programación C/C++ / Re: Comparar string con retorno de carro , tabulador y demás caracteres especiales en: 22 Noviembre 2011, 18:09 pm
quien dice que mi codigo no funciona  :¬¬
El creador del tema (hervasiop12345 ), el comentario de BlackZeroX (Astaroth) fue en la linea por supuesto no funcionara si se copia tal cual ya que se deben hacer los cambios pertinentes ....

@rir3760
En mi codigo escribi solo la funcion main, daba por hecho que hibas a hacer tu las declaraciones!
Honestamente no entiendo a que te refieres.

y pongo el codigo completo para que vean que SI FUNCIONA
Si funciona (tal cual) pero se debe recordar que al utilizar el objeto cin en su forma predeterminada para leer un caracter:
Código
  1. char ch;
  2.  
  3. cin >> ch;
Se descarta el espacio blanco (espacio, tabulador, avance de linea, etc.). Primero hay que cambiar el comportamiento del objeto para que no lo ignore (en este momento no recuerdo pero me parece es con un manipulador).

Un saludo
1412  Programación / Programación C/C++ / Re: Comparar string con retorno de carro , tabulador y demás caracteres especiales en: 22 Noviembre 2011, 14:12 pm
Para leer caracteres hasta alcanzar uno en particular puedes utilizar la funcion "getline" con dos argumentos (el tercero se toma como '\n') o tres (si quieres leer hasta algun otro caracter).

Por ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5. using std::getline;
  6.  
  7. #include <string>
  8. using std::string;
  9.  
  10. int main()
  11. {
  12. string linea;
  13. char delim = '\n';
  14.  
  15. getline(cin, linea, delim);
  16. cout << "La linea es " << '\"' << linea << '\"' << endl;
  17.  
  18. return 0;
  19. }

Un saludo
1413  Programación / Programación C/C++ / Re: ayudenme porfavor en programacion C en: 19 Noviembre 2011, 02:38 am
Los problemas en ese programa son tres: el primero que declarar una variable en un bucle "for" depende del compilador (para ser exactos de su soporte de C99), el segundo es el punto y coma de mas justo después del bucle "for" y el tercero que el condicional "if" esta mal. Tampoco imprimes mensaje alguno para indicar el resultado.

Las correcciones son:
Código
  1. int i;
  2.  
  3. /* ... */
  4.  
  5. for (i = 0; i < (largo / 2); i++ )
  6.   if (palabra[i] != palabra[largo - 1 - i])
  7.      resultado = 0;
  8.  
  9. /* Impresion del resultado */

Tambien puedes utilizar el motor de busqueda para revisar los ejemplos sobre como realizar ese programa.

Un saludo
1414  Programación / Programación C/C++ / Re: problema con ejercicio de agenda con punteros en: 17 Noviembre 2011, 02:03 am
Si no tienes un libro de calidad ya es hora de conseguir uno, empieza revisando el tema [Libros/Papers] C/C++. El programa tiene varios errores que se describen en detalle en |Lo que no hay que hacer en C/C++. Nivel basico|.

Aparte de eso hay que evitar el uso de macros:
Código
  1. #define p printf
  2. #define s scanf
  3.  
Ello porque si cualquiera ve "printf/scanf" ya sabe de que se trata el asunto, no hay que revisar las definiciones.


Para trabajar con memoria reservada de forma dinámica lo primero que debes hacer es llamar a malloc/calloc/realloc, accedes al objeto utilizando operadores como "->" o "[]" y finalmente liberas la memoria mediante la función "free".

Un empujón:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_CHARS  128
  5.  
  6. struct agenda {
  7.   char nombre[NUM_CHARS];
  8.   char apellido[NUM_CHARS];
  9.   int edad;
  10.  
  11. };
  12.  
  13. int main(void)
  14. {
  15.    struct agenda *p;
  16.    struct agenda *q;
  17.    int num_regs = 3;
  18.    int i;
  19.    int ch;
  20.  
  21.    /* 1) Reservamos el bloque de memoria */
  22.    if ((p = malloc(num_regs * sizeof *p)) == NULL)
  23.        return EXIT_FAILURE;
  24.  
  25.    /* 2) Leemos los registros */
  26.    q = p;
  27.    for (i = 0; i < num_regs; i++){
  28.        printf("Registro %d\n", i + 1);
  29.  
  30.        printf("Nombre: ");
  31.        fflush(stdout);
  32.        fgets(q->nombre, NUM_CHARS, stdin);
  33.  
  34.        printf("Apellidos: ");
  35.        fflush(stdout);
  36.        fgets(q->apellido, NUM_CHARS, stdin);
  37.  
  38.        printf("Edad: ");
  39.        fflush(stdout);
  40.        scanf("%d", &q->edad);
  41.  
  42.        while ((ch = getchar()) != EOF && ch != '\n')
  43.            ;
  44.  
  45.        q++;
  46.    }
  47.  
  48.    /* 3) Impresion de los registros */
  49.    for (i = 0; i < num_regs; i++){
  50.        printf("Registro %d\n", i + 1);
  51.  
  52.        printf("Nombre: %s\n", p[i].nombre);
  53.        printf("Apellidos:  %s\n", p[i].apellido);
  54.        printf("Edad: %d\n\n", p[i].edad);
  55.    }
  56.  
  57.    /* 4) Liberamos la memoria */
  58.    free(p);
  59.  
  60.    return EXIT_SUCCESS;  
  61. }

Un saludo
1415  Programación / Programación C/C++ / Re: Ayuda con algoritmo C++ en: 15 Noviembre 2011, 00:36 am
El problema es, no se puede reducir mucho y utilizando formas mas simples lo único que se consigue es incrementar el tamaño de la función.

Para empezar se puede manejar al numero cero como un caso especial. Eso deja el bucle principal de una forma mas "natural" y por ultimo se puede eliminar el uso del operador condicional "? :" quedando en:
Código
  1. int Digit(int N, int num)
  2. {
  3.   int rv;
  4.  
  5.   if (num < 0)
  6.      num = -num;
  7.  
  8.   if (num != 0){
  9.      int i;
  10.      int r = 0;
  11.  
  12.      for (N++, i = 0; i != N && num != 0; i++){
  13.         r = num % 10;
  14.         num /= 10;
  15.      }
  16.  
  17.      if (i == N)
  18.         rv = r;
  19.      else
  20.         rv = -1;
  21.   }else if (N == 0)
  22.      rv = 0;
  23.   else
  24.      rv = -1;
  25.  
  26.   return rv;
  27. }

El codigo es mas facil de seguir pero, honestamente, no me gusta nada (prefiero la primera forma).

Un saludo
1416  Programación / Programación C/C++ / Re: Calculo de números primos en: 14 Noviembre 2011, 23:33 pm
Hay que tener cuidado al utilizar el valor de retorno de scanf:
Código
  1. while(!scanf("%d", &numero))
  2.   while(getchar() != '\n');
En caso de error o fin de archivo la funcion retorna EOF, eso causaria la salida del bucle con el valor de la variable "numero" como (todavia) "no definido" o "basura".

Un saludo
1417  Programación / Programación C/C++ / Re: ayuda. matriz binaria en: 14 Noviembre 2011, 06:44 am
Puedes utilizar un array de arrays de caracteres y utilizar cada uno de los bits del carácter para almacenar el estado (1/0 Verdadero/Falso). Así no habría desperdicio pero a cambio debes utilizar los operadores a nivel de bits para acceder y modificar el bit en cuestión.

¿Que lenguaje estas utilizando?

Un saludo
1418  Programación / Programación C/C++ / Re: Ayuda con algoritmo C++ en: 14 Noviembre 2011, 03:53 am
Aparte del error que ya te indicaron hay otros, por ejemplo la condición de escape del bucle es:
Código
  1. r = num % 10;
  2. num = num / 10;
  3.  
  4. if (N > r)
  5.   return -1;
Esta mal (revisa a lápiz y papel que pasa si quieres obtener el dígito de indice 3 del numero 3210).

Tampoco consideras, como indica el enunciado, si el numero es negativo. Aquí lo mejor seria revisar que dice el estándar sobre "quien se queda con el signo" (hasta donde recuerdo es "implementation defined").

También faltan las directivas de inclusión (supongo solo fue un olvido).

Una forma de implementar la función con un bucle "feo" (para así evitar el caso especial del numero cero) es:
Código
  1. int Digit(int N, int num)
  2. {
  3.   int i;
  4.   int r;
  5.  
  6.   if (num < 0)
  7.      num = -num;
  8.  
  9.   i = 0;
  10.   while (true){
  11.      r = num % 10;
  12.      num /= 10;
  13.  
  14.      if (i == N || num == 0)
  15.         break;
  16.  
  17.      i++;
  18.   }
  19.  
  20.   return (i == N) ? r : -1;
  21. }

Un saludo
1419  Programación / Programación C/C++ / Re: ¿Es posible intercambiar dos valores sin usar variable auxiliar? en: 14 Noviembre 2011, 02:50 am
2. ¿Es posible intercambiar dos valores sin utilizar una variable auxiliar?
Tal vez si o tal vez no (depende del tipo de valor y de los objetos en cuestión). Ese es el problema: ya que no hay una forma realmente genérica para realizar el intercambio (al menos no en C estándar) lo mejor es utilizar una variable temporal y dejarle el resto al compilador.


También he probado con

((a=b) & (b=a)), pero tampoco...
Te recomendaría que no hicieras eso: "tasajear" código para "ver que pasa" y en base al resultado sacar conclusiones. Ello porque si cometes un error en C eso resulta en "comportamiento no definido", en buen cristiano cualquier cosa puede pasar, por ejemplo:

A) El programa revienta
B) Se quema la PC
C) Te deja la novia/amiga con privilegios/etc.
D) Lo peor: todo funciona de maravilla.

Es usualmente el ultimo caso el que da problemas: le das el programa a tu profesor/tutor/etc. y resulta que el bendito programa no funciona en su PC.

Mejor consigue un buen libro y aprende en base a el (y foros como este).

Un saludo
1420  Programación / Programación C/C++ / Re: Calculo de números primos en: 14 Noviembre 2011, 02:17 am
No porque si revisas el bucle te daras cuenta que solo estas dividiendo entre los numeros pares mientras que el enunciado te pide revisar la serie 2, 3, 5, 7, ... N.

Un problema con el (debido a esa serie) es que debes manejar el caso especial donde el numero es par, si es dos es primo, cualquier otro no lo es.

Con los cambios:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    int numero;
  7.    int i;
  8.    int es_primo;
  9.  
  10.    printf("Introduce el numero: ");
  11.    fflush(stdout);
  12.    if (scanf("%d", &numero) != 1 || numero < 2)
  13.        return EXIT_FAILURE;
  14.  
  15.    es_primo = numero == 2 || numero % 2 == 1;
  16.    for (i = 3; i < numero && es_primo; i += 2)
  17.        if (numero % i == 0)
  18.            es_primo = 0;
  19.  
  20.    if (es_primo)
  21.        printf("%d es primo\n", numero);
  22.    else
  23.        printf("%d no es primo\n", numero);
  24.  
  25.   return EXIT_SUCCESS;
  26. }

Un saludo
Páginas: 1 ... 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 155 156 157 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines