secuencia digital

Iniciado por ccm777, 11 Noviembre 2013, 20:57 PM

0 Miembros y 1 Visitante están viendo este tema.

ccm777

tengo que hacer un ejercicio en el que calcule una estadistica para una secuencia digital:se obtiene una secuencia formada por 1 y 0 y hay que calcular el numero de tansiciones y el valor medio, tengo esto pero me falla
#include <stdio.h>
int main(void)
{
   int num;
   int contador;
   double suma;
   double media;
   int anterior;
   int actual;
   
   suma=0.0;
   contador=0;
   
   printf("Escriba una secuencia:");
   scanf("%d",&num);
   actual=1;
   anterior=0;
   
   
   while((num=='0')||(num=='1')){
      while((actual=='0'&& anterior=='1')||(actual=='1'&& anterior=='0')){
         contador=contador+1;
         anterior=actual;
         
      }
   }
   printf("El numero de saltos es: %d",contador);
   
   while((num=='0')||(num=='1')){
      suma=suma+num;
      
      contador=contador+1;

      media=suma/contador;
   
   }   
   printf("La suma es:%g",suma);   
   printf("contador: %d",contador);   
   printf("\n La media es: %g",media);   
   
   return 0;
}


ccm777

si gracias ya encontre el fallo para contar los saltos pero sigo sin encontrar el de la suma

rir3760

Tu programa no funcionara correctamente ya que lees el numero como un entero y después tratas de procesar cada uno de sus dígitos con bucles como este:
printf("Escriba una secuencia:");
scanf("%d", &num);

/* ... */


while ((num == '0') || (num == '1')){


En su lugar puedes leer la secuencia de dígitos binarios como una cadena con scanf y a continuación realizas el proceso de conteo de transiciones y media (NPI). Mas o menos así:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char bit[128];
   int num_bits;
   int i;
   
   printf("Introduce el numero: ");
   fflush(stdout);
   if (scanf("%127[01]%n", bit, &num_bits) != 1)
      return EXIT_FAILURE;
   
   /* Algun proceso, por ejemplo impresion de los bits */
   printf("Valor de cada bit (%d):\n", num_bits);
   for (i = 0; i < num_bits; i++)
      printf("bit[%2d] == \'%c\'\n", i, bit[i]);
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

kikian94

hola, he hecho el programa pero me da error y no lo encuentro, creo que esta todo bien, pero siempre me dice caracter erroneo

int main/*
*
*
*
*/

for(i=0;i<MAXC;i++){
cadena[i]='0';
}

printf("Secuencia:");
fflush(stdout);
gets(cadena);
fflush(stdin);
errorcadena=estadisticaSecuencia(cadena,&transicciones,&mediatotal);
if(errorcadena==CARACTERERROR){
printf("caracter erroneo");

}else{
printf("la media es:%d",mediatotal);
printf("numero de transiciones: %d", transicciones);
}
/*
*
*
*
**/
return 0;

int estadisticaSecuencia(char cadenaOriginal[], int *transiciones, int *media){

int error=CORRECTO;

int contador=0;
int i=0;
char caracter;
char caracterAnterior;
int suma=0;


while(cadenaOriginal[i]!='\n' && error==CORRECTO){
      caracter=cadenaOriginal[i];


if(caracter!='1' && caracter!='0' && caracter !='\0'){

error= CARACTERERROR;
}
else{
if(caracter=='1'){
suma++;
contador++;
}
if(caracter=='0'){
contador++;
}
if( (caracter=='1' && caracterAnterior=='0') || (caracter=='0' && caracterAnterior=='1')){
(*transiciones)++;

}
caracterAnterior = caracter;

}
i++;
}
(*media)=suma/contador;

return error;
}





rir3760

Cita de: kikian94 en 18 Noviembre 2013, 18:59 PMhe hecho el programa pero me da error y no lo encuentro, creo que esta todo bien, pero siempre me dice caracter erroneo
Para verificar que el programa funcione correctamente debes publicar el código fuente completo.

En cuanto al fragmento que pones no deberías utilizar gets y fflush(stdin). Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

Y en la función "estadisticaSecuencia" asumes que la cadena pasada como su primer argumento incluye el carácter '\n' pero eso no sucederá porque lees la linea con gets (esta lee una linea almacenándola en la dirección indicada pero sin incluir el avance de linea).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language