ElTicus.com

Programación, lenguajes y recursos para programadores

Código fuente
Programa en C++ que multiplica 2 números de forma gráfica.
Mostrando paso a paso y digito a digito el proceso.
Publicado por JL Fecha: 2006-12-23 16:14:55 Idioma: Español Tipo de documento: Código fuente

Programa en C++ que multiplica 2 números

Se trata de una de las ocurrencias de un maestro de programación (saludos profe Sergio Antonio).

Programa en C++ que reciba dos numeros menores a 100 (obviamente validados) y haga la multiplicación de los mismos tal como nos enseñaron en la primaria, es decir "digito por digito" mostrando los pasos intermedios y el resultado

Aqui les dejo mi implementación por si a alguien le interesa analizarla, creo que está bastante sencillo el código.
Les agradeceré sus comentarios

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <stdio.h>


void Mensaje(char*L1, char*L2, char*L3)
{
 gotoxy(40,10); cout<<"ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
 gotoxy(40,11); cout<<"º                                   º";
 gotoxy(40,12); cout<<"º                                   º";
 gotoxy(40,13); cout<<"º                                   º";
 gotoxy(40,14); cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍPresione una teclaͼ";

 gotoxy(42,11); cout<<L1;
 gotoxy(42,12); cout<<L2;
 gotoxy(42,13); cout<<L3;
}


void BorraMensaje()
{
 gotoxy(40,10); cout<<"                                     ";
 gotoxy(40,11); cout<<"                                     ";
 gotoxy(40,12); cout<<"                                     ";
 gotoxy(40,13); cout<<"                                     ";
 gotoxy(40,14); cout<<"                                     ";
}


void Multiplica(int Uno,int Dos, int Por, int*RES, int X, int Y)
{

 int Poner;
 int Llevamos;
 char L1[50]="";
 char L2[50]="";
 char L3[50]="";

 if(Uno)
 {
  sprintf(L1,"%d x %d = %d",Por,Dos,Por*Dos);
  Poner=(Por*Dos)%10;
  Llevamos=(Por*Dos)/10;

  if(Llevamos)
  {
   sprintf(L2,"ponemos %d y llevamos %d",Poner,Llevamos);
  }
  else
  {
   sprintf(L2,"ponemos %d",Poner);
  }

  L3[0]=0;
  Mensaje(L1,L2,L3);

  RES[0]=Poner;
  gotoxy(X,Y); cout<<Poner;
  getch();

  sprintf(L1,"%d x %d = %d",Por,Uno,Por*Uno);

  Poner=Por*Uno;
  if(Llevamos){
   Poner=Poner+Llevamos;
   sprintf(L2,"m s %d que llevamos",Llevamos);
   sprintf(L3,"ponemos %d",Poner);
  }
  else
  {
   sprintf(L2,"ponemos %d",Poner);
   L3[0]=0;
  }

  Mensaje(L1,L2,L3);

  RES[1]=Poner%10;
  RES[2]=Poner/10;

  if(Poner/10) { gotoxy(X-4,Y); cout<<Poner/10; }
  gotoxy(X-2,Y); cout<<Poner%10;

  getch();
  BorraMensaje();
 }
 else
 {
  sprintf(L1,"%d x %d = %d",Por,Dos,Por*Dos);
  Poner=Por*Dos;
  sprintf(L2,"ponemos %d",Poner);
  L3[0]=0;

  Mensaje(L1,L2,L3);

  RES[0]=Poner%10;
  RES[1]=Poner/10;
  RES[2]=0;

  if(Poner/10) { gotoxy(X-2,Y); cout<<Poner/10;}
  gotoxy(X-0,Y); cout<<Poner%10;
  getch();
 }
}


