Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2013, 23:32   #1
vasa415
 
Регистрация: 04.09.2013
Сообщений: 4
По умолчанию Калькулятор

Код:
#include <stdio.h>
#include <fstream.h>
#include <math.h>
#include <conio.h>
double a,b,c;
char z;
int main(){
clrscr();
cout<<"vvedite pervoe znachenie"<<endl;
cin>>a;
cout<<"vvedite vtoroe znachenie"<<endl;
cin>>b;
clrscr();
cout<<"DLYA SLOLZHENIYA PERVOGO I VTOROGO ZNACHENIYA, NAZHMITE '+'"<<endl;
cout<<"DLYA VICHITANIYA IS PERVOGO ZNACHENIYA VTOROGO, NAZHMITE '-'"<<endl;
cout<<"DLYA UMNOZHENIYA PERVOGO ZNACHENIYA NA VTOROYE ZNACHENIE NAZHMITE '*'"<<endl;
cout<<"DLYA DELENIYAENIYA PERVOGO ZNACHENIYA NA VTOROE, NAZHMITE '/'"<<endl;
cout<<"DLYA VIKLYUCHENIYA CALKULYATORA, NAZMITE 'e'"<<endl;
cout<<endl;
cout<<endl;
cout<<"PERVOE ZNACHENIE = "<<a<<endl;
cout<<"VTOROE ZNACHENIE = "<<b<<endl;

z=getch();
switch(z){
		case '+':c=a+b;
		clrscr();
		cout<<a<<"+"<<b<<"="<<c<<endl;
		cout<<"OTVET: "<<c<<endl;break;
		
		case '-':c=a-b;
		clrscr();
		cout<<a<<"-"<<b<<"="<<c<<endl;
		cout<<"OTVET: "<<c<<endl;break;
		
		case '*':c=a*b;
		clrscr();
		cout<<a<<"*"<<b<<"="<<c<<endl;
		cout<<"OTVET: "<<c<<endl;break;
		
		case '/':c=a/b;
		clrscr();
		if (b!=0)
   			{
				cout<<a<<"/"<<b<<"="<<c<<endl;
				cout<<"OTVET: "<<c<<endl;break;
				}
		else
		    {
			cout<<"NA NOL' DELIT' NEL'ZYA"<<endl;
			getch();break;
			}
		case 'e':clrscr();
		cout<<"CALKULYYATOR VIKLYCHEN PO TREDOVANIYU POLZOVATELYA!"<<endl;break;
}
cout<<"DLYA VIHODA NAZHMITE LYUBUYU KLAVISHU"<<endl;
getch();
return 0;
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 15.10.2013 в 08:50.
vasa415 вне форума Ответить с цитированием
Старый 14.10.2013, 23:33   #2
vasa415
 
Регистрация: 04.09.2013
Сообщений: 4
По умолчанию

Если запускать через компилятор, при делении на ноль выводится сообщение "На ноль делить нельзя". А если открывать череp .ехе, то при делении на ноль просто выкидывает из программы. Почему так? Кто знает?
vasa415 вне форума Ответить с цитированием
Старый 15.10.2013, 00:06   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Потому что на ноль делить нельзя
Igor95 вне форума Ответить с цитированием
Старый 15.10.2013, 08:55   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if (b!=0)
попробуйте заменить эту строчку на
Код:
if (abs(b)>0.0000001)

Цитата:
Сообщение от Igor95
Потому что на ноль делить нельзя
Очень смешно. А Вы программу смотрели? Автор кода как раз эту ситуацию и проверяет. И сообщение о том, что NA NOL' DELIT' NEL'ZYA выдаёт именно программа, а не компилятор/система! Но в случае EXE проверка не выполняется. Вот в этом, собственно и заключается вопрос автора темы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2013, 11:03   #5
Prince730
 
Регистрация: 03.06.2011
Сообщений: 5
По умолчанию

vasa415, странно, сейчас попробовал и у меня проблемы не возникает ни в компиляторе ни когда .exe-файл запускаю. Могу предположить, что проблема может возникнуть из-за того, что программа в любом случае сначала делит на ноль (и тут вылетает ошибка, я так понимаю), а потом уже пытается проверить было ли b равно нулю. Другими словами, попробуйте сделать вот так:
Код:
case '/':clrscr();
		if (b)
   			{
                                c=a/b;
				cout<<a<<"/"<<b<<"="<<c<<endl;
				cout<<"OTVET: "<<c<<endl;break;
				}
		else
		    {
			cout<<"NA NOL' DELIT' NEL'ZYA"<<endl;
			getch();break;
			}
Поправьте меня, если ошибаюсь.

Последний раз редактировалось Prince730; 15.10.2013 в 11:07.
Prince730 вне форума Ответить с цитированием
Старый 15.10.2013, 11:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Поправьте меня, если ошибаюсь.
думаю, что Вы не ошибаетесь!
Это я проглядел, что сначала идёт деление, а уже ПОТОМ, проверка b на ноль!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2013, 14:58   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

2Serge_Bliznykov, при чем тут смешно/не смешно?
Я указал автору, что ошибка именно в операции деления на ноль. Естественно, .exe работать не будет при делении на ноль...
Данная строка выполняется еще до проверки на то, что переменная b содержит 0. Я на это автору и намекнул
Код:
case '/':c=a/b;
Igor95 вне форума Ответить с цитированием
Старый 15.10.2013, 15:21   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Igor95
Данная строка выполняется еще до проверки на то, что переменная b содержит 0. Я на это автору и намекнул
Ага. Только намекнули настолько тонко, что, извините, я лично намёк вообще не заметил! Будем надеяться, что автору топика вашего намёка было достаточно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2013, 16:25   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Ну, видимо, с намеками у меня туговато
Igor95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор sir.andrey Помощь студентам 1 22.08.2011 12:45
калькулятор Olya1985 Общие вопросы Delphi 1 16.08.2011 11:24
Калькулятор SPQR10000 Помощь студентам 11 25.02.2010 22:01
Калькулятор на C++ stox11 Помощь студентам 2 09.02.2010 07:31
Калькулятор mary1421 Общие вопросы Delphi 3 21.09.2009 13:40