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