Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 19:21   #1
Astar
 
Регистрация: 23.10.2011
Сообщений: 7
По умолчанию Структуры, с какой стороны подступить к решению задачи

Итак, задачка следующая - N сотрудников (известны фамилии) работают в две смены по индивидуальному графику (1-й день-"утро", 2-й день-"вечер", 3-й день-"выходной"). Все они в свое нерабочее время должны пройти диспансеризацию в медпункте, который работает ежедневно в две смены. В день начала диспансеризации о каждом сотруднике известно, в какую смену он работает, или то, что он выходной. Составить ежедневные списки посещения медпункта с указанием времени посещения ("утро" и "вечер"). Учесть, что в каждой смене медпункта могут быть приняты не более М человек и каждый человек должен посетить медпункт один раз. Числа N и М заданы.

Трудности возникают в самом алгоритме, а также с вводом самих структур.
допустим, если я делаю, так:
Код:
struct SOTR
{   char fam[20];
	char smena[5];	
};
 
struct DAYS
{                
  char day[60];  
  SOTR *sotr_ptr;
  int sotr_number; 
  DAYS *Next_day;
 };

DAYS *f_d,*h_d,*p_d; 
SOTR *h_s,*p_s; 
void enter_base() { 
int i,j; 
f_d=new DAYS[7];
cout<<"Monday ! Tuesday ! Wednesday !Thursday ! Friday ! Saturday! Sunday !\n";     
h_d=f_d; 
int N=7;
h_d->sotr_ptr=new SOTR[7]; 
h_d->sotr_number=N; 
h_s=h_d->sotr_ptr; 
SOTR list_1_day[100]={"Ivanov","m","Petrov", "e", "Sidorov", "f","Denisov", "m","Pavlov","e","Sizov","f", "Sedov", "m"};
}
"m"- утренняя смена, "e"- вечерняя, "f" - выходной.
т.е. поскольку все данные заданы (фамилии и смена) то нужно лишь вводить каждый раз массив, изменяя лишь смены, тогда смысл самих структур в принципе? взять и вывести все через cout?

но самое веселое- это алгоритм, вывода списков, когда, кто должен проходить диспансеризацию, 2 день мой мозг тщетно пытается понять какой здесь принцип?
можно, конечно попробовать добавить условие, если smena="m", вывести посещение в вечернюю смену медпункта, но как быть с теми, кто выходной, и к тому же каждый сотрудник должен не более 1 раза, а здесь, выведутся все, кто подходят под условие?

в общем, одни, вопросы, очень надеюсь, что кто-нибудь откликнется на мою просьбу разобраться с задачей, пожалуйста...
Astar вне форума Ответить с цитированием
Старый 29.06.2012, 13:10   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

если не стремиться наиболее оптимально заполнить медпункт, то достаточно просматривать список сотрудников в поисках подходящего и ещё не назначенного на некий день:

http://ideone.com/g6WpD

если нужно оптимально нагрузить медпункт, т.е. чтобы небыло простоев в конце, задача немного усложняется )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 29.06.2012, 13:59   #3
Astar
 
Регистрация: 23.10.2011
Сообщений: 7
По умолчанию

спасибо, паскаль не очень мне знаком, но попытаюсь разобраться в вашем варианте)
Astar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С какой стороны функция LORDIF Общие вопросы C/C++ 1 28.05.2012 22:38
C какой стороны вообще подступиться ? (дайте примерный алгоритм) Silly Student C++ Builder 1 03.10.2011 23:29
Стороны света ≈ стороны монитора Alex Cones Свободное общение 21 26.08.2010 17:15
помогите по решению задачи Irok Паскаль, Turbo Pascal, PascalABC.NET 2 08.01.2009 00:52
Нужна помощь по решению задачи .(Delphi) Nora Помощь студентам 4 24.05.2008 07:29