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;
}
Tiene algo que ver con este otro?
http://foro.elhacker.net/programacion_cc/contador_de_dos_caracteres_consecutivos_en_c-t402507.0.html
si gracias ya encontre el fallo para contar los saltos pero sigo sin encontrar el de la suma
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
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;
}
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| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)
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