Решать задачу за меня никого не прошу, прошу помочь ;) и вообще пора переходить на обсуждени есложных программ
Программа не из легких, мне кажется.
Итак, есть список преподавателей (1 препод. ведет 1 предмет), классов. Условия: есть максимальное кол-во часов в которое учитель может работать с таким-то классом в неделю, ограничения по дням недели (может работать только во вторник, или ,например, все дни кроме среды), кол-во часов которое он может работать в одном классе в день (пусть например, 2).
ну там конечно еще условий дофига, но я хотел бы чтобы мне сначала посоветовали, как делать это. Жду идей
Хм, програмно я это не делал ) но хочу попробовать... что получиться - дам
Это я делал тока на Аксесе )
1организовать ввод данных с файла
2использовать массив записей
3для дней недели использовать множество,
4начиная с 1-го дня недели проверяешь всех преподов(если два препода могут работать в этот день выбираешь того который может только вэтот день) по каждому предмету
Млин определённо чё-то забыл....
Допустим, ввод данных можно опустить, пусть будет константа.
А как задавать сами условия?
А сколько и какие у тебя условия ?
Думается, для каждого случая по-разному...
В основном при помощи циклов и процедур
У тебя ,наверно, процедура будет похожа на сортировку массива -
пока не будут выполняться все условия она не должна быть закончена..
Условия такие:
Знаешь, есть такая штука, называется "генетический алгоритм", мне советовали написать с помощью него, правда не знаю, можно ли с его помощью на паскале писать. Вообще мне сказали так напиши все условия для себя и придумай, как их отсеивать, вот и думаю.Помоги мне, пришли на e-mail условия, которые пока надумал, будем вместе писать.
Знаешь, если бы я знал как хотя бы условия записывать... я вообще не секу в переводе мыслей на компьютерный язык. А как их отсеивать это вообще...
А местные мастера не хотят помогать писать много, блин, время жалеют
Да мне не нужно, чтобы ты переводил условия сразу на язык, просто напиши их(на русском языке),а думать потом будем.
Возможно, пройдет метод на динамическом программировании. Будет рекурсивная процедура примерно такого плана:
Fire_Rage
Если ты не заметил, то посмотри пару постингов выше, я писал (как раз над тем постом, где ты говоришь что не писал).
trminator
размерность идет так: по дням недели, по классам, по урокам (сверху я что-то не так написал), то есть 3х мерный получается; не я понимаю, что он на "2х мерной" бумаге как 2х мерный выглядит А ты можешь написать примерчик, с несколькими условиями? чтобы не по-русски после IF'ов
Хмм... на стенке в школе расписание вроде не трехмерное висит +) Вот мне и показалось, что двумерное удобнее (прообразом таблицы может служить как раз школьное расписание).
А что касается условий... Сколько часов в неделю может работать учитель -- свойство самого учителя (если будет запись с инфой об учителе, то это -- одно из полей такой записи). А по остальным условиям надо еще репу почесать +)
Да, действительно, трёхмерная получается... Так и создать трёхмерный массив [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 мне понравился: прост и ясен, как всё гениальное. Сразу ясна становится структура проги, а оптимизировать детали можно по ходу написания.
По-моему, все-таки нужно постараться передать не по значению... неслабый массив-то передавать... а детали обдумать надо, а времени как обычно нет...
Можно заводить трезмерный массив не [1..DayOfWeek, 1..Class,1..MaxLessons], а [0..DayOfWeek, 0..Class,0..MaxLessons]. В нулевых элементах можно хранить, сколько дней/классов/уроков уже распланировано. Тогда откат -- просто уменьшение на единицу одного из этих чисел +)
А вообще задача еще интересует автора?
интересует
руки только что-то не доходят. условия уже пишу, половину накромсал (их не то чтобы очень много), остальное скоро допишу
сюда можно html таблицу вставить? у меня в виде таблички просто
Можно присоединить к ответу htm- файл, если меньше 50 K.
народ, всем привет первый раз здесь. будующая профессия обязывает...может, здесь хоть программировать научусь.
а вообще то я надеюсь, что мне кто-нибудь поможет решить задачу, или хотя-бы идею какую подкинет, т.к я только начинаю в это все въезжать, и еще мало что сама понимаю. ближе к делу:
нужно построить модель неупорядоченной таблицы на паскале или фортране
может тебе лучше новую тему открыть?
ведь тут другую задачу обсуждают!
Я вернулся. Как и обещал, с условием: http://betasite.narod.ru/rasp.htm
Жду помощи, указаний, советов. И можно просьбу, чуть побыстрее я понимаю, сам провафлял и все такое... зато такую задачу интересную отрыл.
P.S. Это мне не на зачет. чтоб не подумали чего лишнего
Учитыая объём... БрутФорс - самое то!
в смысле?
Полный перебор всех вариантов. Что-то похожее на то, что я предложил
Или даже то же самое...
Понятно. А ты можешь написать пример просчитывания какого-го либо условия?
А где все? Народу много вроде обсуждало
А обсуждать больше нечего Не брутфорс же, в конце концов :D
Ну так напиши примерчкик условия какого-нибудь средней сложности. Я не могу сразу после массивов,строк понять как это реализуется.
Перебирает все 5-изначные числа и выводит на экран те, у которых сумма цифр равна 40.
ТОВарищи, понимаю, что обсуждалась эта тема давно, но....
Если кого-то ещё интересует решение этой задачи, особенно с помощью генетического алгоритма, хотелось бы скооперироваться и обсудить некоторые вопросы...
Так здесь и будем обсуждать.
Мне кажется эта задача очень интересной.