Ejercicio que me tiene pensativo

Iniciado por Cesar Lozano, 21 Julio 2017, 00:38 AM

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

Cesar Lozano

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 (cpp) [Seleccionar]
#include<iostream>
using namespace std;
int main()
{
long num,sum;
short nn,cop,cd=0;
cout<< "ingrese un numero entero positivo: ";
cin>>num;
cop=num;
while (num!=0)
{cd++;num%=10;
}
nn==num%10;
if (nn%2==0)
sum=cd+cd++;
cout << " para el numero" <<cop << "la suma de sus impares es igual a: " <<sum;
}

- pero no me siento con buena base para arreglarlo ¿podrian ayudarme?



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

engel lex

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
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Cesar Lozano

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.

engel lex

si quieres publica aquí lo que lleves cuando lo consideres listo o te tranques gravemente...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Cesar Lozano

#4
Amigo he cambiado la estructura, asi me quedo:
Código (cpp) [Seleccionar]
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,cop;
int s=0,a;
cout<< "ingrese un numero: ";
cin>>n;
cop=n;
while (n>0)
{a=n%10;
n=n/10;
if(a%2!=0)
s=s+a;
}
cout << "para el numero " <<cop << " la suma de sus impares es igual a: " <<s;
}

una ultima pregunta amigo, si yo quiero expresar esto en pseudo codigo como denoto los valores como s=0, antes de la funcion while?

engel lex

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 (cpp) [Seleccionar]
while (n>0){
  s+=n%10;
  n=n/100;
}



en pseudo código, depende de la notación que use tu clase... usualmente es así mismo
entero s = 0
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.