Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2023, 15:18   #11
Maikl68
Пользователь
 
Регистрация: 05.03.2023
Сообщений: 31
По умолчанию

for мне нужен что б посчитать циклы.А ваша прога уходит в бесконечный цикл
Maikl68 вне форума Ответить с цитированием
Старый 08.03.2023, 15:36   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Чтобы не было зацикливания, нужно плюсик добавить:
Код:
currentPoolVolume += fillingSpeed - devastationSpeed;
Цитата:
Сообщение от Maikl68 Посмотреть сообщение
for мне нужен что б посчитать циклы.
Хорошо, тогда зачем while?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.03.2023, 15:43   #13
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Код:
public class Main {
    public static void main(String[] args) {

        int volume = 1200;
        int fillingSpeed = 30; //30 litres per minute
        int devastationSpeed = 10; //10 litres per minute
        int currentPoolVolume = 0;

        while (currentPoolVolume < volume) {
            currentPoolVolume += fillingSpeed - devastationSpeed;
            if (currentPoolVolume > volume) {
                currentPoolVolume = volume;
            }
            System.out.println(currentPoolVolume);
        }
    }
}
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 15:46   #14
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Lapita12,
Цитата:
Сообщение от BDA Посмотреть сообщение
Чтобы не было зацикливания, нужно плюсик добавить:
Код:
currentPoolVolume += fillingSpeed - devastationSpeed;
Хорошо, тогда зачем while?
Цикл while нужен нам потому, что мы хотим продолжать наполнять бассейн, пока он не достигнет желаемого объема. Мы не знаем, сколько итераций потребуется для достижения желаемого объема, поэтому нам нужно постоянно проверять, заполнили ли мы бассейн до желаемого объема или нет.

В этом случае цикл начинается с начального значения currentPoolVolume, равного 0, и мы продолжаем добавлять объем воды, заполняющей бассейн, на каждой итерации. Мы продолжаем делать это в цикле while до тех пор, пока текущий объем бассейна не достигнет желаемого объема, после чего мы прекращаем заполнение бассейна.

Итак, в целом, цикл while нужен нам для проверки условия, достиг ли бассейн желаемого объема или нет, и мы продолжаем обновлять значение currentPoolVolume в каждой итерации цикла, пока не достигнем желаемого объема.
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 15:51   #15
Maikl68
Пользователь
 
Регистрация: 05.03.2023
Сообщений: 31
По умолчанию

while я применил что б ограничить обьем.currentPoolVolume + выдает ошибку expression expected
Maikl68 вне форума Ответить с цитированием
Старый 08.03.2023, 15:54   #16
Maikl68
Пользователь
 
Регистрация: 05.03.2023
Сообщений: 31
По умолчанию

Цикл while нужен нам потому, что мы хотим продолжать наполнять бассейн, пока он не достигнет желаемого объема. Мы не знаем, сколько итераций потребуется для достижения желаемого объема, поэтому нам нужно постоянно проверять, заполнили ли мы бассейн до желаемого объема или нет.

В этом случае цикл начинается с начального значения currentPoolVolume, равного 0, и мы продолжаем добавлять объем воды, заполняющей бассейн, на каждой итерации. Мы продолжаем делать это в цикле while до тех пор, пока текущий объем бассейна не достигнет желаемого объема, после чего мы прекращаем заполнение бассейна.

Итак, в целом, цикл while нужен нам для проверки условия, достиг ли бассейн желаемого объема или нет, и мы продолжаем обновлять значение currentPoolVolume в каждой итерации цикла, пока не достигнем желаемого объема.

вот молодец.спасибо
Maikl68 вне форума Ответить с цитированием
Старый 08.03.2023, 15:54   #17
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Maikl68 Посмотреть сообщение
while я применил что б ограничить обьем.currentPoolVolume + выдает ошибку expression expected
Так мы решили что вы хотели?
Lapita12 вне форума Ответить с цитированием
Старый 08.03.2023, 18:17   #18
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Maikl68 Посмотреть сообщение
А нетрудно кому ни буть обьяснить ,почему мой код не работает.
Есть несколько проблем с кодом:
1. В строке
int currentPoolVolume=fillingSpeed-devastationSpeed;
вы вычисляете скорость наполнения минус скорость опустошения, но вы должны их сложить (поскольку они работают в противоположных направлениях). Правильная строка должна быть следующей
int currentPoolVolume = fillSpeed + devastationSpeed;
.

