Media de una cadena de caracteres '1' y '0'

Iniciado por kikian94, 15 Noviembre 2013, 10:33 AM

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

kikian94

Hola, tengo que realizar un programa que lea de la entrada estandar una cadena compuesta por caracteres '1' y'0' y me diga la media y las veces que se pasa de 0 a 1 y de 1 a 0, debe de omitir cualquier otro caracter. Es decir en 0110. Se debe realizar mediante una funcion que obtenga la cadena y devuelva los dos parametros resultados
La media es 0,25 y el numero de saltos es 2
El problema lo tengo en el planteamiento, como no se la longitud que va a tener la cadena he pensado en leerla del teclado primero, despues le paso a la funcion la cadena y con un if diria que cuando cadena = '1' ||'0' le asigno el valor 1 o 0 a una variable auxiliar y a otra variable el valor de cadena[i+1] y asi hasta que se tope con el final de cadena o encuentre otro caracter en cuyo caso dara error, esto estaria bien? O como debo de hacerlo?. Muchas gracias

rir3760

Cuando tengas una duda lo primero que debes hacer es utilizar el motor de búsqueda para conocer si el problema (o uno similar) ya se ha planteado en los foros.

Dos temas similares al tuyo:
secuencia digital
contador de dos caracteres consecutivos en C

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

csp

#2
Buenas,

Supongo que el código se puede mejorar bastante. Funciona siempre y cuando la cadena contenga unos y ceros. En el caso de que aparezca otro carácter, eso te lo dejo a vos.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>


void cadenaBinaria(std::string str)
{
int saltos = 0;
int cont = 0;
for(int i = 0; i < (str.length() - 1); i++)
{
if(str[i] != str[i + 1])
{
saltos++;
};
};
for(int j = 0; j < str.length(); j++)
{
cont += (int)str[j] - 48;
};
std::cout << "Numero de saltos: " << saltos << std::endl;
std::cout << "Media: " << cont / (float)str.length() << std::endl;
};

int main()
{
std::string cadena;

std::cout << "Ingrese la cadena binaria: " << std::endl;
std::getline(std::cin, cadena);
cadenaBinaria(cadena);

return 0;

};


Un saludo.

flony

la media...supongo que tiende a cero cincuenta cuando x tiende al infinito
la cantidad de veces que pasa de uno a cero y su inversa, seria usando un for, dependiendo del tamaño del vector
y si se usa cadena, siempre que estés un c++ usa string
si un problema no tiene solucion entonces no es un problema...es algo inevitable