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;
}




Nadie ha puesto ning˙n comentario todavÝa


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aquÝ: Imagen anti-spam =




No hay comentarios

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