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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2014, 15:13   #1
19dmitry19
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 14
По умолчанию Операторы if/else. Ввод пользователем квадратного уравнения с консоли (c++)

Здравствуйте, понимаю, что вопрос довольно примитивный и возможно не заслуживает на выделение для него целой темы, но тем не менее ответ на него найти пока, что не получилось.

Разбираю использование операторов if/else.
Задача: ввод пользователем с консоли переменных квадратного уравнения, нахождение его дискриминанта и квадратного корня из дискриминанта.
Что бы обезопасить пользователя от ввода ошибочных данных, при вводе значения переменной (-0) должно выводиться сообщение об ошибке.
Вопрос в том, что сообщение выводится и просто при значении переменной равной 0. Можно ли сделать, что бы (-0) читалось не как число, а как символ?
Мой код:
Код:
#include <iostream>
#include <math.h>

using namespace std;

float main()
{
	setlocale (LC_ALL, "RUSSIAN");
	float a,b,c;
	cout<<"Введите переменные :\n";
	cout<<"a :";
	cin>>a;
	cout<<"b :";
	cin>>b;
	cout<<"c :";
	cin>>c;
	if ((a==-0)||(b==-0)||(c==-0)) {
		cout<<"Допущена ошибка, ноль не является отрицательным числом!\n";
	system("PAUSE");
		return 0;
	}
	else  {
		if (a>=0) {
			cout<<"+"<<a<<"x^2";
		}
		else {
			cout<<a<<"x^2";
		};
		if (b>=0){
			cout<<"+"<<b<<"x";
		}
		else {
			cout<<b<<"x";
		}
		if (c>=0) {
			cout<<"+"<<c<<"=0\n";
		}
		else {
			cout<<c<<"=0\n";
		}

		float D;
		D=b*b-4*a*c;
		cout<<"D :"<<D<<"\t"<<"корень из D :"<<sqrt(D)<<"\n"<<endl;
	}

	system ("PAUSE");
	return 0;
}
19dmitry19 вне форума Ответить с цитированием
Старый 05.03.2014, 15:30   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Читайте не число, а строку.
Если полученная строка - корректная запись числа, то конверсия в интегер/флоат, иначе - обработка ошибок.

Таким макаром сможете правильно разбирать даже дроби, типа "1/2, 7/16" )
Smogg вне форума Ответить с цитированием
Старый 05.03.2014, 17:22   #3
19dmitry19
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 14
По умолчанию

А можно, какой нибудь пример.
А то получается чепуха какая-то.
Код:
float main()
{
	setlocale (LC_ALL, "RUSSIAN");
	char variables[10];
	float a,b,c;
	
	cout<<"Введите переменные :\n";
	cout<<"a :";
	cin>>a;
	cout<<"b :";
	cin>>b;
	cout<<"c :";
	cin>>c;
	if (variables==-0){
		cout<<"Допущена ошибка, ноль не является отрицательным числом!\n";
		system("PAUSE");
		return 0;
	}
	else  (sprintf(variables, "%f", a,b,c));{
		if (a>=0) {
			cout<<"+"<<a<<"x^2";
		}
		else {
			cout<<a<<"x^2";
		};
		if (b>=0){
			cout<<"+"<<b<<"x";
		}
		else {
			cout<<b<<"x";
		}
		if (c>=0) {
			cout<<"+"<<c<<"=0\n";
		}
		else {
			cout<<c<<"=0\n";
		}

		float D;
		D=b*b-4*a*c;
		cout<<"D :"<<D<<"\t"<<"корень из D :"<<sqrt(D)<<"\n"<<endl;
	}

	system ("PAUSE");
	return 0;
}
19dmitry19 вне форума Ответить с цитированием
Старый 05.03.2014, 18:14   #4
19dmitry19
Пользователь
 
Регистрация: 05.03.2014
Сообщений: 14
По умолчанию

Не понял. Что это значит?
19dmitry19 вне форума Ответить с цитированием
Старый 05.03.2014, 18:14   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Например, такой вариант теста корректности ввода:
Код:

#include <string>

bool is_correct_nmbr(std::string s){

	float f;
	bool b = false;
	f = atof(s.c_str());
	if(f!=0)
		b=true;
	else
		if (f == 0.0 && s.find_first_not_of("0,.")==std::string::npos)
			b=true;
	if(!b)
		std::cout << "Некорректный формат числа.";
	return b;
}

int main(){

...

	float f;
	std::string s;

	do{
		std::cin >> s;

		f = atof(s.c_str());

	} while(!is_correct_nmbr(s));
....

}
Т.е., паредполагается, что если atof() не сработает, то она возвращает ноль.

Последний раз редактировалось Smogg; 05.03.2014 в 18:17.
Smogg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График квадратного уравнения strangegirlXX JavaScript, Ajax 2 21.10.2013 17:21
Исследования квадратного уравнения PowerPoint Паскаль, Turbo Pascal, PascalABC.NET 0 23.01.2013 18:55
Решение квадратного уравнения Эммануэль Общие вопросы Delphi 13 26.12.2010 15:21
Решение квадратного уравнения Stiv Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 30.11.2007 15:15
корни квадратного уравнения InseR Общие вопросы Delphi 12 01.06.2007 17:30