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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2015, 11:05   #1
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию Распорядок дня

Реализовать структуру данных для ввода, хранения и редактирования распорядка дня. Для указанного в качестве текущего времени реализовать определение того, что следует делать в указанное время.
Не подскажете, как можно сделать проверку, чтобы распорядок дня вводить последовательно, и чтобы один промежуток времени не налазил на другой промежуток времени (желательно код)
Код:
program task3;

type
  pItem = ^tItem;
  tItem = record
    hBegin, hEnd : 0..23;
    mBegin, mEnd : 0..59;
    task : string;
    next : pItem;
  end;
  
function checkTime(time, rule : integer) : boolean;
begin
  if (time < 0) or (time > rule) then
    checkTime := false
  else
    checkTime := true;
end;

procedure initList(var list : pItem);
begin
  list := nil;
end;

procedure insertToList(var list : pItem; hBegin, mBegin, hEnd, mEnd : integer; task : string);
var
  tmp : pItem;
begin
  new(tmp);
  tmp^.hBegin := hBegin;
  tmp^.mBegin := mBegin;
  tmp^.hEnd := hEnd;
  tmp^.mEnd := mEnd;
  tmp^.task := task;
  tmp^.next := list;
  list := tmp;
end;

procedure search(list : pItem; hTime, mTime : integer);
var
  isFound : boolean;
  res : string;
begin
  isFound := false;
  while (list <> nil) and (not isFound) do
  begin
    if (list^.hBegin * 60 + list^.mBegin <= hTime * 60 + mTime) and 
      (list^.hEnd * 60 + list^.mEnd >= hTime * 60 + mTime) then
    begin
      isFound := true;
      res := list^.task;
    end;
    list := list^.next;
  end;
  if not isFound then
    res := 'Не найдено';
  writeln(res);
end;

procedure showList(list : pItem);
begin
  while list <> nil do
  begin
    writeln('Начало занятия: ', list^.hBegin, ':', list^.mBegin, 
      ', окончание: ', list^.hEnd, ':', list^.mEnd);
    writeln('Занятие: ', list^.task);
    list := list^.next;
  end;
end;

var
  list : pItem;
  i, nomer, hBegin, mBegin, hEnd, mEnd, hTime, mTime, IOResult1, IOResult2 : integer;
  task, simbol : string;
  isCorrect : boolean;
  
begin
  initList(list);
  
  repeat
    writeln('Введите кол-во занятий: ');
    readln(simbol);
    val(simbol, nomer, IOResult1);
  until IOResult1 = 0;
  
  for i := 1 to nomer do
  begin
    isCorrect := false;
    repeat
      writeln('Введите время начала занятия: ');
      readln(simbol);
      val(simbol, hBegin, IOResult1);
      readln(simbol);
      val(simbol, mBegin, IOResult2);
      if (IOResult1 = 0) and (IOResult2 = 0) and (checkTime(hBegin, 23)) and (checkTime(mBegin, 59)) then
        isCorrect := true;
    until isCorrect and (IOResult1 = 0) and (IOResult2 = 0);
    
    isCorrect := false;
    repeat
      writeln('Введите время конца занятия: ');
      readln(simbol);
      val(simbol, hEnd, IOResult1);
      readln(simbol);
      val(simbol, mEnd, IOResult2);
      if (IOResult1 = 0) and (IOResult2 = 0) and (checkTime(hEnd, 23)) and (checkTime(mEnd, 59)) then
        isCorrect := true;
    until isCorrect and (IOResult1 = 0) and (IOResult2 = 0);
    
    writeln('Введите занятие: ');
    readln(task);
    
    writeln(hBegin,':',mBegin,' - ',hEnd,':',mEnd,' - ',task);
    insertToList(list, hBegin, mBegin, hEnd, mEnd, task);
  end;
  
  repeat
    repeat
      writeln('Введите время или 0 для выхода: '); 
      readln(simbol);
      val(simbol, hTime, IOResult1);
      readln(simbol);
      val(simbol, mTime, IOResult2); 
      if (IOResult1 = 0) and (IOResult2 = 0) and (checkTime(hTime, 23)) and (checkTime(mTime, 59)) then
        isCorrect := true;
    until isCorrect and (IOResult1 = 0) and (IOResult2 = 0);
    
    if hTime = 0 then
      break
    else if (checkTime(hTime, 23)) and (checkTime(mTime, 59)) then
      search(list, hTime, mTime)
    else
    begin
      writeln('Неверно введены данные');
      continue;
    end;
  until hTime = 0; 
end.

Последний раз редактировалось Stilet; 08.11.2015 в 11:13.
Никита757 вне форума Ответить с цитированием
Старый 08.11.2015, 11:13   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Х-м. Идейка интересная. Пишу сейчас "Напоминалку". Поработаю и над этим. Так с ходу и не определиться. Язык "не мой". Пишу на С++ в Борландовской среде. С Дельфина перевести могу, но это время, которое весьма ограничено.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.11.2015, 09:10   #3
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Не подскажете как осуществить проверку, чтобы один промежуток времени (часы:минуты) не налазил на другой промежуток времени (часы:минуты)?
Никита757 вне форума Ответить с цитированием
Старый 24.11.2015, 09:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как можно сделать проверку, чтобы распорядок дня вводить последовательно
А ты создай переменку, в которой будет храниться указатель на последний элемент списка. А дальше проверку типа такого:
Код:
function check(BeginHour,BeginMinute:Byte):Boolean;
begin
 with Last^ do
 check:=(BeginHour>hEnd) and (BeginMinute>mEnd);
end;
P.S. А вообще я бы на твоем месте расписание хранил в виде целого, количества секунд от полночи. Так удобнее считать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2015, 19:48   #5
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию

Спасибо, вас понял)
Никита757 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распорядок дня Никита757 Помощь студентам 5 25.10.2015 22:19
Вопрос Дня БД! surf135 БД в Delphi 0 03.05.2012 22:26
Ваш распорядок дня на работе=) googl Свободное общение 19 05.04.2012 08:01
Смена дня UnChanter Общие вопросы Delphi 13 03.02.2009 16:56
Help!!! диплом через 2 дня!!!! WinD Помощь студентам 3 23.06.2007 20:21