В С++ важно уметь правильно выполнять сравнение чисел, да и вообще в программировании постоянно приходится сравнивать разные значения и в зависимости от результатов выполнять те или иные задачи. Задачи могут быть очень разными.
Чтобы хорошо понять этот материал, нужно уметь размышлять логически.
Например:
Что делать, если А=Б
Что делать, если А<Б
Что делать, если А>Б
Что делать, если А>= Б (Больше или равно)
Что делать, если А<=Б (Меньше или равно)
Что делать, если А!=Б (А и Б не равны)
В C++ легко использовать операции сравнения для каких-нибудь своих нужд.
Исходный код сравнения 2 чисел в C++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Borland C++ 3.1 Сравнения Листинг #1
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
intmain()
{
clrscr();
inta,b;
cout<<"Wwedi 2 chisla"<<"\n";
cin>>a>>b;
//Начинаем сравнивать
if(a==b)cout<<a<<" = "<<b;//Если a = b, выводим на экран равенство чисел
if(a<b)cout<<a<<" < "<<b;//Если a < b, выводим на экран полученное неравенство
if(a>b)cout<<a<<" > "<<b;//Если a>b
if(a!=b)cout<<endl<<a<<" Ne Ravno "<<b;//Если a не равно b, то пишем с новой строки. Так как будет прописано 2 выполненных условия
// cin.ignore();
cin.get();//Ожидание нажатия любой клавиши
}
Этот код достаточно прост, понять его легко. Единственное, на что хочу обратить внимание, это использование одинарных и двойных кавычек. В отличие от некоторых языков программирования, в C++ имеется существенное отличие между одинарными и двойными кавычками. Одинарные кавычки только для одиночных символов, а двойные кавычки можно использовать и для одиночных символов, и для целых строк. Каждый отдельный спецсимвол относится к одинарным, несмотря на то, что как будто бы состоит из двух: символа слеша и буквенного символа.
Первым if проверяется равенство A и B, и если значения равны: if (a==b), то на экран выводится текст, который описан вот этим кодом: cout<<a<<"="<<b;.
Примечание: (A и B могут изменяться, поэтому в коде они в кавычки не заключаются).
Абсолютно аналогичны и следующие варианты.
Для понимания описываемого далее требуется небольшой опыт, поэтому если вы только-только стали изучать С++, то можете временно пропустить ниженаписанное, вернувшись сюда позднее.
Речь пойдет о сравнении чисел для поиска целочисленного значения среди вещественных.
Иногда требуется решить задачу: Как найти целые числа среди дробных. С точки зрения представления чисел в компьютере такая задача может решаться только с какой-то погрешностью, потому что младшие разряды вещественного числа будут теряться. Я не буду вдаваться в подробности представления чисел, этого можно начитаться где угодно. Я сам не понимаю всего представления чисел, хотя стоит знать. Покажу один из вариантов решения такой вот задачки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//Borland C++ 3.1 Сравнения Листинг #2
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
/*ФУНКЦИЯ ПРОВЕРЯЕТ ЧИСЛО ЦЕЛОЕ ИЛИ ДРОБНОЕ*/
voidcheck(constdoublea)
{
cout<<endl;
cout.setf(ios::fixed);//Для вывода на экран числа с указанной точностью
cout<<setprecision(15);
if(a-(int)a){
cout<<" "<<a<<" Не целое";//Проверка разности на ноль (Если НЕ ноль)
}
else{
cout<<" "<<a<<" Целое";//Если ноль
}
}
intmain()
{
system("CLS");//Очистка экрана в Windows
longdoublea=10.000000000000001;//Инициализирую вещественные числа
longdoubleb=10.999999999999999;
longdoublec=10.0;
longdoublek=9;
check(a);//Проверяю каждое число целое оно или нет
check(b);
check(c);
check(k);
longdoubled;//Объявил еще одну переменную для ввода с клавиатуры
cout<<"\n\nВведи d: ";
cin>>d;//Ввел значение в d
check((double)d);//Выполнил проверку целое оно или нет
cin.get();
cin.get();
}
Первое, что я хочу отметить, использовано приведение double к int. После выполненных преобразований проверяется разность целого значения и его первоначальной, дробной, формы.
Из-за способа представления чисел в компьютере сравнивать число с числом напрямую нехорошо и легко словить плохой эффект, поэтому лучше использовать сравнение разности чисел.
Часто сравнивают некоторое значение с нулём или другим конкретным значением. Если само значение целое, то прямые сравнения: равенство целого с целым — оправданы, но если числа дробные, то лучше сравнивать разность.
Второе — это то, что на экране видно: числа не совсем соответствуют тем, что вероятно ожидались; Несмотря на это, при определенной точности программа дает правильные результаты.
10 комментариев на «“Сравнение чисел в С++ для начинающих”»
Привет проверь этот материал оно работает но как-то не правильно(выводит лишние элементы.
Автор сайта отвечает:
снова вы, были опечатки "n" – это переход на новую строку. Вот я косую черту не так написал и перехода не было и n выводилось. (поправил сейчас) Если это не та ошибка о которой вы, то мне трудно угадать без явного указания выводимых лишних элементов.
К последнему мной написанному коду.Вам спасибо ,но я хотел,что бы числа определялись без»костылей».У учителя в конце занятия спросил.Дима упомянул ,что приведение типа,даст не точное значение.Проверил,после 10^9 дает сбой.Жаль.
К последнему мной написанному коду.Вам спасибо ,но я хотел,что бы числа определялись без»костылей».У учителя в конце занятия спросил.Дима упомянул ,что приведение типа,даст не точное значение.Проверил,после 10^9 дает сбой.Жаль.
Привет проверь этот материал оно работает но как-то не правильно(выводит лишние элементы.
В функции void check(const double a) в 13 строке опечатка.Уберите НЕ.Должно быть .else cout<<" "<<a<<" Целое"; //Если ноль
Обожаю того кто оформил все это спасибо большое все получилось!!!!!!!!!
setlocale (0, «Russian»);
Чтобы писать по Русски =)
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
using namespace std; // А то не будет компилироваться…
Здравствуйте, Ваша инфа полезна и интересна. Спасибо.
К теме :о нахождении целых чисел, вот такой код:
Лучше делать немного иначе, наверное:
На экран выведутся те числа, которые можно считать целыми.
Можете то же самое проделать с Вашим кодом, т. е. посмотреть для некоторого множества чисел результат, наращивая заданное число на одну тысячную.
Но в этом варианте нужно иметь в виду, что ноль требует дополнительного вычисления.
К последнему мной написанному коду.Вам спасибо ,но я хотел,что бы числа определялись без»костылей».У учителя в конце занятия спросил.Дима упомянул ,что приведение типа,даст не точное значение.Проверил,после 10^9 дает сбой.Жаль.
К последнему мной написанному коду.Вам спасибо ,но я хотел,что бы числа определялись без»костылей».У учителя в конце занятия спросил.Дима упомянул ,что приведение типа,даст не точное значение.Проверил,после 10^9 дает сбой.Жаль.
❓