int main () // Cabecera del programa principal
{
 int N1[2];
 int N2[2];
 int RES1[3]={0,0,0};
 int RES2[3]={0,0,0};
 int N;
 char L1[50]="";
 char L2[50]="";
 char L3[50]="";
 int Ponemos, Llevamos;

 clrscr();

 cout<<"PROGRAMA: 978371_2.CPP : Programa No. 2 \n";
 cout<<"PROPOSIT: Demostrar la multiplicaci¢n entre 2 n£meros entre 1 y 99\n";
 cout<<"AUTOR   : Juan Luis Campos Salcedo\n";
 cout<<"---------------------------------------\n\n";

 do{
  cout <<"Dame el primer n£mero:";
  cin >>N;
  if(N<1||N>99){
   cout <<"ERROR: El numero debe estar entre 1 y 99\n\n";
  }
 }while(N<1||N>99);
 N1[0]=N%10;
 N1[1]=N/10;

 do{
  cout <<"Dame el segundo n£mero:";
  cin >>N;
  if(N<1||N>99){
   cout <<"ERROR: El numero debe estar entre 1 y 99\n\n";
  }
 }while(N<1||N>99);

 gotoxy(1,8);
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";
 clreol(); cout<<"\n";

 N2[0]=N%10;
 N2[1]=N/10;

 //Pintar el primer n£mero
 gotoxy(10,10);
 cout<<N1[0];
 gotoxy(8,10);
 if(N1[1]) cout<<N1[1];

 //Pintar el segundo n£mero
 gotoxy(10,11);
 cout<<N2[0];
 gotoxy(8,11);
 if(N2[1])  cout<<N2[1];

 gotoxy(12,11);
 cout<<"x";
 gotoxy(6,12);
 cout<<"-------";

 Multiplica(N1[1], N1[0], N2[0], RES1, 10,13);

 if(N2[1])
 {
  Multiplica(N1[1], N1[0], N2[1], RES2, 8,14);

  gotoxy(4,15);
  cout<<"-------";

  sprintf(L1,"Sumamos la primera columna");
  sprintf(L2,"%d m s cero = %d",RES1[0],RES1[0]);
  sprintf(L3,"");
  Mensaje(L1,L2,L3);

  gotoxy(10,16); cout<<RES1[0];
  getch();


  sprintf(L1,"Sumamos la siguiente columna");
  sprintf(L2,"%d m s %d = %d",RES1[1],RES2[0],RES1[1]+RES2[0]);
  Ponemos=(RES1[1]+RES2[0])%10 ,Llevamos=(RES1[1]+RES2[0])/10;
  if(Llevamos) sprintf(L3,"Ponemos %d y llevamos %d",Ponemos,Llevamos);
  else         sprintf(L3,"Ponemos %d",Ponemos);
  Mensaje(L1,L2,L3);

  gotoxy(8,16); cout<<Ponemos;
  getch();

  if(RES2[2] || RES1[2] || RES2[1])
  {

   sprintf(L1,"Sumamos la siguiente columna");

   if(Llevamos) sprintf(L2,"%d + %d y %d que llev bamos = %d",RES1[2],RES2[1],Llevamos,RES1[2]+RES2[1]+Llevamos);
   else         sprintf(L2,"%d + %d = %d",RES1[2],RES2[1],RES1[2]+RES2[1]);
   Ponemos=(RES1[2]+RES2[1]+Llevamos)%10 ,Llevamos=(RES1[2]+RES2[1]+Llevamos)/10;
   if(Llevamos) sprintf(L3,"Ponemos %d y llevamos %d",Ponemos,Llevamos);
   else         sprintf(L3,"Ponemos %d",Ponemos);
   Mensaje(L1,L2,L3);

   gotoxy(6,16); cout<<Ponemos;
   getch();

   if(RES2[2])
   {
    sprintf(L1,"Sumamos la £ltima columna");
    if(Llevamos) sprintf(L2,"cero + %d y %d que llev bamos = %d",RES2[2],Llevamos,RES2[2]+Llevamos);
    else         sprintf(L2,"cero + %d = %d",RES2[2],RES2[2]);
    Ponemos=(RES2[2]+Llevamos);
    sprintf(L3,"Ponemos %d",Ponemos);
    Mensaje(L1,L2,L3);

    gotoxy(4,16); cout<<Ponemos;
    getch();
   }
  }
 }

 cout<<"\n\n\nFin del proceso.\n";
 system("pause");
 return 0;
}




Artículos relacionados:
manual Curso Básico de HTML Recurso no clasificado Check de diseño Recurso no clasificado Estándares en Internet artículo Ataques de inyección de SQL código fuente Como ponerle un contador de visitas a tu sitio en menos de 5 minutos.
Recurso no clasificado Como imprimir la fecha en español utilizando PHP aunque el idioma del servidor sea el inglés. Artículo Diagramas de flujo Código fuente Para imprimir la fecha en español utilizando PHP independientemente del lenguaje del servidor (Utilizando ARRAYS) Código fuente Como generar números aleatorios o pseudoaleatorios Recurso no clasificado Clasificación de los lenguajes de programación
artículo HERENCIA. Pilar de la programción Orientada a Objetos Manual Manejo de ARRAYS en PHP Manual Manejo de ARRAYS en PHP Recurso no clasificado Breve Historia de la Programación de Computadoras Código fuente Como convertir una fecha de Lenguaje Natural a tipo DATE