2. В условии цикла while
while(currentPoolVolume<=volume)
вы сравниваете объем бассейна со скоростью добавления и удаления воды, что неверно. Вы должны сравнивать текущий объем бассейна с максимальным объемом. Вы можете изменить условие следующим образом
while(currentPoolVolume <= volume && i <= volume)
.

3. В строке
for (int i = 0; i <=volume; i = 1++)
вы используете неправильный оператор для увеличения значения параметра
i
. Правильным оператором является
i++
или
i += 1
а не
1++
Lapita12 вне форума Ответить с цитированием
Старый 09.03.2023, 11:21   #19
Maikl68
Пользователь
 
Регистрация: 05.03.2023
Сообщений: 31
По умолчанию

Lapita12
BDA,
Цитата:
Сообщение от Lapita12 Посмотреть сообщение
Есть несколько проблем с кодом:
1. В строке
int currentPoolVolume=fillingSpeed-devastationSpeed;
вы вычисляете скорость наполнения минус скорость опустошения, но вы должны их сложить (поскольку они работают в противоположных направлениях). Правильная строка должна быть следующей
int currentPoolVolume = fillSpeed + devastationSpeed;
.

2. В условии цикла while
while(currentPoolVolume<=volume)
вы сравниваете объем бассейна со скоростью добавления и удаления воды, что неверно. Вы должны сравнивать текущий объем бассейна с максимальным объемом. Вы можете изменить условие следующим образом
while(currentPoolVolume <= volume && i <= volume)
.

3. В строке
for (int i = 0; i <=volume; i = 1++)
вы используете неправильный оператор для увеличения значения параметра
i
. Правильным оператором является
i++
или
i += 1
а не
1++
int currentPoolVolume = fillSpeed + devastationSpeed;
это плохо понял.машина не по названиям переменных работает ,а по их значениям,а значит по условию тут будет:30+10.Надо тогда в начале значение int devastationSpeed=-10;?
Спасибо за разжевывание,мне не столько задачу надо рещить,сколько разобраться что ,как и почему.

while(currentPoolVolume<=volume) я как раз и сравнивал текущий обьем с общим обьемом.(я такдумаю)

Последний раз редактировалось Maikl68; 09.03.2023 в 11:44.
Maikl68 вне форума Ответить с цитированием
Старый 09.03.2023, 12:25   #20
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Maikl68 Посмотреть сообщение
while(currentPoolVolume<=volume)
Только при их равенстве не надо продолжать цикл. Иначе на итерации при currentPoolVolume==volume будет еще раз прибавлено currentPoolVolume += fillingSpeed - devastationSpeed; (в этом месте я у себя в коде забыл исправить ошибку поставив +) и бассейн будет переполнен.
А вложенный цикл for вам вообще не нужен. Все отлично будет работать с одним while.

В условии цикла while вы как раз проверяете текущее заполнение бассейна и в теле цикла прибавляете скорость его наполнения к текущему объему.

Но еще лучше сделать так
Код:
while(currentPoolVolume<=volume - fillingSpeed + devastationSpeed)
  currentPoolVolume += fillingSpeed - devastationSpeed;
currentPoolVolume = volume;
Цикл будет проходить до момента почти полного заполнения бассейна. А уже после цикла (на последней итерации цикла) доливается остаток (предупреждается возможное переполнение). Это переполнение может возникнуть если объем бассейна не кратен скорости его заполнения. Тогда (на последней итерации цикла) будет налито меньше чем объем заполняющийся за 1 минуту (но не больше чем volume).

Пример (это не C++, я подставляю значения вместо имен переменных и разворачиваю циклы в утверждения):
Код:
volume = 50
fillingSpeed = 30
devastationSpeed = 10
currentPoolVolume = 0
while (0 <= 50 - 30 + 10) = да
0 += 30 - 10 = 20
while (20 <= 50 - 30 + 10) = да
20 += 30 - 10 = 40
while (40 <= 50 - 30 + 10) = нет, цикл while прерывается
40 = 50
Если бы цикл продолжился, тогда на последней итерации прибавили еще 20 к объему и currentPoolVolume == 60 <- переполнение

Последний раз редактировалось macomics; 09.03.2023 в 12:28.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51