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

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

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

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

27.10.2012, 00:35. Просмотров 729. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос целые числа (C++):

Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию. - C++
Задана строка, содержащая целые числа (максимум 15 чисел). Упорядочить целые числа в строке по убыванию. должно выглядеть что то...

Даны целые числа, удалить все числа со значением максимального из них - C++
Даны целы числа х1,...,xn . удалить все числа со значением max(х1,...,xn) Не могу найти ошибку... #include&lt;iostream&gt; using...

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

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. - C++
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Дано два числа А и В (А<В). Вывести в порядке увеличения все целые числа - C++
Дано два числа А и В (А&lt;В). Вывести в порядке увеличения все целые числа, расположеные между А и В(не включая чисед А и В), а также...

Даны два целых числа M но N. Вывести все целые числа из промежутка [M,n] - C++
Даны два целых числа M но N. Вывести все целые числа из промежутка , которые делящиеся 2, но не делящиеся на 4, а также количество K этих...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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, спасибо, условие заработало с модулем!
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
28.10.2012, 02:22 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что у тебя
int D,M,G;
он и приводит к целым
К целым приводит не int, а перегруженный оператор >>.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 02:22
Привет! Вот еще темы с ответами:

Дана строка, содержащая целые числа. Вывести на экран только чётные числа - C++
я накидала код...но что-то тут не ладное((( #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; using...

В одномерном массиве, элементы которого - целые числа, удалить все четные числа - C++
В одномерном массиве, элементы которого - целые числа, удалить все четные числа именно удалить а не оставить все не четные удалить...

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

В одномерном массиве, элементы которого -целые числа, удалить все четные числа - C++
В одномерном массиве, элементы которого -целые числа, удалить все четные числа.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.10.2012, 02:22
Ответ Создать тему
Опции темы

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