IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> циклы, задача на циклы
marwell
сообщение 4.05.2010 9:04
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


В учебном заведении известно начало рабочего дня, продолжительность пары или урока в минутах, продолжительность обычного и большого перерывов и их место в расписании, а также количество пар (уроков) в день. Напишите программу, которая составляет расписание звонков на весь учебный день.
даже не знаю с какой стороны подойти... можно ли сделать это с помощью массива? буду благодарен совету
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 10:11
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
можно ли сделать это с помощью массива?

Можно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 10:24
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Ozzя @ 4.05.2010 10:11) *

Можно

for i:=1 to 24 do
for j:=1 to 60 do

а дальше не знаю как быть
была мысль заполнить этот массив нулями и потом изменять элементы в соответствии с номерами строк и столбцов...

Сообщение отредактировано: marwell - 4.05.2010 11:15
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 11:58
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


А почему так много то?
6 учебных дней, по 6-8 уроков (ну пусть 10)

NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1 to NumberOfDay do
For i:=1 to NumberOfLessons do
...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 12:04
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Ozzя @ 4.05.2010 11:58) *

А почему так много то?
6 учебных дней, по 6-8 уроков (ну пусть 10)

NumberOfDay:= 6;
NumberOfLessons:=10;
For i:=1 to NumberOfDay do
For i:=1 to NumberOfLessons do
...


т.е. расписание на всю неделю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 12:09
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Ну, да чего мелочиться-то. Сразу и расписание уроков вбить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 12:14
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Ozzя @ 4.05.2010 12:09) *

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

вот сам алгоритм вычисления времени звонков я и не могу понять
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 12:21
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Дзынь Начало раб. дня
Пока не конец раб. дня
Начало раб. дня+длина урока*номер урока
Дзынь
Начало раб. дня+длина урока*номер урока+длина перемены // здесь дополнительно проверку большая или маленькая перемена
Дзынь
конец

Примерно так
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 12:40
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Ozzя @ 4.05.2010 12:21) *

Дзынь Начало раб. дня
Пока не конец раб. дня
Начало раб. дня+длина урока*номер урока
Дзынь
Начало раб. дня+длина урока*номер урока+длина перемены // здесь дополнительно проверку большая или маленькая перемена
Дзынь
конец

Примерно так

а как учесть то что что в часе 60 минут? (например, начало в 8:00, 5 пар, по 90 минут, перерыв 10 минут, большой 40минут после 2 пары - 8:00, 9:20, и т.д. ) может я просто не слышал такого, но я не могу понять как сделать чтобы при превышении количества минут 60, увеличивалось количество часов blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.05.2010 12:47
Сообщение #10


Гость






Отдельно - часы, отдельно - минуты...

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
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 13:33
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


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.

не могу найти ошибку(( не хватает 10 мин перерыва
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 15:16
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


mm:=mm+prodol;

Здесь ты забываешь перемену прибавить

Наврал sad.gif

Тут добавь
  ...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;


Сообщение отредактировано: Ozzя - 4.05.2010 15:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 15:38
Сообщение #13


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(Ozzя @ 4.05.2010 15:16) *

mm:=mm+prodol;

Здесь ты забываешь перемену прибавить

Наврал sad.gif

Тут добавь
  ...
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;


но ведь тогда выведет по два одинаковых времени... может еще что-то надо изменить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 15:40
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


С чего это вдруг?
См. сам

Сообщение отредактировано: Ozzя - 4.05.2010 15:41


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 15:50
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


Цитата(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:=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.

я тебя правильно понял?Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 15:56
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Кажется, я еще что-то правил.
Мой вариант:
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.


Добавлено через 5 мин.
Понял, где наврал
Не так
mm:=mm2; // вся соль (С) тут ;)
writeln(hh,':',mm);
Writeln(hh2,':',mm2);
end;

а так

  writeln(hh,':',mm);
Writeln(hh2,':',mm2);
mm:=mm2; // вся соль (С) тут ;)

end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 4.05.2010 16:03
Сообщение #17


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


понятно, спасибо большое! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 4.05.2010 16:05
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
понятно, спасибо большое!

Не, ты молодец. В отличие от многих других. По моему, довольно-таки невнятному алгоритму написал программу. А Volvo и я только помогли
Лови +

Сообщение отредактировано: Ozzя - 4.05.2010 16:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 5.05.2010 14:18
Сообщение #19


Бывалый
***

Группа: Пользователи
Сообщений: 198
Пол: Мужской

Репутация: -  1  +


еще один вопрос: в результате программа выводит время звонков, включая также время начала следующей пары(напрмер: пар 5, выводит время звонков для 5 пар и в конце время начала шестой пары), как можно убрать это последнее время?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2010 16:14
Сообщение #20


Гость






Я что-то не так делаю, либо программа из 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

 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 15:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"