Programación General > Pascal
Duda Con Formato Para Mostrar Un Producto
DarkisX:
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:
--- Código: Text --- 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.
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 =(
Enko:
--- Citar ---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...
--- Fin de la cita ---
Disculpa pero no logré entender que es lo que quires hacer. Segun entiendo, lo que queres hacer ya lo hiciste :S.
Por si las dusas, si lo que quieres es mostrar algo como 6*325=1950
--- Código: Text --- writeln(numero1,' * 6 = ', resultado1);
--- Citar ---writeln(rayita,rayita,rayita,rayita,rayita,rayita);
--- Fin de la cita ---
Esto no hace falta, puedas tranquilamente hacer:
--- Código: Text --- WriteLn('-----------------------------------');
DarkisX:
Ante todo Enko, muchas gracias por tu respuesta y por tu tiempo.
Mira, en realidad lo que hice fue forzar el programa para que imitara el ejemplo que ponen allí en el ejercicio propuesto, para que uno vea el formato de la salida que debe aparecer, por eso puse:
--- Código: Text ---primerresultado:=numero1*6;
Sin embargo, lo que quiero hacer es que aparezca algo como:
--- Código: Text ---primerresultado:=numero1*[primerdigitodenumero2];
En vez de 6, porque se supone el programa debería funcionar si tomo 2 números cualesquiera, ya sea: 756 y 345, 980 y 123, etc.
Yo creo que la otra pregunta más apropiada sería, ¿Puedo hacer esto? ¿Puedo hacer que el programa funcione para dos números cualesquiera?
Una vez más, gracias Enko.
DarkisX:
La cuestión está en emular una multiplicación de tres cifras a como se haría en un cuaderno normal, a mano. Allí está el objetivo.
Primero tomamos un numerito y multiplicamos por lo de arriba. Seguimos, dejamos un espacio y realizamos la multiplicación por la siguiente cifra, o el siguiente número. Otro espacio, y el tercer número por lo de arriba. Al final el resultado.
Es lo que se pretende, pero no sé cómo hacer para que funcione con cualquier número.
RoMaNo:
--- Cita de: "DarkisX" ---La cuestión está en emular una multiplicación de tres cifras a como se haría en un cuaderno normal, a mano. Allí está el objetivo.
Primero tomamos un numerito y multiplicamos por lo de arriba. Seguimos, dejamos un espacio y realizamos la multiplicación por la siguiente cifra, o el siguiente número. Otro espacio, y el tercer número por lo de arriba. Al final el resultado.
Es lo que se pretende, pero no sé cómo hacer para que funcione con cualquier número.
--- Fin de la cita ---
Hola, he estado haciendo un par de multiplicaciones y creo que tengo la solución (o por lo menos una de las posibles soluciones). Al final no se trata de nada muy complicado, como dices en tus mensajes anteriores todo se reduce a separar uno de los factores de la multiplicación en unidades, decenas y centenas.
Para ello no se necesita mucho más que conocer la función módulo (mod) que entrega el resto de una división. Por ejemplo:
resto:= 37 mod 8; Entrega como resultado 2
o bien
resto:= 43 mod 10; Entrega como resultado 3
La multiplicación del ejemplo se puede escribir así (presentando la forma de resolver a mano):
--- Código: Text --- 325*426 <=> 325 * 6 = 1950 325 * 20 = 6500 + 325 * 400 = +130000 ------------ ------- 138450 = 138450 Se puede descomponer el factor de tres dígitos usando la función módulo:
Unidad := numero2 mod 10; // 426 mod 10 = 6
Decena := numero2 mod 100 - Unidad; // 426 mod 100 - Unidad = 26 - 6
Centena:= numero2 - numero2 mod 100; // 426 - 426 mod 100 = 426 - 26
No es necesario poner paréntesis a las operaciones porque mod tiene prioridad sobre la resta.
Con la descomposición hecha se pueden calcular los resultados parciales de la multiplicación:
Resultado1 := numero1*Unidad;
Resultado2 := numero1*Decena;
Resultado3 := numero1*Centena;
y el resultado final:
Producto := Resultado1 + Resultado2 + Resultado3;
Ahora sólo queda la tarea de presnetarlo en pantalla, para ello las variables Resultado2 y Resultado3 se deben dividir por 10 y por 100 respectivamente para eliminar los ceros a la derecha que sobran.
Bueno, con eso estaríamos emulando el algoritmo de la multiplicación y debería funcionar con cualquier par de números de 3 dígitos (o con un número 1 cualquiera y un número 2 de 3 dígitos)
Espero haber contestado satisfactoriamente tu duda, al principio la función módulo puede parecer un poco confusa (por lo menos para mí fue así) pero luego uno empieza a encontrarle utilidad... En fin, ese fue el aporte del día :P
Saludos ;)
Navegación
[#] Página Siguiente
Ir a la versión completa