Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cesar Lozano en 21 Julio 2017, 00:38 am



Título: Ejercicio que me tiene pensativo
Publicado por: Cesar Lozano en 21 Julio 2017, 00:38 am
Amigos no es por molestar pero tengo el presente ejercicio y me siento perdido
Pedir un número entero, e imprimir la suma de los dígitos impares

llevo esto:
Código
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. long num,sum;
  6. short nn,cop,cd=0;
  7. cout<< "ingrese un numero entero positivo: ";
  8. cin>>num;
  9. cop=num;
  10. while (num!=0)
  11. {cd++;num%=10;
  12. }
  13. nn==num%10;
  14. if (nn%2==0)
  15. sum=cd+cd++;
  16. cout << " para el numero" <<cop << "la suma de sus impares es igual a: " <<sum;
  17. }
  18.  
- pero no me siento con buena base para arreglarlo ¿podrian ayudarme?



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Ejercicio que me tiene pensativo
Publicado por: engel lex en 21 Julio 2017, 01:33 am
tu identación no es buena y hace el codigo dificil de entender

no entiendo tu codigo o más o menos que intenta...

en linea 13 tienes un error, eso que colocaste literalmente no hace nada (comparas con ==, pero el valor comparado no hace nada)

en la linea 14, no es recomendable que uses estructuras de control sin llaves {} si eres principante

la linea 15 es poco recomendable, ya que cd+cd++ puede generarte un resultado inesperado ya que podría variar depende del compilador

hay 2 maneras de hacerlo... por algoritmo o la matemática 

por algoritmo
lo haría igual hasta la linea 8
pero luego usaría un for desde 1 hasta menor o igual que num, usando cop como iterador y el paso +=2
es decir
Código:
for(cop=1; cop <= num; cop+=2)

esto haría que el codigo fuera solo por los impares
 y solo tendrías que sumar todos los numeros...

por matemática
sabemos que la suma de una continuidad es igual la mitad del primero sumado al ultimo, siendo los numeros impares la mitad de esta continuidad, sería la mitad de eso, con un ajuste de 1 según el caso

yo lo haría


Título: Re: Ejercicio que me tiene pensativo
Publicado por: Cesar Lozano en 21 Julio 2017, 01:46 am
muchas gracias por la guía intentare arreglar eso y en caso tal podría enviar el progreso?
lo que trato a veces es confundirme usando los bucles como no son.


Título: Re: Ejercicio que me tiene pensativo
Publicado por: engel lex en 21 Julio 2017, 01:49 am
si quieres publica aquí lo que lleves cuando lo consideres listo o te tranques gravemente...


Título: Re: Ejercicio que me tiene pensativo
Publicado por: Cesar Lozano en 21 Julio 2017, 06:20 am
Amigo he cambiado la estructura, asi me quedo:
Código
  1. #include<iostream>
  2. #include<math.h>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,cop;
  7. int s=0,a;
  8. cout<< "ingrese un numero: ";
  9. cin>>n;
  10. cop=n;
  11. while (n>0)
  12. {a=n%10;
  13. n=n/10;
  14. if(a%2!=0)
  15. s=s+a;
  16. }
  17. cout << "para el numero " <<cop << " la suma de sus impares es igual a: " <<s;
  18. }
  19.  
una ultima pregunta amigo, si yo quiero expresar esto en pseudo codigo como denoto los valores como s=0, antes de la funcion while?


Título: Re: Ejercicio que me tiene pensativo
Publicado por: engel lex en 21 Julio 2017, 06:32 am
había entendido el problema anteriormente mal.. no es la suma de ls impares hasta el numero, sino la suma de sus digitos impares (empezando por la izquierda o derecha? es decir de 12 el resultado es 1 o 2?)

el if está de más... puedes dividir 2 veces seguidas y no necesitas el control de flujo...

math.h sobra, si contar que estás en c++, math.h es c, debes usar cmath

usa identación y usa nombre de variables comprensibles  para que el codigo sea legible

main siempre debe retornar 0

· Los códigos deben ir en etiquetas GeSHi segunda vez que lo corrijo...

puedes hacer directamente
Código
  1. while (n>0){
  2.  s+=n%10;
  3.  n=n/100;
  4. }


en pseudo código, depende de la notación que use tu clase... usualmente es así mismo
Código:
entero s = 0


Título: Re: Ejercicio que me tiene pensativo
Publicado por: Cesar Lozano en 21 Julio 2017, 06:45 am
muchas gracias  ;-) ;D