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

Не работает проверка - C++

Восстановить пароль Регистрация
 
tyrbo321
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 6
12.01.2014, 14:16     Не работает проверка #1
Вообщем тут такое дело, я все вычислил, вывел в консоль результат (чтобы проще было), отнял от ранее заданной переменной y переменную fall, переменная fall равняется формуле по которой вычесляется падение пули.
Переменная timeto=865:rандом число, проще говоря находим t=s:v,время полета до цели=расстояние:время,fall=9.8*время полета до цели в квадраде, затем : 2, получается fall это количество метров на которое упадет пуля, от сюда следует что нужно отнять от уже заданной ранее высоты (y) переменную fall, получается кордината y которую должен так же посчитать пользователь, x такая же пока что(заданная рандомом), и вот пользователь читает кординаты, вичесляет, вводит x, вводит y, и он должен попасть, так как кординаты совпали, но к сожелению вот тут программа не реагирует на y, считает что я его неправильно ввел, вот код:
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
    
 
    setlocale(LC_ALL,"RUS");
    int weapon;
    double timeto,fall,rand_dist_mosina,rand_dist_m82, x, y, x1, y1,y2;
    cout << ("Выберите винтовку (нажмите цифру).") << endl
              << ("1.M82") << endl
       cin >> weapon;
       switch(weapon)
       {
case 1:
srand(time(0));
    rand_dist_m82=rand() % 1500;
    timeto=rand_dist_m82/900;
    fall=(9.8*(timeto*timeto))/2;
    x = rand() % 1000;
    y = rand() % 1000;
    cout << ("Вы выбрали M82.") <<endl
              << ("Дистанция:" ) << rand_dist_m82 << endl
              << ("Кординаты:" ) << endl
              << ("x=") << x << endl
              << ("y=")<< y << endl;
            cout << fall << endl;
            y = y-fall;
            cout << y << endl;
     break;
       }
    cin>>x1;
    cin>>y1;    
    if (x1 == x && y1 == y)
        cout << ("Прямо в цель!");
rand_dist_mosina = расстояние которое задается для стрельбы с мосины.

Добавлено через 4 минуты
Вывожу y чтобы не считать самому, тупо ввести x, и y.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
12.01.2014, 14:27     Не работает проверка #2
Вот:

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
void main( )
{
    setlocale(LC_ALL,"RUS");
    int weapon;
    double timeto,fall,rand_dist_mosina,rand_dist_m82, x, y, x1, y1, y2;
    cout << ("Выберите винтовку (нажмите цифру).") << endl
        << ("1.Винтовка Мосина") << endl;
    cin >> weapon;
    switch(weapon)
    {
    case 1:
        srand(time_t(0));
        rand_dist_m82=rand() % 1500;
        timeto=rand_dist_m82/900;
        fall=(9.8*(timeto*timeto))/2;
        x = rand() % 1000;
        y = rand() % 1000;
        cout << ("Вы выбрали Винтовку Barrett M82.") <<endl
            << ("Дистанция:" ) << rand_dist_m82 << endl
            << ("Кординаты:" ) << endl
            << ("x=") << x << endl
            << ("y=")<< y << endl
            <<"fall="<<fall << endl 
            <<"y2="<<(y2 = y-fall)<< endl;
        break;
    }
    cout<<"x1=";cin>>x1;
    cout<<"y1=";cin>>y1;     
    if (x1 == x && (int)y1 == (int)y2)//вот здесь, как мне кажется когда сравнивались дробные числа, были прблемы
        cout << ("Прямо в цель!");
    getchar();
    getchar();
}
Название: Untitled.png
Просмотров: 46

Размер: 9.6 Кб
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.01.2014, 14:48     Не работает проверка #3
Цитата Сообщение от some_name Посмотреть сообщение
Вот:
А если так ввести, то всё равно будет "Прямо в цель!"?
Миниатюры
Не работает проверка  
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
12.01.2014, 16:30     Не работает проверка #4
Цитата Сообщение от alsav22 Посмотреть сообщение
А если так ввести, то всё равно будет "Прямо в цель!"?
Да. Здесь лучше работать с целыми, т.к. дробные части получаются очень большие и угадать практичести невозможно:

Не работает проверка

Поэтому проверака и не проходит, мы видим только 3 числа после запятой а на деле их много больше.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.01.2014, 17:21     Не работает проверка #5
Цитата Сообщение от some_name Посмотреть сообщение
Да
Это как-то несерьёзно... Числа не совпадают, и всё равно: "Прямо в цель!"?
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
12.01.2014, 17:29     Не работает проверка #6
Потому что они проводятся к целым:

C++
1
(int)y1 == (int)y2
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.01.2014, 18:07     Не работает проверка #7
Цитата Сообщение от some_name Посмотреть сообщение
Потому что
Я понимаю почему. Я же не об этом. Если вводится число отличное от нужного, то не должно быть: "Прямо в цель!"
tyrbo321
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 6
12.01.2014, 21:19  [ТС]     Не работает проверка #8
Господи сколько гемороя XD
Я решил всю проблему переводом y в int.
alsav22
13.01.2014, 08:58
  #9

Не по теме:

Цитата Сообщение от tyrbo321 Посмотреть сообщение
Я решил всю проблему переводом y в int.
Заменить double на int - большого ума не нужно.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 09:48     Не работает проверка
Еще ссылки по теме:

Проверка на то, что введено число, а не символ не работает C++
C++ Не работает проверка пробелов строки из файла
C++ Метод Гаусса. Не работает проверка

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
13.01.2014, 09:48     Не работает проверка #10
Цитата Сообщение от some_name Посмотреть сообщение
x1 == x && (int)y1 == (int)y2)
вот из за этого и не работает
нельзя плавающие так сравнивать
столько раз этот вопрос поднимался
вот простейшее сравнение
C++
1
if(fabs(x1-x)<0.000001 && fabs(y1-y2)<0.000001)
0.000001 это точность с которой должны совпадать значения
Yandex
Объявления
13.01.2014, 09:48     Не работает проверка
Ответ Создать тему
Опции темы

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