elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejercicio en C...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio en C...  (Leído 3,283 veces)
SonaArtica

Desconectado Desconectado

Mensajes: 53


Estudiando...♥


Ver Perfil WWW
Ejercicio en C...
« en: 3 Agosto 2012, 06:02 am »

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 :/




En línea

<z
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Ejercicio en C...
« Respuesta #1 en: 3 Agosto 2012, 06:24 am »

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!


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Ejercicio en C...
« Respuesta #2 en: 3 Agosto 2012, 07:20 am »

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
En línea

Ahorrate una pregunta, lee el man
twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: Ejercicio en C...
« Respuesta #3 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);
}   
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Ejercicio en C...
« Respuesta #4 en: 3 Agosto 2012, 23:10 pm »

Hola.

Código
  1. int sumardigitos(int nro) {
  2. int suma=0;
  3.  while (nro) {
  4.    suma += nro % 10;
  5.    nro = nro / 10;
  6.  }
  7.  return suma;
  8. }
  9.  

Saludos.
En línea

SonaArtica

Desconectado Desconectado

Mensajes: 53


Estudiando...♥


Ver Perfil WWW
Re: Ejercicio en C...
« Respuesta #5 en: 4 Agosto 2012, 07:02 am »

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.
Código:
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
En línea

<z
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Ejercicio en C...
« Respuesta #6 en: 4 Agosto 2012, 14:20 pm »

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:
En línea

Regístrate en
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicio 506
Ejercicios
ieman 0 3,788 Último mensaje 13 Mayo 2005, 17:42 pm
por ieman
Ejercicio en C
Ejercicios
ߣ@î§ 3 10,636 Último mensaje 4 Septiembre 2005, 06:31 am
por ߣ@î§
Help Ejercicio 122 en C
Ejercicios
ANELKAOS 4 4,919 Último mensaje 15 Septiembre 2005, 23:41 pm
por Arcangel_RZ
[Ejercicio] Aca tienen un ejercicio para practicar « 1 2 3 »
Programación Visual Basic
Dreamaker 20 15,807 Último mensaje 5 Septiembre 2010, 02:57 am
por TGa.
ejercicio conclase pag 70 ejercicio 1
Programación C/C++
flony 2 4,320 Último mensaje 17 Octubre 2010, 12:16 pm
por Akai
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines