В учебном заведении известно начало рабочего дня, продолжительность пары или урока в минутах, продолжительность обычного и большого перерывов и их место в расписании, а также количество пар (уроков) в день. Напишите программу, которая составляет расписание звонков на весь учебный день. даже не знаю с какой стороны подойти... можно ли сделать это с помощью массива? буду благодарен совету
Ozzя
4.05.2010 14:11
Цитата
можно ли сделать это с помощью массива?
Можно
marwell
4.05.2010 14:24
Цитата(Ozzя @ 4.05.2010 10:11)
Можно
for i:=1to24dofor j:=1to60do
а дальше не знаю как быть была мысль заполнить этот массив нулями и потом изменять элементы в соответствии с номерами строк и столбцов...
Ozzя
4.05.2010 15:58
А почему так много то? 6 учебных дней, по 6-8 уроков (ну пусть 10)
NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1to NumberOfDay doFor i:=1to NumberOfLessons do
...
marwell
4.05.2010 16:04
Цитата(Ozzя @ 4.05.2010 11:58)
А почему так много то? 6 учебных дней, по 6-8 уроков (ну пусть 10)
NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1to NumberOfDay doFor i:=1to NumberOfLessons do
...
т.е. расписание на всю неделю?
Ozzя
4.05.2010 16:09
Ну, да чего мелочиться-то. Сразу и расписание уроков вбить.
marwell
4.05.2010 16:14
Цитата(Ozzя @ 4.05.2010 12:09)
Ну, да чего мелочиться-то. Сразу и расписание уроков вбить.
вот сам алгоритм вычисления времени звонков я и не могу понять
Ozzя
4.05.2010 16:21
Дзынь Начало раб. дня Пока не конец раб. дня Начало раб. дня+длина урока*номер урока Дзынь Начало раб. дня+длина урока*номер урока+длина перемены // здесь дополнительно проверку большая или маленькая перемена Дзынь конец
Примерно так
marwell
4.05.2010 16:40
Цитата(Ozzя @ 4.05.2010 12:21)
Дзынь Начало раб. дня Пока не конец раб. дня Начало раб. дня+длина урока*номер урока Дзынь Начало раб. дня+длина урока*номер урока+длина перемены // здесь дополнительно проверку большая или маленькая перемена Дзынь конец
Примерно так
а как учесть то что что в часе 60 минут? (например, начало в 8:00, 5 пар, по 90 минут, перерыв 10 минут, большой 40минут после 2 пары - 8:00, 9:20, и т.д. ) может я просто не слышал такого, но я не могу понять как сделать чтобы при превышении количества минут 60, увеличивалось количество часов
volvo
4.05.2010 16:47
Отдельно - часы, отдельно - минуты...
hh := 8; mm := 0; // 8:00
mm := mm + 90; // добавляем 90 минут - конец первой пары, так?
// А теперь - корректируем время, чтоб было в правильном формате, а не 8:90
hh := hh + (mm div60);
mm := mm mod60;
// и (чудо, правда?) у нас получается hh = 9, а mm = 30
marwell
4.05.2010 17:33
var nach,i:integer;
hh,mm,hh2,mm2:integer;
bol_per,per:integer;
prodol:integer;
kol,mesto:Integer;
begin
write('vvedite vremja nachala dnja v formate "hh mm" - ');
readln(hh, mm);
write('vvedite prodolgitelnost pari v minutah - ');
readln(prodol);
write('vvedite prodolg. bolschogo pereriva - ');
readln(bol_per);
write('vvedite prodolg. obichnogo pereriva - ');
readln(per);
write('vvedite nomer pari pered bolschim pererivom - ');
readln(mesto);
write('vvedite kolichestvo par v den - ');
readln(kol);
writeln(hh,':',mm);
for i:=1to kol dobegin
mm:=mm+prodol;
hh:=hh+(mm div60);
mm:=mm mod60;
if i=mesto thenbegin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
endelsebegin
mm2:=mm+per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
end;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
readln;
end.
не могу найти ошибку(( не хватает 10 мин перерыва
Ozzя
4.05.2010 19:16
mm:=mm+prodol;
Здесь ты забываешь перемену прибавить
Наврал
Тут добавь
...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
marwell
4.05.2010 19:38
Цитата(Ozzя @ 4.05.2010 15:16)
mm:=mm+prodol;
Здесь ты забываешь перемену прибавить
Наврал
Тут добавь
...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
но ведь тогда выведет по два одинаковых времени... может еще что-то надо изменить?
Ozzя
4.05.2010 19:40
С чего это вдруг? См. сам
marwell
4.05.2010 19:50
Цитата(Ozzя @ 4.05.2010 15:40)
С чего это вдруг? См. сам
var nach,i:integer;
hh,mm,hh2,mm2:integer;
bol_per,per:integer;
prodol:integer;
kol,mesto:Integer;
begin
write('vvedite vremja nachala dnja v formate "hh mm" - ');
readln(hh, mm);
write('vvedite prodolgitelnost pari v minutah - ');
readln(prodol);
write('vvedite prodolg. bolschogo pereriva - ');
readln(bol_per);
write('vvedite prodolg. obichnogo pereriva - ');
readln(per);
write('vvedite nomer pari pered bolschim pererivom - ');
readln(mesto);
write('vvedite kolichestvo par v den - ');
readln(kol);
writeln (hh,':',mm);
for i:=1to kol dobegin
mm:=mm+prodol;
hh:=hh+(mm div60);
mm:=mm mod60;
if i=mesto thenbegin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
endelsebegin
mm2:=mm+per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
end;
mm:=mm2;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
readln;
end.
var nach,i:integer;
hh,mm,hh2,mm2:integer;
bol_per,per:integer;
prodol:integer;
kol,mesto:Integer;
begin
write('vvedite vremja nachala dnja v formate "hh mm" - ');
readln(hh, mm);
write('vvedite prodolgitelnost pari v minutah - ');
readln(prodol);
write('vvedite prodolg. bolschogo pereriva - ');
readln(bol_per);
write('vvedite prodolg. obichnogo pereriva - ');
readln(per);
write('vvedite nomer pari pered bolschim pererivom - ');
readln(mesto);
write('vvedite kolichestvo par v den - ');
readln(kol);
writeln(hh,':',mm);
for i:=1to kol dobegin
mm:=mm+prodol;
hh:=hh+(mm div60);
mm:=mm mod60;
if i=mesto thenbegin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
endelsebegin
mm2:=mm+per;
hh2:=hh+(mm2 div60);
mm2:=mm2 mod60;
end;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
mm:=mm2;
end;
readln;
end.
Добавлено через 5 мин. Понял, где наврал Не так
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
а так
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
mm:=mm2; // вся соль (С) тут ;)
end;
marwell
4.05.2010 20:03
понятно, спасибо большое!
Ozzя
4.05.2010 20:05
Цитата
понятно, спасибо большое!
Не, ты молодец. В отличие от многих других. По моему, довольно-таки невнятному алгоритму написал программу. А Volvo и я только помогли Лови +
marwell
5.05.2010 18:18
еще один вопрос: в результате программа выводит время звонков, включая также время начала следующей пары(напрмер: пар 5, выводит время звонков для 5 пар и в конце время начала шестой пары), как можно убрать это последнее время?
volvo
5.05.2010 20:14
Я что-то не так делаю, либо программа из 16-го поста работает некорректно (комментарии - мои)?
vvedite vremja nachala dnja v formate "hh mm" - 8 0 vvedite prodolgitelnost pari v minutah - 90 vvedite prodolg. bolschogo pereriva - 40 vvedite prodolg. obichnogo pereriva - 10 vvedite nomer pari pered bolschim pererivom - 3 vvedite kolichestvo par v den - 5 8:0 // Начало первой пары 9:30 // Конец первой пары 9:40 // Начало второй пары 11:10 // Конец второй пары 11:20 // Начало третьей пары 12:50 // Конец третьей пары 13:30 // Закончился большой перерыв, началась 4-я пара 14:0 // <--- Вот это что ??? 14:10 15:40 15:50
volvo
5.05.2010 20:38
А вот так должно показывать правильно, к тому же - без лишних действий, и без лишней информации на экране:
var
nach,i:integer;
hh,mm:integer;
bol_per,per:integer;
prodol:integer;
kol,mesto:Integer;
begin
write('vvedite vremja nachala dnja v formate "hh mm" - ');
readln(hh, mm);
write('vvedite prodolgitelnost pari v minutah - ');
readln(prodol);
write('vvedite prodolg. bolschogo pereriva - ');
readln(bol_per);
write('vvedite prodolg. obichnogo pereriva - ');
readln(per);
write('vvedite nomer pari pered bolschim pererivom - ');
readln(mesto);
write('vvedite kolichestvo par v den - ');
readln(kol);
for i:=1to kol dobegin
writeln(hh, ':', mm); { begin }
mm := mm + prodol;
hh := hh + (mm div60);
mm := mm mod60;
writeln(hh, ':', mm); { end }if i = mesto then mm := mm + bol_per
else mm := mm + per;
hh := hh + (mm div60);
mm := mm mod60;
end;
readln;
end.
Ozzя
5.05.2010 20:43
...
mm:=mm2;
hh:=hh2;
...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.