Ю3.6

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Задача:  Время обработки. Каждая из деталей должна последовательно пройти обработку на каждом из 3-х станков. Продолжительности обработки каждой детали на каждом станке вводятся группами по 3 числа, до исчерпания ввода. Сколько времени займет обработка всех деталей?

Количество деталей Время обработки Ответ
3 1 2 3 4 5 6 7 8 9 29
2  4 5 6 -5 4 5 Ошибка
2 5 4 3 2 4 0 13

Решение:

Ссылка на ideone C++: http://ideone.com/sKN2FU

Ссылка на ideone Java: http://ideone.com/ZwNfNL

Введем 3 переменные  [latex]t1, t2, t3 [/latex] , обозначающие время обработки детали на каждом из 3х станков и переменные [latex]x, y, z [/latex] которые будут показывать общее время обработки на каждом станке. Дольше всех будет работать 3й станок, поэтому наша задача вычислить время обработки на нем всех деталей.

Вычисляем время обработки всех деталей:

Если у нас не было введено время обработки меньше нуля, то выводим общее время работы третьего станка.

 

Калачьов Андрій Сергійович
Калачьов Андрій Сергійович

Latest posts by Калачьов Андрій Сергійович (see all)

8 thoughts on “Ю3.6

  1. Почти хорошо. Это нужно поправить:
    — отступ в 12-й строке
    — переменная k должна быть логического типа и называться как-то осмысленно. Например, wrong_data или что-то попроще. Можно просто написать комментарий.
    — не следует проводить дальнейшие вычисления если обнаружено отрицательное число. Найдите способ прервать цикл если его результаты Вам не будут нужны.

    Замечание на которое можно не обращать внимания:
    Если Вы взялись за контроль вводимых данных, то интересно бы проверить их количество. Для этого не нужно вводить тройки чисел. Вводите по одному и считайте сколько их наберётся до конца файла. Если будет прочитано 3*n чисел, то всё хорошо. Вообще-то избыток данных можно не считать ошибкой. Тогда чтение можно организовать с более сложным условием — пока не конец файла и пока не прочитано 3*n чисел.

    • Исправил отступ.
      Сделал переменную wd (wrong data).
      Добавил break для прерывания цикла.

      Не до конца понял как реализовать Ваше замечание, постарался как смог
      Ссылка
      ввожу числа в массив и в конце проверяю, что б было введено чисел не меньше, чем количество деталей, умноженное на 3. Остальные числа просто не считываются.

  2. Рассмотрел внимательнее Ваш код. Вы просто складываете все числа во входном потоке. Это не та задача.
    Давайте разберёмся. У Вас 3 станка. Когда первый станок обработает первую деталь, она переходит на второй станок. Так? А что делает первый? Естественно обрабатывает вторую деталь. Т.е. детали конечно обрабатываются последовательно на каждом из станков. Но первый станок не должен ждать пока третий закончит обработку предыдущей детали перед началом обработки следующей.
    Я подготовил рисунок, который поможет Вам помочь, как работает этот «тетрис».
    Если через x, y, z обозначить время окончания обработки очередной детали на 1-м, 2-м и 3-м станке соответственно, то алгоритм должен работать так:

    • Читаем t1, t2, t3 для первой детали
    • x = t1; y = x + t2; z = y + t3;
    • Читаем t1, t2, t3 для следующей детали
    • x += t1; y = max(x, y) + t2; z = max(y, z) + t3;
    • Продолжаем, пока не кончатся детали.

    В конце концов в z окажется время окончания обработки последней детали на 3-м станке.
    Конечно две тройки переменных я завёл только для наглядности — вполне можно обойтись только x и t, но так понятнее.

Добавить комментарий