Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Создание калькулятора!


Автор: dizel003 5.2.2008, 17:29
сдесь я написал простейшую програму чтобы она складывала и вычитала...

Код

#include <iostream.h> 
 #include <fstream.h>
 #include <windows.h>
 #include <iomanip.h>
 
 char bufRus[256]; //Русификация
 char *Rus (const char* text)
 {CharToOem(text,bufRus);
 return bufRus;
 }
 
 struct kalkulator 
 {
     double a,b,c;
 
 };
 
 void read(kalkulator); 
 void write(kalkulator);
 
 int main()
 {kalkulator t;
 int choose;
                                                       
 cout<<Rus("1)Нажмите для сложения")<<endl;
 cout<<Rus("2)Нажмите для вычитания")<<endl;

 
 cout<<Rus("Выбор: ");
 cin>>choose;
 switch(choose)
 {
 case 1:
     write(t);
     break; 
 case 2:
     read(t);
     break;
 default:cout<<Rus("Смотри что вводишь!");break;
 }
 return 0;
 }
 
/*---------------------------------------------------------------------------------*/

 void read(kalkulator t) 
 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число")<<endl;
 cin>>t.b;
 t.c=t.a-t.b;
 cout<<Rus("\nРазность чисел ")<<t.c<<"\n"<<endl;
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }
 
 /*------------------------------------------------------------------------------------*/
 
 void write(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число")<<endl;
 cin>>t.b;
 t.c=t.a+t.b;
 cout<<Rus("\nСумма чисел ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }
 



Подскажите пожалуста как лучше начинать писать калькулятор... Вопервых я смог сделать чтобы программа выходила , но не смог сделать чтобы она переключалась со сложения на вычитание. Потом подскажите пожалуста как написать так чтобы вы складываете ддва числа... и потом можно былобы ответ этот умножить ещё на чтонибудь и потом к примеру разделить... 
Я просто не пойму. Нужно сохранять ответ гдето и потом чтобы его начинала читать программа при выполнении следущей операции или как? smile 

Автор: Voldemar2004 5.2.2008, 17:56
Есть такой алгоритм: Прямая Польская Запись и Обратная Польская Запись (нотация). Первая распространения не получила, вторая пользуется практически во всех реализациях калькуляторов.

http://www.interface.ru/home.asp?artId=1492
http://www.intuit.ru/department/se/pbmsu/11/5.html

Автор: dizel003 5.2.2008, 18:16
Цитата(Voldemar2004 @ 5.2.2008,  17:56)
Есть такой алгоритм: Прямая Польская Запись и Обратная Польская Запись (нотация). Первая распространения не получила, вторая пользуется практически во всех реализациях калькуляторов.

http://www.interface.ru/home.asp?artId=1492
http://www.intuit.ru/department/se/pbmsu/11/5.html

Если можно подскажите полегче способ каконибудь!=)

Автор: Voldemar2004 5.2.2008, 18:20
Ну тогда просто налепить кнопки на форму, а в классе объяви переменную-буфер - туда и будешь скидывать результат промежуточных вычислений. smile

Добавлено через 1 минуту и 41 секунду
ОПЗ хороша тем, что ты сможешь вычислять выражения типа: sin(x)*3(100(1+2)/2) - одной строкой !

Автор: dizel003 5.2.2008, 19:49
а случайно у васн нету примера по которому это все можно былобы делать? smile 

Автор: Voldemar2004 5.2.2008, 21:32
Делал на Visual Basic, правда давно. Не используя ОПЗ. Из-за чего там можно было использовать только бинарные операции без скобок и т.д.

Автор: t_gran 6.2.2008, 12:30
http://trubetskoy1.narod.ru/ppn.html- понятно, доступно и с примером. И в конечном итоге полностью реализовывается калькулятор.

Автор: dizel003 6.2.2008, 15:28
Цитата(t_gran @ 6.2.2008,  12:30)
http://trubetskoy1.narod.ru/ppn.html- понятно, доступно и с примером. И в конечном итоге полностью реализовывается калькулятор.

Огромнейшее спасибо!! smile

Добавлено через 15 секунд
на много понятнее...

Автор: new_web 6.2.2008, 21:37
А давайте сделаем  калкулятор, как у виндовс. только посзволим копирование и вставку, может ещё пару функций придумаем. и попрактиковаться будет полезно. 
Я бы сделал принт_скрин, и поворил бы кнопки,интерфейс. 
А задать все функции будет, наверное и попроще чем в консоли!

Торлько ради развлеения и набора опыта в програмировании, да и пригодится когда-нибуть, только самому как-то скучно, короче. ищу товарища по парте!

Автор: dizel003 6.2.2008, 23:07
Цитата(new_web @ 6.2.2008,  21:37)
А давайте сделаем  калкулятор, как у виндовс. только посзволим копирование и вставку, может ещё пару функций придумаем. и попрактиковаться будет полезно. 
Я бы сделал принт_скрин, и поворил бы кнопки,интерфейс. 
А задать все функции будет, наверное и попроще чем в консоли!

Торлько ради развлеения и набора опыта в програмировании, да и пригодится когда-нибуть, только самому как-то скучно, короче. ищу товарища по парте!

Я бы срадостью... но дело в том что я буду это проходить в институте с 16 февраля... я до этого ещё не дашёл))) я прошёл практически всю теорию... так что врятли смогу помочь покашто разработкам под windows smile 

Автор: dizel003 7.2.2008, 19:07
Если ещё кто прочитает эту тему smile  то подскажите можно сделать калькулятор всетаки по принцыму моей программы с помощью case?

