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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Программа составления расписания, подскажите алгоритм
Chester
сообщение 13.03.2004 17:22
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11

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


Решать задачу за меня никого не прошу, прошу помочь ;) и вообще пора переходить на обсуждени есложных программ smile.gif
Программа не из легких, мне кажется.
Итак, есть список преподавателей (1 препод. ведет 1 предмет), классов. Условия: есть максимальное кол-во часов в которое учитель может работать с таким-то классом в неделю, ограничения по дням недели (может работать только во вторник, или ,например, все дни кроме среды), кол-во часов которое он может работать в одном классе в день (пусть например, 2).
ну там конечно еще условий дофига, но я хотел бы чтобы мне сначала посоветовали, как делать это. Жду идей smile.gif

Сообщение отредактировано: Chester - 13.03.2004 17:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dark
сообщение 14.03.2004 3:46
Сообщение #2


Знаток
****

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

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


Хм, програмно я это не делал ) но хочу попробовать... что получиться - дам
Это я делал тока на Аксесе )


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DI
сообщение 14.03.2004 11:23
Сообщение #3


Новичок
*

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

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


1организовать ввод данных с файла
2использовать массив записей
3для дней недели использовать множество,
4начиная с 1-го дня недели проверяешь всех преподов(если два препода могут работать в этот день выбираешь того который может только вэтот день) по каждому предмету
Млин определённо чё-то забыл.... unsure.gif


--------------------
кто ищет тот всегда найдёт
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Chester
сообщение 15.03.2004 13:05
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 11

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


Допустим, ввод данных можно опустить, пусть будет константа.
А как задавать сами условия?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DI
сообщение 15.03.2004 14:03
Сообщение #5


Новичок
*

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

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


А сколько и какие у тебя условия ?
Думается, для каждого случая по-разному...
В основном при помощи циклов и процедурsmile.gif
У тебя ,наверно, процедура будет похожа на сортировку массива -
пока не будут выполняться все условия она не должна быть закончена.. ph34r.gif


--------------------
кто ищет тот всегда найдёт
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Chester
сообщение 16.03.2004 16:42
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 11

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


Условия такие:
  • по 1-2 урока в день в одном классе (в смысле в данном классе, а не всего 2 урока в день у учителя)
  • по 2 урока в день в одном классе
  • по 1-2 урока в день в одном классе с разрывом в 1 день (то есть чтобы предмет шел в данном не подряд два дня)
Я и хотел делать с помощью массива (array[days,subjects,1..6], число уроков 6) . Только как задавать сами условия, проверку и как сортировать? Мне бы алгоритм узнать.

Сообщение отредактировано: Chester - 16.03.2004 16:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fire_Rage
сообщение 18.03.2004 6:52
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26

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


Знаешь, есть такая штука, называется "генетический алгоритм", мне советовали написать с помощью него, правда не знаю, можно ли с его помощью на паскале писать. Вообще мне сказали так напиши все условия для себя и придумай, как их отсеивать, вот и думаю.Помоги мне, пришли на e-mail условия, которые пока надумал, будем вместе писать.


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Chester
сообщение 23.03.2004 15:02
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 11

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


Знаешь, если бы я знал как хотя бы условия записывать... я вообще не секу в переводе мыслей на компьютерный язык. А как их отсеивать это вообще...
А местные мастера не хотят помогать sad.gif писать много, блин, время жалеют
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fire_Rage
сообщение 25.03.2004 7:15
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 26

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


Да мне не нужно, чтобы ты переводил условия сразу на язык, просто напиши их(на русском языке),а думать потом будем.


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 25.03.2004 7:18
Сообщение #10


Четыре квадратика
****

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

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


Возможно, пройдет метод на динамическом программировании. Будет рекурсивная процедура примерно такого плана:
Код

procedure make_shed;
   if возможно добавить предмет (есть время в учебном плане) then
       for i := 1 to n do
           if i-й учитель свободен в первый же незанятый день,
           begin
               добавить этого учителя (точнее, его предмет)
               make_shed;
               убрать этого учителя, чтобы попытаться сунуть другого
           end;
   else получено расписание -- выйти из всех этих процедур
end;


Фактически тут идет полный перебор всех вариантов =(

А массив с расписанием, может, сделать плоским? (то есть примерно как расписание, которое в школе висит -- двумерная матрица, а не трехмерная =) )


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Guest
сообщение 30.03.2004 16:12
Сообщение #11


Гость






Fire_Rage
Если ты не заметил, то посмотри пару постингов выше, я писал (как раз над тем постом, где ты говоришь что не писал).
trminator
размерность идет так: по дням недели, по классам, по урокам (сверху я что-то не так написал), то есть 3х мерный получается; не я понимаю, что он на "2х мерной" бумаге как 2х мерный выглядит smile.gif А ты можешь написать примерчик, с несколькими условиями? чтобы не по-русски после IF'ов smile.gif
 К началу страницы 
