Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
#1

целые числа - C++

27.10.2012, 00:35. Просмотров 727. Ответов 10
Метки нет (Все метки)

Добрый вечер.
в программе я задал, что вводимые три числа должны быть целыми числами, но если я ввожу нецелые, то программа просто выделяет целую часть, а мне необходимо, чтобы выводилось сообщение об ошибке. можно ли это как то сделать через оператор if? вот та часть программы, которую меня заставили переделывать:
C++
1
2
3
4
5
6
7
int D,M,G;      /*вводимые числа должны быть целыми*/
printf(Rus("Введите три числа \n дата \n месяц \n год\nПрограмма проверит, образуют ли они правильную дату\n"));
cin >> D;
cin >> M;
cin >> G;
 
cout << D << "." << M << "." << G;
вот как я себе представляю это должно выглядеть, но в таком случае программа не работает

If (int D,M,G)
{ }
else printf(Rus("Введите целые числа"));
помогите, перепробовал все варианты с if

в инете гуглил, то там как то мне не понятно, я еще таких операторов не знаю, хотелось бы как то через if это сделать, помогите пжл
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 00:35     целые числа
Посмотрите здесь:

С клавиатуры вводятся целые числа. Вывести все числа и количество элементов, больших 10 - C++
С клавиатуры вводятся целые числа. Признак конца ввода – введено число -1. Вывести все числа и количество элементов, больших 10. Формат...

Из одного файла считать целые числа, в другие файлы записать четные и нечетные числа - C++
Нужно с одного файла считать целые числа и в другие файлы записать четные и нечетные числа. Вот код, но почему-то не работает...и как...

Даны натуральные числа п, р, целые числа A1 ..., An,. - C++
Получить произведение членов последовательности A1, ..., An, кратных р

Компоненты текстового файла содержат целые числа. Счи-таем, что если компонента содержит два числа - это коорди-наты точки, три - координаты цент - C++
Компоненты текстового файла содержат целые числа. Счи-таем, что если компонента содержит два числа - это коорди-наты точки, три -...

Целые числа - C++
Даны целые числа С1, ... с9. Есть ли в этой последовательности три подряд стоящих нулевых элементов. Если есть, то напечатать их номера,...

целые числа - C++
Даны целые числа K,L, если числа не равны то заменить каждое из них одним и тем же числом равным большему их исходных, а если равны, то...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,722
27.10.2012, 00:54     целые числа #2
Цитата Сообщение от SSSprinter Посмотреть сообщение
но если я ввожу нецелые, то программа просто выделяет целую часть,
потому что у тебя
Цитата Сообщение от SSSprinter Посмотреть сообщение
int D,M,G;
он и приводит к целым
или вводи строку и отлавливай точку и запятую, а потом приводи к числу
или вводи плавающие числа а потом проверяй
типа такого
C++
1
2
3
4
5
6
double d;
int D
cin >> d;
D=d;
if(d-D>0.000001)
  cout<<"Введите целые числа";
