Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kellogs95 en 10 Noviembre 2013, 15:01 pm



Título: contador de dos caracteres consecutivos en C
Publicado por: kellogs95 en 10 Noviembre 2013, 15:01 pm
Hola pues eso: Necesito hacer un programilla y queria saber si alguien podria decirme al menos el error que he cometido.

Este no es el programa total ya que tengo que meterlo en una funcion.

el programa tendria que sumar al contador+1 cada vez que hubiese un '0' y un '1' juntos: ej; 10101110  ...... contador=3

Código
  1. #include <stdio.h>
  2. int main (void){
  3.  
  4. char actual;
  5. char anterior;
  6. int contador = 0;
  7.  
  8. printf ( "\n Introduzca la serie digital terminada en (enter):");
  9.  
  10. while (actual != '\n'){
  11.  
  12. if ((anterior == '0') && (actual = '1')){
  13. anterior = actual;
  14. contador++;}
  15.  
  16. if ((anterior == '1') && (actual== '0')){
  17. anterior = actual;
  18. contador++;}
  19.  
  20. scanf ("%c", &actual);}
  21.  
  22. printf (" Numero de grupos es: %d", contador);
  23. fflush (stdout);
  24.  
  25. return 0;
  26. }
  27.  
  28.  


Título: Re: contador de dos caracteres consecutivos en C
Publicado por: rir3760 en 10 Noviembre 2013, 16:16 pm
* Lo primero que salta a la vista es el uso de las variables "actual" y "contador" sin antes asignarles un valor, eso sucede en la primera iteración del bucle.

* En la primera sentencia if del bucle:
Código
  1. if ((anterior == '0') && (actual = '1')){
Utilizas el operador de asignación "=" cuando debería ser el de comparación "==".

* Debes actualizar el valor de la variable "anterior" en cada iteración del bucle, una opción aquí es, si los dígitos son distintos, asignar el valor '\0' para descartar el par de dígitos (al parecer esa es la intención en tu programa).

El bucle corregido (se puede acortar utilizando el operador lógico OR "||"):
Código
  1. char anterior = '\0';
  2.  
  3. /* ... */
  4.  
  5. while (scanf("%c", &actual) == 1 && actual != '\n'){
  6.   if ((anterior == '0') && (actual == '1')){
  7.      anterior = '\0';
  8.      contador++;
  9.   }else if ((anterior == '1') && (actual == '0')){
  10.      anterior = '\0';
  11.      contador++;
  12.   }else
  13.      anterior = actual;
  14. }

Una forma mas corta esta basada en el uso del especificador "%1[01]" con scanf, con el nos aseguramos de leer un solo carácter igual a '0' o '1' (seguido de un '\0', por eso se utilizan arrays) y en caso de que los bits sean iguales se puede regresar uno a la entrada estándar con ungetc:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char a[2];
  7.   char b[2];
  8.   int i;
  9.  
  10.   printf("Introduzca la serie digital:");
  11.   fflush(stdout);
  12.  
  13.   i = 0;
  14.   while (scanf("%1[01]%1[01]", a, b) == 2)
  15.      if (*a != *b)
  16.         i++;
  17.      else
  18.         ungetc(*b, stdin);
  19.  
  20.   printf("Numero de pares distintos: %d\n", i);
  21.  
  22.   return EXIT_SUCCESS;
  23. }

Un saludo


Título: Re: contador de dos caracteres consecutivos en C
Publicado por: kellogs95 en 10 Noviembre 2013, 19:17 pm
Muchisimas Gracias, Anda perfectamente  ;-)