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

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

Восстановить пароль Регистрация
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
27.10.2012, 00:35     целые числа #1
Добрый вечер.
в программе я задал, что вводимые три числа должны быть целыми числами, но если я ввожу нецелые, то программа просто выделяет целую часть, а мне необходимо, чтобы выводилось сообщение об ошибке. можно ли это как то сделать через оператор 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     целые числа
Посмотрите здесь:

Даны два целых числа M но N. Вывести все целые числа из промежутка [M,n] C++
C++ Дана строка, содержащая целые числа. Вывести на экран только чётные числа
C++ Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию.
C++ Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
46 / 44 / 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
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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++ Дано два числа А и В (А<В). Вывести в порядке увеличения все целые числа
В одномерном массиве, элементы которого -целые числа, удалить все четные числа C++
В одномерном массиве, элементы которого - целые числа, удалить все четные числа C++

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

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

Текущее время: 00:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru