Калкулатор – подобрена версия

Да се напише програма, която позволява да се въвеждат по две числа и знак за операция между тях (+ – * / ) и пресмята резултата от операцията. Това да се повтаря докато не се въведе невалиден знак за операция.

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

10 Responses to Калкулатор – подобрена версия

  1. Gadget каза:
     
    double a,b;
        char z;
        
        do{
            cout<<"Vavedete dve chisla: ";
            cin>>a>>b;
            cout<<"Vavedete znak za operatziq (+-*/): ";
            cin>>z;
            if(z=='+')
             cout<<"Otgovorut e: "<<a+b<<"\n\n";
            if(z=='-')
             cout<<"Otgovorut e: "<<a-b<<"\n\n";
            if(z=='*')
             cout<<"Otgovorut e: "<<a*b<<"\n\n";
            if(z=='/')
             cout<<"Otgovorut e: "<<a/b<<"\n\n";
            }
        while((z=='+')||(z=='-')||(z=='*')||(z=='/'));
          cout<<"Nevaliden znak za operatziq!"<<endl;
    
  2. marant каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int x,y;
        char z;
        cout<<"Vuvedi 4islata :";
        cin>>x>>y;
         cout<<endl<<"Vuvedi znak '+','-','*' ili '/' :"<<endl;
        do {
           cin>>z;
        if(z=='+')
                cout<<"subirame chislata :"<<x+y<<endl;
        if(z=='-')
                cout<<"Izvajdame 4islata :"<<x-y<<endl;
        if(z=='*')
                cout<<"Ymnojavame :"<<x*y<<endl;
        if(z=='/')
                cout<<"Delime :"<<x/y<<endl;
                }
        while ((z=='+')||(z=='-')||(z=='*')||(z=='/'));
              cout<<"Nevaliden znak"<<endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    • Данаил каза:

      Ехеее, четвърта задача от тебе! Ти днес си се бил развихрил : ) Супер!

      Мартине, задачата трябва малко да се коригира – така, както си я направил, ще може да се въведат стойности на числата само веднъж. Виж и коментара ми под решението на Дарин, за да не се повтарям и тук – решенията ви са подобни. Иначе в общи линии програмата е вярна.

  3. maleboldjia каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	int x,y;
    	char a;
    do {
    cout<<"Vavedete dve chisla: ";
    cin>>x>>y;
    cout<<"Vuvedete validen znak za operaciya: ";
    cin>>a;
      if (a=='+')
    	cout<<"Sborut na dvete chisla e: "<<x+y<<endl;
      if (a=='-')
        cout<<"Razlikata na dvete chisla e: "<<x-y<<endl;
      if (a=='/')
        cout<<"Chastnoto na dvete chisla e: "<<x/y<<endl;
      if (a=='*')
    	cout<<"Proizvedenieto na dvete chisla e :"<<x*y<<endl;
    }
    while (((a=='+')||(a=='-')||(a=='/')||(a=='*')));
    cout<<"Nevalidna operaciya.\n";
    
            system("pause");
    	return 0;
    }
    
    • Данаил каза:

      Вярно, но с някои малки забележки:
      1) вместо с if щеше да е по-удачно с switch – той е точно за такива случаи. Ако ли пък си решил да ползваш if, то е добре поне следващите да са else if – така ако се изпълни командата след първия if, другите директно ще се прескочат, вместо да се проверяват.
      2) какво правим, ако се въведе деление и делител 0?

  4. maleboldjia каза:

    Мда, не се сетихме за switch :D
    Ето го моето решение, макар че малко мешаница се получи с тоя if
    измежду case-овете, но..
    А и моля, ако е възможно, предишното ми решение да бъде изтрито?

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	double x,y;
    	char a;
    do {
       cout<<"Vavedete dve chisla: ";
       cin>>x>>y;
       cout<<"Vavedete validen znak za operaciya: ";
       cin>>a;
    	switch (a) {
    	   case '+': cout<<"Sborut na dvete chisla e: "<<x+y<<endl;break;
    	   case '-': cout<<"Razlikata na dvete chisla e: "<<x-y<<endl;break;
    	   case '*': cout<<"Proiz. na dvete chisla e: "<<x*y<<endl;break;
    	   case '/':if (y!=0){ //Второто число трябва да е различно от 0
    		  cout<<"Chastnoto na dvete chisla e: "<<x/y<<endl;break;
    		}
    	   else {
    		  cout<<"Nevuzmojno delene."<<endl; //иначе няма да може да се раздели
    		  system ("pause");
    		  return 0;
    	    }
    	   default: cout<<"Nevalidna operaciya."<<endl;
    	}
    }
    while (((a=='+')||(a=='-')||(a=='*')||(a=='/')));
    
    
    	system("pause");
    	return 0;
    }
    
  5. dreanor каза:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        double a,b;
        char znak;
        bool walidnost=true;
        for (;walidnost;){ //Walidnost е булева променлива променяща се при невалиден знак
            cout<<"\nWuwedete dwe chisla i znak za operaciq mejdu tqh: ";
            cin>>a>>znak>>b;
            switch (znak){
                   case '+': cout<<a+b;break;
                   case '-': cout<<a-b;break;
                   case '/': if (b==0) cout<<"Newuzmojna operaciq"; //проверка за деление на 0 
                             else cout<<a/b; break;
                   case '*': cout<<a*b; break;
                   default: cout<<"Ne rabotq pri takiwa uslowiq. Dovijdane.\n"; walidnost=false;
                   }
            }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    • Данаил каза:

      Дааа, интересно решение с булева променлива, браво! И с нестандартна употреба на for, показващa колко е гъвкав в C++ и как може да бъде използван за всичко :-). Все пак мисля, че тук while е по-удачен – не печелиш нищо от това да ползваш for, а губиш малко четливост.

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