[ Foro de Pascal ]

Duda con formato para mostrar un producto

05-Oct-2007 00:50
Waldylei Ypez
3 Respuestas

Hola amigos. Estoy aprendiendo Pascal solita, siguiendo un libro claro está, pero solita porque no tengo ayuda disponible por acá. Ayer se me presentó un problemita, quise hacer un ejercicio que enuncio y resuelvo más abajo. Claro, logré el resultado del ejemplo porque limite los productos a un número (primerresultado:=numero1*6;), sin embargo, el programa no es eficaz puesto que se supone uno debiera poder colocar cualquier número ¿Verdad? Que fuese efectivo para cualquier entero de tres dígitos. Ojala puedan ayudar un poco a ésta novata. 9. Escribir un programa que lea dos enteros de tres dígitos e imprima su producto en el siguiente formato: -----325 -----426 ---_____ ----1950 ----650 -1300 ---_____ -138450 Intento de programa: [CODE] Program project1; uses crt; const rayita = #95; var numero1,numero2,primerresultado,segundoresultado,tercerresultado,resultado: integer; begin writeln('Por favor introduzca el primer numero entero'); readln(numero1); writeln('Por favor introduzca el segundo numero entero'); readln(numero2); writeln('Los resultados son: ');writeln; primerresultado:=numero1*6; segundoresultado:=numero1*2; tercerresultado:=numero1*4; resultado:=numero1*numero2; writeln(numero1:6); writeln(numero2:6); writeln(rayita,rayita,rayita,rayita,rayita,rayita); writeln(primerresultado:6); writeln(segundoresultado:5); writeln(tercerresultado:4); writeln(rayita,rayita,rayita,rayita,rayita,rayita); writeln(resultado:6); readln end. [/CODE] Salida con formato: Los resultados son: -----325 -----426 ---_____ ----1950 ----650 -1300 ---_____ -138450 Mi pregunta especifica sería: ¿Cómo hago para indicarle al programa que los resultados de los productos deben mostrarse así? Es decir, donde está el 1950 es el producto de 6 por 325, la siguiente línea del 2 por 325, y el 1300 por el 4... Una ayudita por favor =(
06-Oct-2007 01:11
Nacho Cabanes (+30)

Bufffff... No se lee nada!!!

Pero imagino la idea. El truco está en que no puedes hacer

tercerresultado:=numero1*4

porque quizá el primer número no sea 4, sino otro valor.

Lo que tienes que pensar es ¿de dónde sale ese 4? Si el número es 426, ese 4 lo obtienes dividiendo 426 entre 100.


¿Y el 2? Si a ese 426 le restas 4 (el primer número) * 100 obtienes 426 - 400 = 26
Al dividir ese número entre la siguiente potencia de 10 (10), obtienes 26/10 = 2.

La siguiente cifra (6) vuelve ser restar y dividir entre la siguiente potencia de 10: 26 - 20 = 6; 6 / 1 = 6 y así sucesivamente.

Este método serviría no sólo para números de 3 cifras, sino también para números mucho más grandes. Primero divides entre la mayor potencia de 10, y ya sabes el primer número por el que debes multiplicar. En cada nueva pasada, restas del número "actual" esa cifra multiplicada por esa potencia de 10, y pasas a la siguiente potencia de 10, y así hasta llegar a 1 (100000, 10000, 1000, 100, 10, 1...)

Por ejemplo, si divides entre 24635, harías

24635 / 10000 = 2

24635 - (2*10000) = 4635
4635 / 1000 = 4

4635 - (4*1000) = 635
635 / 100 = 6

635 - (6*100) = 35
35 / 10 = 3

35 - (3*10) = 5
5 / 1 = 5

[Terminado]

(Así recorrerías de la primera cifra -izquierda- a la última -derecha-. Si lo quieres hacer de derecha a izquierda, tendrías que usar el resto de la división... pero no te doy más pistas... por ahora... ;-) )

06-Oct-2007 01:22
Nacho Cabanes (+30)

Por cierto, otra forma de hacerlo es no utilizar números sino cadenas de texto, que son fáciles de examinar letra a letra, sin necesidad de calcular divisiones ni restos.

Así hice yo hace mucho tiempo un programa capaz de multiplicar números "grandes" (100 cifras por 100 cifras, por ejemplo). Es menos difícil de lo que parece. Basta con que pienses qué pasos das tú cuando multiplicas "a mano"...


06-Oct-2007 17:24
Waldylei Ypez

¡oh no! No me fijé que todo había quedado así cuando lo copie, todo seguido y nada entendible.
Pero sí, creo que me captó la idea. ¡Qué bueno!

Muchas gracias por la sugerencia, trataré de hacerlo. Por favor, tengame paciencia. Sé que me tardaré un poco en aprender, pero le pondré empeño.

¡Un saludo afectuoso!.

sonrisa






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)