Программисты, хелп!

avatar emotebun

162

2

emotebun

Пользователь

Регистрация: 07.09.2014

Сообщения: 5431

Рейтинг: 13438

Нарушения: 20

emotebun

Регистрация: 07.09.2014

Сообщения: 5431

Рейтинг: 13438

Нарушения: 20

Сап, дотач. Не думал, что когда-нибудь придется создавать подобную тему (и тему вообще), но нужда приперла.

Короче, дело такое: Дан рисунок поля -
Спойлер:

Синяя точка - местонахождение предмета (в данном случае - оружия), зеленое - грунт, а.к.а земля, красное - цель, в которую необходимо попасть.

Дано: формулы - x=v0t*cosa; y=v0t*sina-gt^2/2;

Ускорение свободного падения g=8.86 (m/s^2);

Начальная скорость v0=15 m/s;

Угол а,который требуется ввести самостоятельно, а также временной интервал и шаг дельта t=0.05;

Требуется создать программу, которая позволяет высчитать траекторию полета. Траекторию высчитывать нужно до достижения цели, либо до падения снаряда на землю, в каждом случае нужно вывести определенное сообщение - "достиг цели" и "промах" соответственно.

 Условия для сдачи программы: необходимо использовать оператор while, запрещено использовать оператор break .

Спойлер: "Неверный код (Шок-контент) разбитый по каким-то причинам на 2 спойлера"
import java.util.Scanner; public class Ld2161rdb087{     public static void main(String [] args){         Scanner sc=new Scanner(System.in);         double g=8.86, v0=15;         double y, t, x,a ;         boolean hitTarget=false;         System.out.println("Лысый из РТА LRDB02 161RDB087");         System.out.print("x=");         if (sc.hasNextDouble())             x0=sc.nextDouble();         else{             System.out.println("input-output error");             sc.close();             return;         }                 System.out.print("y=");         if (sc.hasNextDouble())             y0 = sc.nextDouble();         else {             System.out.println("input-output error");             sc.close();             return;         }         System.out.print("a=");         if (sc.hasNextFloat())             a = sc.nextFloat();         else {             System.out.println("input-output error");             sc.close();             return;         }         System.out.println("t  \t  x \t  y");         t=0.05;         x = v0 * t*Math.cos(a);         y = v0 * t * Math.sin(a)-g*t*t/2;         System.out.printf("%3.2f\t%7.3f\t%7.3f\n", t, x, y);
Спойлер: "Неверный код (Шок-контент) разбитый по каким-то причинам на 2 спойлера"
while (y>=0){         if (x>=15 && x<=18 && y>=4 && y<=6){

            hitTarget=true;         }     t+=0.05;     }    if (hitTarget)

        System.out.println("Снаряд достиг цели");

    else

        System.out.println("промах");

}

}  

После долгих мучений, я все еще не вдуплил, как заставить его выводить оповещения на оба случая, и прибавлять к t 0.05, если снаряд все еще в воздухе. Посему, прошу помощи у икспертов форума

По канонам:

Спойлер: "Мой лоускилльный дб"

Ф
ото под спойлером в подписи

Kitchr

Пользователь

Регистрация: 31.07.2016

Сообщения: 383

Рейтинг: 336

Kitchr

Регистрация: 31.07.2016

Сообщения: 383

Рейтинг: 336

пока пытался прочесть код призвал ГабенаGabeGabe

Valkrest

Пользователь

Регистрация: 16.05.2013

Сообщения: 266

Рейтинг: 357

Valkrest

Регистрация: 16.05.2013

Сообщения: 266

Рейтинг: 357

emotebun сказал(а):
Сап, дотач. Не думал, что когда-нибудь придется создавать подобную тему (и тему вообще), но нужда приперла.

Короче, дело такое: Дан рисунок поля -
Спойлер:

Синяя точка - местонахождение предмета (в данном случае - оружия), зеленое - грунт, а.к.а земля, красное - цель, в которую необходимо попасть.

Дано: формулы - x=v0t*cosa; y=v0t*sina-gt^2/2;

Ускорение свободного падения g=8.86 (m/s^2);

Начальная скорость v0=15 m/s;

Угол а,который требуется ввести самостоятельно, а также временной интервал и шаг дельта t=0.05;

Требуется создать программу, которая позволяет высчитать траекторию полета. Траекторию высчитывать нужно до достижения цели, либо до падения снаряда на землю, в каждом случае нужно вывести определенное сообщение - "достиг цели" и "промах" соответственно.

Условия для сдачи программы: необходимо использовать оператор while, запрещено использовать оператор break .

Спойлер: "Неверный код (Шок-контент) разбитый по каким-то причинам на 2 спойлера"
import java.util.Scanner; public class Ld2161rdb087{     public static void main(String [] args){         Scanner sc=new Scanner(System.in);         double g=8.86, v0=15;         double y, t, x,a ;         boolean hitTarget=false;         System.out.println("Лысый из РТА LRDB02 161RDB087");         System.out.print("x=");         if (sc.hasNextDouble())             x0=sc.nextDouble();         else{             System.out.println("input-output error");             sc.close();             return;         }                 System.out.print("y=");         if (sc.hasNextDouble())             y0 = sc.nextDouble();         else {             System.out.println("input-output error");             sc.close();             return;         }         System.out.print("a=");         if (sc.hasNextFloat())             a = sc.nextFloat();         else {             System.out.println("input-output error");             sc.close();             return;         }         System.out.println("t  \t  x \t  y");         t=0.05;         x = v0 * t*Math.cos(a);         y = v0 * t * Math.sin(a)-g*t*t/2;         System.out.printf("%3.2f\t%7.3f\t%7.3f\n", t, x, y);
Спойлер: "Неверный код (Шок-контент) разбитый по каким-то причинам на 2 спойлера"
while (y>=0){         if (x>=15 && x<=18 && y>=4 && y<=6){

            hitTarget=true;         }     t+=0.05;     }    if (hitTarget)

        System.out.println("Снаряд достиг цели");

    else

        System.out.println("промах");

}

}  

После долгих мучений, я все еще не вдуплил, как заставить его выводить оповещения на оба случая, и прибавлять к t 0.05, если снаряд все еще в воздухе. Посему, прошу помощи у икспертов форума

По канонам:

Спойлер: "Мой лоускилльный дб"

Ф
ото под спойлером в подписи
Нажмите, чтобы раскрыть...

Я даже не знаю, с чего начать критиковать...

1. Ты используешь не объявленые переменные x0 и y0, код вообще не откомпилируется. Потом эти переменные нигде не используются. Это тот самый "интервал времени" из условия? Нафига он нужен то?

2. Вычисление значений x и y должны происходить внутри цикла. Это основная ошибка, из-за которой программа не может выйти из цикла

3. Твоя программа не учитывает "землю", на которой стоит цель. Проверяет только ту землю, которая на уровне y=0

4. Самое важное. Если ты по какой-то причине выкладываешь код в сеть, пости его на какой-нибудь pastebin. Читать не возможно