Да се напише програма, която позволява да се въведат две цели числа (до 4 цифрени, първото – по-голямо от второто) и да демонстрира изваждане между тях, като изведа числата и резултата едно под друго, подравнени вдясно. Над първото число да се поставят точки над разрядите, при които ще имаме пренасяне на единица към по-младшия разряд (т.е. когато ще взимаме „едно назаем“). Например:
... 1023 - 36 = 987
По желание: Да се направи същото за 3 числа.


#include <cstdlib> #include <iostream> #include <iomanip> using namespace std; int main(int argc, char *argv[]) { int a, b, rz; int a1,a2,a3,a4,b1,b2,b3,b4,rz1,rz2,rz3,rz4; cout<<"Wuwedi dwe chisla (do chetiri cifri): "; cin>>a>>b; if ((a<=9999)&&(b<=9999)&&(a>=b)) { rz=a-b; a1=a/1000; a2=a/100%10; a3=a/10%10; a4=a%10; b1=b/1000; b2=b/100%10; b3=b/10%10; b4=b%10; rz1=rz/1000; rz2=rz/100%10; rz3=rz/10%10; rz4=rz%10; cout<<setw(2); if ((rz1+b1)>a1) cout<<"."; if ((rz2+b2)>a2) cout<<"."; else cout<<" "; if ((rz3+b3)>a3) cout<<"."; else cout<<" "; if ((rz4+b4)>a4) cout<<"."; else cout<<" "; cout<<endl; cout<<setw(5)<<a<<endl; cout<<"-"<<endl<<setw(5)<<b<<endl; cout<<"_____\n"; cout<<setw(5)<<rz<<endl; } else cout<<"newalidni danni\n"; system("PAUSE"); return 0; }Супер! Много добор мислене! Значи и на тази задача намерихте решение…
#include <cstdlib> #include <iostream> #include <iomanip> using namespace std; int razlika (int rz, int b, int a){ if ((rz+b)>a) cout<<"."; else cout<< " "; } int main(int argc, char *argv[]) { int a, b, rz; int a1,a2,a3,a4,b1,b2,b3,b4,rz1,rz2,rz3,rz4; cout<<"Wuwedi dwe chisla (do chetiri cifri): "; cin>>a>>b; if ((a<=9999)&&(b<=9999)&&(a>=b)) { rz=a-b; a1=a/1000; a2=a/100%10; a3=a/10%10; a4=a%10; b1=b/1000; b2=b/100%10; b3=b/10%10; b4=b%10; rz1=rz/1000; rz2=rz/100%10; rz3=rz/10%10; rz4=rz%10; cout<<setw(1); razlika(rz1,b1,a1); razlika(rz2,b2,a2); razlika(rz3,b3,a3); razlika(rz4,b4,a4); cout<<endl; cout<<setw(5)<<a<<endl; cout<<"-"<<endl<<setw(5)<<b<<endl; cout<<"_____\n"; cout<<setw(5)<<rz<<endl; } else cout<<"newalidni danni\n"; system("PAUSE"); return 0; }Вярно! Добре би било, ако има начин и пресмятанията на rz, a и b да се вкарат във функцията, тогава ще е още по-оптимална. Те са подобни като изчисления, зависят едно от друго – значи е възможно.
#include <cstdlib> #include <iostream> #include <iomanip> using namespace std; int razlika (int &rz, int &b, int &a){ if ((rz%10+b%10)>a%10) cout<<"."; else cout<< " "; a=a/10; // preobrazuwat se whodnite chisla b=b/10; // taka che poslednata cifra da otpada rz=rz/10; } // pri wsqka upotreba na funkciqta // primer: zapochwame s 1234 sled purwata upotreba chisloto stawa 123 // sled tretata stawa 12 i t.n. int main(int argc, char *argv[]) { int a,b,rz; cout<<"Wuwedi dwe chisla (do chetiri cifri): "; cin>>a>>b; if ((a<=9999)&&(b<=9999)&&(a>=b)) { rz=a-b; cout<<setw(1); razlika(rz,b,a); razlika(rz,b,a); razlika(rz,b,a); razlika(rz,b,a); cout<<endl; cout<<setw(5)<<a<<endl; cout<<"-"<<endl<<setw(5)<<b<<endl; cout<<"_____\n"; cout<<setw(5)<<rz<<endl; } else cout<<"newalidni danni\n"; system("PAUSE"); return 0; }Ето го подобреният вариант.
Сега вече съм съгласен, браво! Сам виждаш ползата от функцията, как опростява кода на програмата…
Ако го направиш и с цикъл, програмата ще стане дори още по-кратка и ще работи за произволно многоцифрено число :-)