[ Foro de Pascal ]
Duda con formato para mostrar un producto
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 =(
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... ;-) )
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"...
¡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!.
(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.)