Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kikian94 en 15 Noviembre 2013, 10:33 am



Título: Media de una cadena de caracteres '1' y '0'
Publicado por: kikian94 en 15 Noviembre 2013, 10:33 am
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


Título: Re: Media de una cadena de caracteres '1' y '0'
Publicado por: rir3760 en 15 Noviembre 2013, 15:53 pm
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 (http://foro.elhacker.net/programacion_cc/secuencia_digital-t402630.0.html)
contador de dos caracteres consecutivos en C (http://foro.elhacker.net/programacion_cc/contador_de_dos_caracteres_consecutivos_en_c-t402507.0.html)

Un saludo


Título: Re: Media de una cadena de caracteres '1' y '0'
Publicado por: csp en 17 Noviembre 2013, 06:42 am
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
  1. #include <iostream>
  2. #include <string>
  3.  
  4.  
  5. void cadenaBinaria(std::string str)
  6. {
  7. int saltos = 0;
  8. int cont = 0;
  9. for(int i = 0; i < (str.length() - 1); i++)
  10. {
  11. if(str[i] != str[i + 1])
  12. {
  13. saltos++;
  14. };
  15. };
  16. for(int j = 0; j < str.length(); j++)
  17. {
  18. cont += (int)str[j] - 48;
  19. };
  20. std::cout << "Numero de saltos: " << saltos << std::endl;
  21. std::cout << "Media: " << cont / (float)str.length() << std::endl;
  22. };
  23.  
  24. int main()
  25. {
  26. std::string cadena;
  27.  
  28. std::cout << "Ingrese la cadena binaria: " << std::endl;
  29. std::getline(std::cin, cadena);
  30. cadenaBinaria(cadena);
  31.  
  32. return 0;
  33.  
  34. };

Un saludo.


Título: Re: Media de una cadena de caracteres '1' y '0'
Publicado por: flony en 20 Noviembre 2013, 03:16 am
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