Ejercicio en C...

Iniciado por SonaArtica, 3 Agosto 2012, 06:02 AM

0 Miembros y 3 Visitantes están viendo este tema.

SonaArtica

Bueno antes que nada quiero aclarar a los MOD, que acalro en el post hasta donde llegue pero despues no puedo continuar quiero que me den una mano, no que me lo resuelvan ;)
Ejercicio: Confeccionar un programa que solicite el ingreso de un numero entero positivo de 4 cifras y pueda calcular e informar la suma de sus digitos hasta llegar a una sola cifra. Ej: 2561 -> 5 :¬¬
El tema es que yo sumo por ejemplo 2+5+6+1= 14 lo separo 1+4= 5  >:D
Otro ejemplo: 1934=1+9+3+4=17=1+7=8  :xD
Ahora una vez entendido el problema pasa que nose como hacerlo en el diagrama de lógica y menos en código porque nose que operación debo realizar.
Yo si divido por ejemplo 2561/100= 25.61 Ahi me los separa x coma pero como hago para que agarre de a dos numeros y los sume por separados y luego los resultados los sume quedando un solo numero al final :/


<z

xiruko

hola, se me ha ocurrido una manera aunque no se si seria la mejor manera de hacerlo, aunque funcionar funcionaria:

1. pides que se ingrese el entero.
2. coges el entero y lo pasas a una cadena de caracteres con la funcion itoa (en string.h).
3. ahora cada caracter lo pasas a entero con la funcion atoi de la misma libreria y los sumas.
4. repites el proceso hasta que te quede 1 digito.

en caso que no puedas usar funciones externas, entonces seguro que habria un metodo mejor de hacerlo... pero siempre puedes hacerlas tu y aunque sea dar un poco de rodeo al menos funcionaria y ya tendrias algo.

un saludo!

durasno

Hola! para resolver lo que queres hacer necesitas el operador %.

Siguiendo tu ejemplo: 1934=1+9+3+4=17=1+7=8. Usando el operador %:

1º 1934%10 -> resto=4
2º 1934/10 -> result=193
3º 193%10 -> resto=3
4º 193/10 -> result=19
5º 19%10 -> resto=9
6º 19/10 -> result=1
7º 1%10 -> resto=1

Fijate que si sumamos los resto seria igual a 17. Lo mismo tenes que aplicar al numero 17 y tener como condicion final algo como:
si sumaResto < 10
   salir;


Saludos

PD: consejo no intentes hacer todo de una, primera intenta obtener el 17
Ahorrate una pregunta, lee el man

twins

Hola ya hize el ejercicio me costo un poco pero al fin salio cualquier cosa me preguntas cordiales saludos.

#include<stdio.h>
int main(void){
   int num;
   int r1=0,r2=0,r3=0,s=0,s2=0,total=0;
   do{
      printf("ingrese numero de 4 cifras\n");
      scanf("%i",&num);
      if(num<1000 || num>9999)
         printf("el numero esta fuera del rango\n");
   }while(num<1000 || num>9999);
   printf("primera descomposicion\n");
    while(num>0){
      r1=num/10;//al dividir por 10 nos queda por ejemplo 1943/10=194,3
      r2=r1*10;//al multiplicar por 10 nos queda 1940
      r3=num-r2;//al restar nos queda 1943-1940=3
      printf("r3= %i\t",r3);
      num=r1;//ahora el num no vale 1943 si no 194 y asi susesivamente COMO ES DE TIPO ENTERO SIEMPRE NOS QUEDARA AISLADO EL DECIMAL DE ESTA FORMA PODEMOS CAPTURARLO
       r1=r1/10;
      s+=r3;
   }
   printf("\n");
   printf("resultado de la primera suma %i\n",s);
   r1=0,r2=0,r3=0;
   printf("\n");
    if(s>10){
      printf("segunda descomposicion\n");
      r1=s/10;
      r2=r1*10;
      r3=s-r2;
      printf("r1= %i\t",r1);
      printf("r3= %i\t",r3);
   }
   
   s2=r1+r3;
   printf("resultado de la segunda suma %i\n",s2);   
   total+=s+s2;
   printf("\nsuma total = %i\n",total);
return(0);
}   

ecfisa

Hola.


int sumardigitos(int nro) {
int suma=0;
  while (nro) {
    suma += nro % 10;
    nro = nro / 10;
  }
  return suma;
}


Saludos.

SonaArtica

Cita de: twins en  3 Agosto 2012, 21:52 PM
Hola ya hize el ejercicio me costo un poco pero al fin salio cualquier cosa me preguntas cordiales saludos.

#include<stdio.h>
int main(void){
   int num;
   int r1=0,r2=0,r3=0,s=0,s2=0,total=0;
   do{
      printf("ingrese numero de 4 cifras\n");
      scanf("%i",&num);
      if(num<1000 || num>9999)
         printf("el numero esta fuera del rango\n");
   }while(num<1000 || num>9999);
   printf("primera descomposicion\n");
    while(num>0){
      r1=num/10;//al dividir por 10 nos queda por ejemplo 1943/10=194,3
      r2=r1*10;//al multiplicar por 10 nos queda 1940
      r3=num-r2;//al restar nos queda 1943-1940=3
      printf("r3= %i\t",r3);
      num=r1;//ahora el num no vale 1943 si no 194 y asi susesivamente COMO ES DE TIPO ENTERO SIEMPRE NOS QUEDARA AISLADO EL DECIMAL DE ESTA FORMA PODEMOS CAPTURARLO
       r1=r1/10;
      s+=r3;
   }
   printf("\n");
   printf("resultado de la primera suma %i\n",s);
   r1=0,r2=0,r3=0;
   printf("\n");
    if(s>10){
      printf("segunda descomposicion\n");
      r1=s/10;
      r2=r1*10;
      r3=s-r2;
      printf("r1= %i\t",r1);
      printf("r3= %i\t",r3);
   }
   
   s2=r1+r3;
   printf("resultado de la segunda suma %i\n",s2);   
   total+=s+s2;
   printf("\nsuma total = %i\n",total);
return(0);
}   

Gracias Twins por tomarte las molestias :) Lo probe y anda perfecto. ^^
Ahora empiezo x mis dudas o mejor dichos partes que no entendi XD.
while(num>0){
r1=num/10;//al dividir por 10 nos queda por ejemplo 1943/10=194,3
r2=r1*10;//al multiplicar por 10 nos queda 1940
r3=num-r2;//al restar nos queda 1943-1940=3
printf("r3= %i\t",r3);
num=r1;//ahora el num no vale 1943 si no 194 y asi susesivamente COMO ES DE TIPO ENTERO SIEMPRE NOS QUEDARA AISLADO EL DECIMAL DE ESTA FORMA PODEMOS CAPTURARLO
    r1=r1/10;
s+=r3;
}

En R1 hago la cuenta 1943/10=194.3 pero si lo multiplico x 10 da 1943 Xd
En r3 cmo te diste cuenta que habia que hacer una diferencia?
Gracias y disculpa x las preguntas jeje
<z

avesudra

Cita de: SonaArtica en  4 Agosto 2012, 07:02 AM
En R1 hago la cuenta 1943/10=194.3 pero si lo multiplico x 10 da 1943 Xd
En r3 cmo te diste cuenta que habia que hacer una diferencia?
Gracias y disculpa x las preguntas jeje
Esas variables son enteras por lo tanto si haces una operación que salga con punto flotante , desprecia los decimales, entonces en R1 que daría 194 y si lo multiplicas por diez 1940.A ver si leemos los comentarios del código que para algo están  :silbar:
Regístrate en