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

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

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

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

12.01.2014, 14:16. Просмотров 282. Ответов 9
Метки нет (Все метки)

Вообщем тут такое дело, я все вычислил, вывел в консоль результат (чтобы проще было), отнял от ранее заданной переменной 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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2014, 14:16     Не работает проверка
Посмотрите здесь:

Проверка не работает - C++
Вроде написал правильно, но программа не работает, вполне возможно что гдето запутался в адресах списка посмотрите что не так!!! ...

Не работает проверка строк - C++
Работаю в среде DEV C++, и не могу понять что неправильно. Пробовал вместо string ставить массив символов - немного работает но не всё. ...

Метод Гаусса. Не работает проверка - C++
#include &lt;locale&gt; #include &lt;cmath&gt; #include &lt;malloc.h&gt; #include &lt;iostream&gt; using namespace std; Значения х находит верно,...

не работает проверка бесконечного цикла - C++
// разработать класс Student, который содержит соответствующие поля для хранения: // * фамилии,+ // * имени,+ // * отчества,+ // *...

Не работает проверка на високосный год - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

Не работает проверка и сдвиг строки матрицы - C++
помогите разобраться. не работает проверка и сдвиг строки. не могу найти ошибку. #include&lt;iostream&gt; #include&lt;iomanip&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.01.2014, 14:48     Не работает проверка #3
Цитата Сообщение от some_name Посмотреть сообщение
Вот:
А если так ввести, то всё равно будет "Прямо в цель!"?
Миниатюры
Не работает проверка  
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
12.01.2014, 16:30     Не работает проверка #4
Цитата Сообщение от alsav22 Посмотреть сообщение
А если так ввести, то всё равно будет "Прямо в цель!"?
Да. Здесь лучше работать с целыми, т.к. дробные части получаются очень большие и угадать практичести невозможно:

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

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

C++
1
(int)y1 == (int)y2
alsav22
5416 / 4812 / 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++
В общем задание вот: Имеется текстовый файл.Добавить в него строку из 12 черточек,разместив её:gосле последней из строк,в которых нет...

Проверка на то, что введено число, а не символ не работает - C++
Уходит в бесконечный цикл! Если введен символ, вместо цифр. Как исправить? Нужно, что бы была возможность ввода через цикл, до тех пор пока...

Не могу понять, как работает проверка на нечётность - C++
Программа призвана выводить на консоль элементы массива с нечётными значениями. Проверка на нечётность здесь весьма нетрадиционна....

Не работает рекурсивная проверка поля в игре пятнашки - C++
Привет всем. Написал код игры, но проблемы с проверкой условия рекурсии Даже если два массива равны, оно всё равно входит в условие. А...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,655
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     Не работает проверка
Ответ Создать тему
Опции темы

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