Автор: Dronchik 14.2.2008, 17:09
Мой первый калькулятор сделаный в далной молодости smile 
Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char znak;
    int chislo[2];
    cin>>chislo[0];
    cout<<endl;
    cin>>znak;
    cout<<endl;
    cin>>chislo[1];    
    cout<<endl;    
    switch(znak)
    {
                case '+':
                     chislo[2]=chislo[0]+chislo[1];
                     break;
                case '-':
                     chislo[2]=chislo[0]-chislo[1];
                     break;
                case '*':
                     chislo[2]=chislo[0]*chislo[1];
                     break;
                case '/':
                     chislo[2]=chislo[0]/chislo[1];
                     break;
    }
    cout<<chislo[2]<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}


Автор: dizel003 14.2.2008, 17:50
[QUOTE=Dronchik,14.2.2008,  17:09]Мой первый калькулятор сделаный в далной молодости smile 
[ smile 
Вот ттакой же примитивный пример (делал в школу)-

Код

#include <iostream.h> 
 #include <fstream.h>
 #include <windows.h>
 #include <iomanip.h>
#include <math.h>
 
 char bufRus[256]; 
 char *Rus (const char* text)
 {CharToOem(text,bufRus);
 return bufRus;
 }
 
 struct kalkulator 
 {
     double a,b,c;
 
 };
 
 void writen(kalkulator); 
 void write(kalkulator);
 void writ(kalkulator);
 void wri(kalkulator);
 void wr(kalkulator);
 void w(kalkulator);




 int main()
 {kalkulator t;
 int choose;
 cout<<setw(45)<<Rus("КАЛЬКУЛЯТОР")<<endl;                                                      
 cout<<Rus("1)Нажмите для сложения")<<endl;
 cout<<Rus("2)Нажмите для вычитания")<<endl;
 cout<<Rus("3)Нажмите для умножения")<<endl;
 cout<<Rus("4)Нажмите для деления")<<endl;
 cout<<Rus("5)Нажмите для получения корня из числа")<<endl;
 cout<<Rus("6)Нажмите для возведения числа в любую степень")<<endl;

  
 
 cout<<Rus("Выбор: ");
 cin>>choose;
 switch(choose)
 {
 case 1:
     write(t);
     break; 
 case 2:
     writen(t);
     break;
 case 3:
     writ(t);
     break;
case 4:
     wri(t);
     break;
case 5:
     wr(t);
     break;
case 6:
     w(t);
     break;


 default:cout<<Rus("Смотри что вводишь!");break;
 }
 return 0;
 }
 
/*---------------------------------------------------------------------------------*/

 void writen(kalkulator t) 
 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число и нажмите Enter")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число и нажмите Enter")<<endl;
 cin>>t.b;
 t.c=t.a-t.b;
 cout<<Rus("\nРазность чисел ")<<t.c<<"\n"<<endl;
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }
 
 /*------------------------------------------------------------------------------------*/
 
 void write(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число и нажмите Enter")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число и нажмите Enter")<<endl;
 cin>>t.b;
 t.c=t.a+t.b;
 cout<<Rus("\nСумма чисел ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }
 

/*------------------------------------------------------------------------------------*/


 void writ(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число и нажмите Enter")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число и нажмите Enter")<<endl;
 cin>>t.b;
 t.c=t.a*t.b;
 cout<<Rus("\nПроизведение чисел ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }

/*------------------------------------------------------------------------------------*/


 void wri(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите первое число и нажмите Enter")<<endl;
 cin>>t.a;
 cout<<Rus("Введите второе число и нажмите Enter")<<endl;
 cin>>t.b;
 t.c=t.a/t.b;
 cout<<Rus("\nделение чисел ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }

/*------------------------------------------------------------------------------------*/


 void wr(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите число и нажмите Enter")<<endl;
 cin>>t.a;

 t.c=sqrt(t.a);
 cout<<Rus("\nкорень числа ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }

/*------------------------------------------------------------------------------------*/


 void w(kalkulator t) 
 {
     
 int metka=0;
 do
 {
     cout<<Rus("ВВедите число и нажмите Enter")<<endl;
 cin>>t.a;
     cout<<Rus("ВВедите степеь числа и нажмите Enter")<<endl;
 cin>>t.b;


 t.c=pow(t.a,t.b);
 cout<<Rus("\nчисло возведённое в степень ")<<t.c<<"\n"<<endl;

 
 cout<<Rus("Добавить ещё запись? 1-да, 2-нет")<<endl;
 cout<<Rus("Выбор: ")<<endl;
 cin>>metka;}
 while(metka!=2);
 }

/*------------------------------------------------------------------------------------*/




Автор: Dronchik 14.2.2008, 17:54
оффтоп:
{
dizel003, а я ещё в школе учусь, в 6 классе.
}
По теме: вот приметивные примеры на оторых можно учиться. Они просты в понятии.

Автор: source777 14.2.2008, 18:09
Цитата(new_web @  6.2.2008,  21:37 Найти цитируемый пост)
А давайте сделаем  калкулятор, как у виндовс. только посзволим копирование и вставку, может ещё пару функций придумаем. и попрактиковаться будет полезно. 
А я уже такой сделал года 2 назад, только на C#, фактически полный клон инженерного режима стандартного калькулятора, только без статистических функций и с ограниченной точностью... правда ещё раньше я делал калькулятор на Delphi с использованием ОПЗ, однако без неё интереснее, ибо сложнее...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)