Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: georginho30 en 3 Noviembre 2020, 01:19 am



Título: Trabajo universidad
Publicado por: georginho30 en 3 Noviembre 2020, 01:19 am
Hola buenas, tengo un trabajo en la universidad en el que se me pide que programe en C. Se me pide que pida unos números al usuario y que luego estos números sean multiplicados en relación al lugar que ocupan (um*1, centenas *2, decenas *3...) y posteriormente me pide que calcule el total de la suma de estas multiplicaciones por cada número. Yo sé dividir un número en dígitos pero cuando tengo que sumarlos luego después de haberlos multiplicado no sé como se hace.
Muchas gracias


Título: Re: Trabajo universidad
Publicado por: K-YreX en 3 Noviembre 2020, 01:40 am
Si sabes dividir el número en digitos, no tiene mayor complicación.

Supongo que usas un bucle para separar los dígitos. Entonces crea otra variable <suma = 0> fuera del bucle y en cada iteración acumula ahí el resultado del producto.

Te dejo a continuación un pseudocódigo para que te hagas una idea.
(No es código C, solo es un esquema conceptual de tu algoritmo)
Código:
PEDIR numero
suma := 0
PARA i := 1 HASTA longitud(numero) HACER
  digito := obtenerDigito(i, numero)
  suma := suma + digito * i
FIN PARA
Ahora solo tienes que implementar el código anterior en lenguaje C.

Si tienes alguna duda es mejor que incluyas tu código para poder ayudarte; además de porque no se hacen tareas, por lo que no vamos a darte el código completo si no aportas nada.


Título: Re: Trabajo universidad
Publicado por: georginho30 en 3 Noviembre 2020, 10:54 am
muchas gracias. Y para multiplicar los dígitos en una cadena el primero por uno asía hasta nueve y el último dígito por cero, como se haría para multiplicar ese último dígito por cero? Ya que se usas un for se multiplicaría por 10


Título: Re: Trabajo universidad
Publicado por: K-YreX en 3 Noviembre 2020, 16:01 pm
Si lo que quieres es multiplicar por un conjunto finito de valores {1,2,3,4,5,6,7,8,9,0} y después volver a empezar por el 1 otra vez la mejor manera es utilizar el operador %.

La operación a%b devuelve el resto de dividir a/b y por las reglas de la división: el resto siempre será menor que el divisor. Si haces a%10=b, para cualquier a se cumplirá b < 10.

Código
  1. for(int i = 1; i <= 20; ++i){
  2.  printf("%d ", i % 10);
  3. }

Salida:
Código:
 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 


Título: Re: Trabajo universidad
Publicado por: georginho30 en 3 Noviembre 2020, 18:43 pm
también me piden que cree un menú para acceder a los diferentes ejercicios. dentro de uno de ellos, me pide que si el usuario mete un valor no válido se termine el ejercicio y se vuelva al menú principal, pero pongo exit(0) y se termina el programa. que código debo usar?


Título: Re: Trabajo universidad
Publicado por: K-YreX en 3 Noviembre 2020, 19:04 pm
Para preguntas que no estén relacionadas las unas con las otras es mejor que abras un nuevo tema y especifiques su contenido en el título para que sea descriptivo.

Todo depende de cómo tengas estructurado el código. Obviamente si utilizas la función exit() el programa finalizará. Puedes hacerlo con un bucle controlado por una condición de validez o si el código se encuentra en otra función, puedes volver a la función que la llamó mediante un return.

Si incluyes tu código aunque sea de forma simplificada (lo necesario para poder visualizar tu problema) será más fácil concretarte una forma de hacerlo.

PD: Para insertar código utiliza las etiquetas de Código GeSHi y selecciona el lenguaje de programación adecuado.