В учебном заведении известно начало рабочего дня, продолжительность пары или урока в минутах, продолжительность обычного и большого перерывов и их место в расписании, а также количество пар (уроков) в день. Напишите программу, которая составляет расписание звонков на весь учебный день.
даже не знаю с какой стороны подойти... можно ли сделать это с помощью массива? буду благодарен совету
for i:=1 to 24 do
for j:=1 to 60 do
А почему так много то?
6 учебных дней, по 6-8 уроков (ну пусть 10)
NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1 to NumberOfDay do
For i:=1 to NumberOfLessons do
...
NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1 to NumberOfDay do
For i:=1 to NumberOfLessons do
...
Ну, да чего мелочиться-то. Сразу и расписание уроков вбить.
Дзынь Начало раб. дня
Пока не конец раб. дня
Начало раб. дня+длина урока*номер урока
Дзынь
Начало раб. дня+длина урока*номер урока+длина перемены // здесь дополнительно проверку большая или маленькая перемена
Дзынь
конец
Примерно так
Отдельно - часы, отдельно - минуты...
hh := 8; mm := 0; // 8:00
mm := mm + 90; // добавляем 90 минут - конец первой пары, так?
// А теперь - корректируем время, чтоб было в правильном формате, а не 8:90
hh := hh + (mm div 60);
mm := mm mod 60;
// и (чудо, правда?) у нас получается hh = 9, а mm = 30
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:=1 to kol do
begin
mm:=mm+prodol;
hh:=hh+(mm div 60);
mm:=mm mod 60;
if i=mesto then begin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
end
else begin
mm2:=mm+per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
end;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
readln;
end.
mm:=mm+prodol;
...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
mm:=mm+prodol;
...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
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:=1 to kol do
begin
mm:=mm+prodol;
hh:=hh+(mm div 60);
mm:=mm mod 60;
if i=mesto then begin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
end
else begin
mm2:=mm+per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
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:=1 to kol do
begin
mm:=mm+prodol;
hh:=hh+(mm div 60);
mm:=mm mod 60;
if i=mesto then
begin
mm2:=mm+bol_per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
end
else
begin
mm2:=mm+per;
hh2:=hh+(mm2 div 60);
mm2:=mm2 mod 60;
end;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
mm:=mm2;
end;
readln;
end.
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
mm:=mm2; // вся соль (С) тут ;)
end;
понятно, спасибо большое!
еще один вопрос: в результате программа выводит время звонков, включая также время начала следующей пары(напрмер: пар 5, выводит время звонков для 5 пар и в конце время начала шестой пары), как можно убрать это последнее время?
Я что-то не так делаю, либо программа из 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
А вот так должно показывать правильно, к тому же - без лишних действий, и без лишней информации на экране:
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:=1 to kol do
begin
writeln(hh, ':', mm); { begin }
mm := mm + prodol;
hh := hh + (mm div 60);
mm := mm mod 60;
writeln(hh, ':', mm); { end }
if i = mesto then mm := mm + bol_per
else mm := mm + per;
hh := hh + (mm div 60);
mm := mm mod 60;
end;
readln;
end.
...
mm:=mm2;
hh:=hh2;
...