Обучител по изваждане на числа

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

   ...
   1023
 -   36
 =  987

По желание: Да се направи същото за 3 числа.

Публикувано в 11а, 11в с етикети . Постоянна връзка.

6 коментара по Обучител по изваждане на числа

  1. dreanor каза:
    #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;
    }
    
  2. dreanor каза:
    #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 да се вкарат във функцията, тогава ще е още по-оптимална. Те са подобни като изчисления, зависят едно от друго – значи е възможно.

  3. dreanor каза:
    #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;
    }
    

    Ето го подобреният вариант.

    • Данаил каза:

      Сега вече съм съгласен, браво! Сам виждаш ползата от функцията, как опростява кода на програмата…
      Ако го направиш и с цикъл, програмата ще стане дори още по-кратка и ще работи за произволно многоцифрено число :-)

Вашият коментар