• Viernes 8 de Noviembre de 2024, 19:05

Autor Tema:  Duda Con Formato Para Mostrar Un Producto  (Leído 2927 veces)

DarkisX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Duda Con Formato Para Mostrar Un Producto
« en: Viernes 5 de Octubre de 2007, 00:49 »
0
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
  1.  
  2. Program project1;
  3.    uses
  4.        crt;
  5.     const
  6.        rayita = #95;
  7.      var
  8.         numero1,numero2,primerresultado,segundoresultado,tercerresultado,resultado: integer;
  9.       begin
  10.               writeln('Por favor introduzca el primer numero entero');
  11.               readln(numero1);
  12.               writeln('Por favor introduzca el segundo numero entero');
  13.               readln(numero2);
  14.               writeln('Los resultados son: ');writeln;
  15.               primerresultado:=numero1*6;
  16.               segundoresultado:=numero1*2;
  17.               tercerresultado:=numero1*4;
  18.               resultado:=numero1*numero2;
  19.               writeln(numero1:6);
  20.               writeln(numero2:6);
  21.               writeln(rayita,rayita,rayita,rayita,rayita,rayita);
  22.               writeln(primerresultado:6);
  23.               writeln(segundoresultado:5);
  24.               writeln(tercerresultado:4);
  25.               writeln(rayita,rayita,rayita,rayita,rayita,rayita);
  26.               writeln(resultado:6);
  27.               readln
  28.        end.
  29.  
  30.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Duda Con Formato Para Mostrar Un Producto
« Respuesta #1 en: Viernes 5 de Octubre de 2007, 21:42 »
0
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...
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
  1.  
  2. writeln(numero1,' * 6 = ', resultado1);
  3.  
  4.  

Citar
writeln(rayita,rayita,rayita,rayita,rayita,rayita);
Esto no hace falta, puedas tranquilamente hacer:
Código: Text
  1.  
  2. WriteLn('-----------------------------------');
  3.  
  4.  

DarkisX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Duda Con Formato Para Mostrar Un Producto
« Respuesta #2 en: Viernes 5 de Octubre de 2007, 23:27 »
0
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
  1. primerresultado:=numero1*6;
  2.  

Sin embargo, lo que quiero hacer es que aparezca algo como:

Código: Text
  1. primerresultado:=numero1*[primerdigitodenumero2];
  2.  

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

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Duda Con Formato Para Mostrar Un Producto
« Respuesta #3 en: Viernes 5 de Octubre de 2007, 23:58 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Duda Con Formato Para Mostrar Un Producto
« Respuesta #4 en: Sábado 6 de Octubre de 2007, 06:11 »
0
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.
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
  1.  
  2. 325*426  <=>   325 *   6     =    1950
  3.                 325 *  20     =    6500
  4.               + 325 * 400     = +130000
  5.               ------------      -------
  6.                    138450     =  138450
  7.  
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 ;)

DarkisX

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Duda Con Formato Para Mostrar Un Producto
« Respuesta #5 en: Jueves 18 de Octubre de 2007, 00:32 »
0
Hola! Anteriormente, ya le había presentado mi agradecimiento a RoMaNo, y ahora lo hago públicamente :P
Pues él, lo resolvió. :kicking:

Código: Text
  1.  
  2. program Project1;
  3.  
  4. (* Ejercicio propuesto por Luis Joyanes.
  5.    Empezado por Mí xD
  6.    Y solucionado para funcionar con cualquier número de tres dígitos por RoMaNo *)
  7.  
  8. uses
  9.   Crt;
  10. const
  11.   rayita = #95;
  12. var
  13.    unidad,decena,centena,numero1,numero2,primerresultado,segundoresultado,tercerresultado,resultado: integer;
  14. begin
  15.   writeln('Por favor introduzca el primer numero entero');
  16.   readln(numero1);
  17.   writeln('Por favor introduzca el segundo numero entero');
  18.   readln(numero2);
  19.   writeln;
  20.   writeln('Los resultados son: ');writeln;
  21.   Unidad := numero2 mod 10;
  22.   Decena := numero2 mod 100 - Unidad;
  23.   Centena:= numero2 - numero2 mod 100;
  24.   primerresultado:=numero1 * unidad;
  25.   segundoresultado:=numero1 * decena;
  26.   tercerresultado:=numero1 * centena;
  27.   resultado:=primerresultado + segundoresultado + tercerresultado;
  28.   writeln(numero1:6);
  29.   writeln(numero2:6);
  30.   writeln(rayita,rayita,rayita,rayita,rayita,rayita);
  31.   writeln(primerresultado:6);
  32.   writeln(segundoresultado div 10:5);
  33.   writeln(tercerresultado div 100:4);
  34.   writeln(rayita,rayita,rayita,rayita,rayita,rayita);
  35.   writeln(resultado:6);
  36.   readln
  37. end.
  38.  
  39.  

¡Gracias amigo mío! :smartass:

 :hola: