Калкулатор PRO (за счетоводители)

Да се напише програма, която да работи като калкулатор за счетоводители –  да позволява следното:

  1. да се въведе едно число – първи операнд
  2. после знак за операция (+ – * / )
  3. после следващо число – втори операнд
  4. след което да се изведе резултатът

Той става първи операнд за следващата операция, така че след него се въвежда знак за операция и ново число, после се извежда резултата и така нататък. Програмата да поддържа и следните функции, въвеждани като операции:

  • C – „забравя“ първия операнд и позволява следващото въведено число да стане пръв операнд
  • M – запомня резултата в памет; позволява наново да се въведе операция
  • A – прибавя резултата към този в паметта; позволява наново да се въведе операция
  • R – указва, че съхраненото в паметта ще се ползва за операнд; позволява наново да се въведе операция, после за втори неин операнд ползва съхраненото в паметта.

Обяснението звучи сложно. На практика програмата трябва да прави онова, което прави и един обикновен калкулатор. Например:

   102
 + 24
 = 427
 + 53
 = 480

… и така нататък

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

2 Responses to Калкулатор PRO (за счетоводители)

  1. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    void C(double &a){  //Функция за присвояване на нов операнд
           cout<<"Wuwedete nowa stoinost; ";
           cin>>a;
           };
    double R(double &a, double &pamet){ //Функция за операции с паметта
    	char znak;
    	cin>>znak;
    	switch (znak) {
    			case '+': cout<<a<<znak<<pamet<<"="; a+=pamet; return a; break;
    			case '-': cout<<a<<znak<<pamet<<"="; a-=pamet; return a; break;
    			case '/': if (pamet==0) { cout<<"Newuzmojna operaciq n"; return a;   }
    						else
    						{ 
    						  cout<<a<<znak<<pamet<<"=";
    						  a/=pamet;
    						  return a;
    					    } break;
    			case '*': cout<<a<<znak<<pamet<<"="; a*=pamet; return a; break;
    			default: cout<<"Newaliden znak za operaciq. Opitaite otnowon"; return a;
    			}
    		};
    
    int main(int argc, char *argv[])
    {
        double a,b,pamet=0;
        char znak;
        bool walidnost=true;
        cout<<"Mojete da izpolzwate slednite funkcii:n C - pozwolqwa wuwejdane na nowo chislon M - zapametqwa n A - pribqwa rezultata kum pametta n R - izpolzwa suhranenoto w pametta za sledwashtata operaciq ";
    	cout<<"n V - wrushta tekushata pametn E - izhod ";
        cout<<"nWuwedete dwe chisla i znak za operaciq mejdu tqh: ";
        cin>>a>>znak;	//въвеждане на начален операнд и знак ( може да се въведе и втори операнд след знака )
        while (walidnost){
            switch (znak){
    				case '+': cin>>b; cout<<"="<<a+b; a+=b; break;
    				case '-': cin>>b; cout<<"="<<a-b; a-=b; break;
    				case '/': cin>>b; if (b==0) { cout<<"Newuzmojna operaciq.n"<<a; break; } 
    							else
    							{ cout<<"="<<a/b;
    							a/=b; break; }
    				case '*': cin>>b; cout<<"="<<a*b; a*=b; break;
    				case 'C': C(a); break;
    				case 'M': cout<<"Zapametqwam "<<a; pamet=a; break;
    				case 'A': cout<<"Pribawqm kum pametta "<<a; pamet+=a; break;
    				case 'R': cout<<R(a,pamet); break;
    				case 'V': cout<<"Stoinost na pametta: "<<pamet<<endl; break;
    				case 'E': cout<<"EXIT "; return EXIT_SUCCESS;
    				default: cout<<"Ne rabotq pri takiwa uslowiq. Dovijdane.n"; walidnost=false;
    				}
    		cin>>znak;
            }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Някакво подобие на калкулатор :)

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

      Доста добро подобие, бих казал – поздравления!

      Не виждам какво мога да добавя по него, освен може би, че може да се поработи малко по извеждането, за да стане съвсем използваем конзолен калкулатор. Например може съдържанието на паметта винаги да се вижда в някаква дясна колконка, на една и съща позиция. Тогава човек винаги ще знае колко има натрупано и запомнено там. Така ще стане дори по-добър от традиционните калкулатори :-)

      Друго, което може да се направи, за да прилича още повече на традиционните е, ако след извеждане на резултат вместо операция направо се въведе ново число, да се приема все едно досегания резултат се игнорира и започваме нова сметка (операцията C при нас). Това може да стане ако анализираш знака за операция и ако той е цифра, прилагаш операция C и добавяш цифрата като най-старша към числото след нея :-)

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