+ Ответить 
trminator
сообщение 30.03.2004 20:19
Сообщение #12


Четыре квадратика
****

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

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


Хмм... на стенке в школе расписание вроде не трехмерное висит +) Вот мне и показалось, что двумерное удобнее (прообразом таблицы может служить как раз школьное расписание).

А что касается условий... Сколько часов в неделю может работать учитель -- свойство самого учителя (если будет запись с инфой об учителе, то это -- одно из полей такой записи). А по остальным условиям надо еще репу почесать +)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Atos
сообщение 31.03.2004 11:37
Сообщение #13


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


Да, действительно, трёхмерная получается... Так и создать трёхмерный массив [1..DayOfWeek, 1..Class,1..MaxLessons] of word. Потом заполнить его номерами учителей - это и будет расписание. В процедуру make_shed передавать его по значению - тогда не придётся "убирать этого учителя, чтобы сунуть другого".
Если расписание составлено - выводить его прямо из процедуры. Передавать в процедуру x, y, z, изначально равные 1 - это координаты текущей заполняемой ячейки. Перед рекурсивном вызовом make_shed делать inc(z) если z<MaxLessons else begin z:=1 ; inc(y); и т.д. Если x=DayOfWeek то расписание составлено.
Вообще, предложенный алгоритм make_shed мне понравился: прост и ясен, как всё гениальное. Сразу ясна становится структура проги, а оптимизировать детали можно по ходу написания.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 31.03.2004 19:38
Сообщение #14


Четыре квадратика
****

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

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


По-моему, все-таки нужно постараться передать не по значению... неслабый массив-то передавать... а детали обдумать надо, а времени как обычно нет...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fire_Rage
сообщение 1.04.2004 6:40
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 26

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


Цитата(Guest @ 30.03.04 13:12)
Fire_Rage
Если ты не заметил, то посмотри пару постингов выше, я писал (как раз над тем постом, где ты говоришь что не писал).

Во-первых, ты написал не все условия(к примеру в тот-то день неможет данный учитель и т.д. и т.п.)
Во-вторых будет 3-хмерный массив-класс, дни недели, и сами уроки на этот денб.
в-третих, я собираюсь делать по генетическому алгоритму.

Сообщение отредактировано: Fire_Rage - 2.04.2004 6:40


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Atos
сообщение 3.04.2004 7:01
Сообщение #16


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


Цитата
По-моему, все-таки нужно постараться передать не по значению... неслабый массив-то передавать...

Да, действительно, я как-то не подумал... Ну, тогда x,y,z передавать по значению. (x,y,z) - как бы граница между заполненной и незаполненной частью массива, причём нам неважно, что незаполненная может быть забита всяким мусором.{может быть, она уже считалась заполненной в процессе рекурсивных вызовов, но мы этого "не помним"}

Chester, напиши все конкретные условия по учителям. Надо будет составить массив записей Teacher, заполнить поля, и уже тогда конкретно прописать кодом условие if i-й учитель свободен в первый же незанятый день
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 4.04.2004 16:55
Сообщение #17


Четыре квадратика
****

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

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


Можно заводить трезмерный массив не [1..DayOfWeek, 1..Class,1..MaxLessons], а [0..DayOfWeek, 0..Class,0..MaxLessons]. В нулевых элементах можно хранить, сколько дней/классов/уроков уже распланировано. Тогда откат -- просто уменьшение на единицу одного из этих чисел +)

А вообще задача еще интересует автора?


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Chester
сообщение 6.04.2004 15:07
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 11

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


интересует
руки только что-то не доходят. условия уже пишу, половину накромсал (их не то чтобы очень много), остальное скоро допишу
сюда можно html таблицу вставить? у меня в виде таблички просто

Сообщение отредактировано: Chester - 6.04.2004 15:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Atos
сообщение 7.04.2004 9:36
Сообщение #19


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


Можно присоединить к ответу htm- файл, если меньше 50 K.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
imp
сообщение 7.04.2004 13:06
Сообщение #20


Гость






народ, всем привет smile.gif первый раз здесь. будующая профессия обязывает...может, здесь хоть программировать научусь. rolleyes.gif
а вообще то я надеюсь, что мне кто-нибудь поможет решить задачу, или хотя-бы идею какую подкинет, т.к я только начинаю в это все въезжать, и еще мало что сама понимаю. ближе к делу:
нужно построить модель неупорядоченной таблицы на паскале или фортране
 К началу страницы 
+ Ответить 

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

 

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