Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
tyrbo321
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 6
#1

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

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

Проверка не работает
Вроде написал правильно, но программа не работает, вполне возможно что гдето...

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

Не работает проверка корректности
Я ввожу даты, и их нужно проверять на корректность. Число и месяц проверяются...

Не работает проверка условия
Добрый вечер! Я в самом начале пути программирования на C++, и возникла...

Как работает проверка условий в C++?
int x = 1; int y = 2; if((x!=2)&amp;&amp;(y!=2)) { std::cout&lt;&lt;&quot;something&quot;; } ...

9
some_name
Вежливость-главное оружие
227 / 225 / 86
Регистрация: 19.02.2013
Сообщений: 1,441
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
Просмотров: 47

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

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


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

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

Не по теме:

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

0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,369
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 это точность с которой должны совпадать значения
0
13.01.2014, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2014, 09:48

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

Не работает проверка бесконечного цикла
// разработать класс Student, который содержит соответствующие поля для...

Метод Гаусса. Не работает проверка
#include &lt;locale&gt; #include &lt;cmath&gt; #include &lt;malloc.h&gt; #include &lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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