0.000001 это так называемый эпсилон дело в том что плавающие нельзя сравнивать с 0 там может быть ошибка округления
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
27.10.2012, 01:54     целые числа #3
Лучше не писать руками 0.000001, а сказать std::numeric_limits<double>::epsilon() (из limits
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
27.10.2012, 03:49  [ТС]     целые числа #4
ValeryS,
serejkus,
большое все спасибо, но сделал как написал ValeryS,
C++
1
2
3
4
5
6
7
8
9
10
11
12
int D,M,G;
printf(Rus("Введите три числа \n дата \n месяц \n год\nПрограмма проверит, образуют ли они правильную дату\n"));
cin >> d;
cin >> m;
cin >> g;
D=d;
M=m;
G=g;
 
cout << d << "." << m << "." << g;
if(d-D>0.000001 || m-M>0.000001 || g-G>0.000001) {printf(Rus("\nВведите целые числа\n"));} 
else
с положительными годами все ок, а при отрицательных дробных программа пишет, что дата верна.
если g отрицательное, дробное число, то G отрицательное целое, а по условию g-G>0.000001 (например -5.3-(-5)=-0.3 а это < 0.000001) как тогда сделать? отдельно задать условие еще одно для отрицательных годов?

Добавлено через 1 час 12 минут
ValeryS, serejkus, сделал вот так вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double d,m,g;
int D,M,G;
printf(Rus("Введите три числа \n дата \n месяц \n год\nПрограмма проверит, образуют ли они правильную дату\n"));
cin >> d;
cin >> m;
cin >> g;
D=d;
M=m;
G=g;
 
cout << d << "." << m << "." << g;
if(g>0 && (d-D>0.000001 || m-M>0.000001 || g-G>0.000001)) {printf(Rus("\nВведите целые числа1\n"));} else 
if(g<0 && (d-D>0.000001 || m-M>0.000001 || g-G<0.000001)) {printf(Rus("\nВведите целые числа2\n"));} else
но в этом случае при вводе целого отрицателного года программа пишет: введите целое число. почему??? все же ведь вроде нормально?

Добавлено через 15 минут
переделал вот так

C++
1
if(g>0 && (d-D>0.000001 || m-M>0.000001 || g-G>0.000001 || g-G<-0.000001)) {printf(Rus("\nВведите целые числа1\n"));} else
а программа теперь пишет при вводе отрицательного, нецелого года, что дата верна

Добавлено через 6 минут
http://i2.imageban.ru/out/2012/10/27...070d481498.jpg
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,722
27.10.2012, 08:31     целые числа #5
Цитата Сообщение от SSSprinter Посмотреть сообщение
с положительными годами все ок, а при отрицательных дробных программа пишет, что дата верна.
если g отрицательное, дробное число, то G отрицательное целое, а по условию g-G>0.000001 (например -5.3-(-5)=-0.3 а это < 0.000001) как тогда сделать?
все правильно рассуждаешь
но я не стал акцентировать на этом внимания, поскольку дата не может быть отрицательной
а по правильному сравнивается модуль разности

Добавлено через 5 минут
в данном случае это выглядит так
C++
1
2
3
4
#include  "math.h" 
..............................
if(fabs( g-G)>0.000001)
........................
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
27.10.2012, 09:40     целые числа #6
М.б. нужно проверить остаток от деления на 1: оператор % ?
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,722
27.10.2012, 10:18     целые числа #7
Цитата Сообщение от asidorchenko Посмотреть сообщение
проверить остаток от деления на 1
и какой же остаток от такого деления
n%1 ??????
сильно подозреваю что 0
да и
Цитата Сообщение от asidorchenko Посмотреть сообщение
оператор %
к double неприемлем
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
27.10.2012, 10:38     целые числа #8
Цитата Сообщение от ValeryS Посмотреть сообщение
и какой же остаток от такого деления
n%1 ??????
сильно подозреваю что 0
да и

к double неприемлем
Изначально автор писал об int. Предложено решение через перевод в double.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,722
27.10.2012, 10:43     целые числа #9
Цитата Сообщение от asidorchenko Посмотреть сообщение
Изначально автор писал об int.
ну и ???

ты не ответил на главный вопрос
Цитата Сообщение от ValeryS Посмотреть сообщение
и какой же остаток от такого деления
n%1 ??????
да и автор писал о вводе чисел
и как проверить что ввели дробное
я предложил ему два варианта. он выбрал второй

а как ты предлагаешь проверить введенное число на дробность при помощи
Цитата Сообщение от asidorchenko Посмотреть сообщение
оператор % ?
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
28.10.2012, 00:57  [ТС]     целые числа #10
всем спасибо, что отписались.
ValeryS, спасибо, условие заработало с модулем!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 02:22     целые числа
Еще ссылки по теме:

Целые числа - C++
Выпишите целые числа, принадлежащие числовому промежутку в шестнадцатеричной системе.

Даны целые числа с1 с2 - C++
Люди помогите решите задачи пожалуйста!

Целые и дробные числа - C++
на языке С как делить и умножать целое число и дробное. например 2 * 3,5 . и 2/3,5. интересует именно запись в обьявлении...

Даны целые числа a, n - C++
Даны целые числа a, n, x1,...,xn(n &gt; 0). Определить, каким по счету идёт в последовательности x1,...,xn член, равный a. Если такого члена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
28.10.2012, 02:22     целые числа #11
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что у тебя
int D,M,G;
он и приводит к целым
К целым приводит не int, а перегруженный оператор >>.
Yandex
Объявления
28.10.2012, 02:22     целые числа
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru