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

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

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

> Задача на сортировку динамического списка., (по мере добавления)
сообщение
Сообщение #1


Новичок
*

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

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


Прошу посмотреть код на предмет логичности.
Задача:
Scheduling policy по методу "shortest job first".

1. Создание списка: {ПРОЦЕСС}-{ВРЕМЯ ВЫПОЛНЕНИЯ} и его сортировка по времени от меньшего к большему.
2. Вывод списка.

p.s.> так же реализованы функции "выполнить" задачу и создать список рандомных процессов, чтобы не забивать список вручную.

Код:
program STF;

uses crt,sysutils;

type

TData = record
NAME: string;
TIM_S: string;
TIME: longint;
end;

LINK = ^LIST;

LIST = record
REC: TData;
NEXT: LINK;
end;

var
i,H,M,S: integer; {счетчик, время в секундах }
HH,MM,SS: string[2]; {время текстом}
TimS: string[8];
sp, spN: LINK; {указатель на элемент и начало списка}
z: LIST; {запись}
menu: byte;

{-------------------}
procedure Add(var L,Nach:link; R:list); {добавление записи в порядке}
var p:link;

begin
new(p);
p^:=R;

{если список пуст}
if L=nil then begin
L:=p;
Nach:=p;
exit;
end

else begin
{вставка в начало}
if R.rec.time<L^.rec.time then begin
p^.next:=L;
L:=p; Nach:=p;
exit;
end

else
{вставка в середину}
while L^.next<>nil do begin
if ((R.rec.time>=L^.rec.time) and (R.rec.time<L^.next^.rec.time)) then begin
p^.next:=L^.next;
L^.next:=p;
L:=Nach;
exit;
end;{if}

L:=L^.next;
end;{while}
{вставка в конец}
L^.next:=p;
end; {else}
L:=Nach; {идем в начало списка}
end;

procedure EXECUTE(var L:link); {"выполнение" процесса}
begin
L:=L^.next;
writeln('TOP PRIORITY PROCESS HAS BEEN EXECUTED...');
readln;
end;

procedure PRINT(L:link); {печать списка процессов}
begin

if L<>nil then begin
clrscr;
while L<>nil do begin
writeln('NAME: [',L^.rec.name:9,'] TIME: ',L^.rec.tim_s);
L:=L^.next;
end;

readln;
end
else begin
writeln('SORRY, THERE IS NOTHING TO PRINT.');
readln;
end;
end;

{-------------------}


BEGIN {основной блок}

repeat
clrscr;

writeln('1 - ADD PROCESS');
writeln('2 - EXECUTE TOP PRIORITY PROCESS');
writeln('3 - PRINT PROCESS LIST');
writeln('4 - LOAD THE SAMPLE LIST');writeln;
writeln('0 - EXIT');writeln;

write('MENU = ');readln(menu);writeln;

case menu of
1:begin
clrscr;
write('NEW PROCESS NAME [e.g. calc]: ');readln(z.rec.name);
write('NEW PROCESS TIME [xx:xx:xx]: ');readln(z.rec.tim_S);writeln;
tims:=z.rec.tim_s;

HH:=tims[1]+tims[2];H:=strtoint(HH);
MM:=tims[4]+tims[5];M:=strtoint(MM);
SS:=tims[7]+tims[8];S:=strtoint(SS);

z.rec.time:=H*3600+M*60+S;
z.next:=nil;

ADD(sp,spN,z);
end;
2:begin EXECUTE(sp); end;
3:begin PRINT(sp); end;
4:begin
sp:=nil;
spN:=nil;

for i:=1 to 20 do begin
z.rec.name:='Process'+inttostr(i);
H:=random(24);if H <10 then HH:='0'+inttostr(H) else HH:=inttostr(H);
M:=random(60);if M <10 then MM:='0'+inttostr(M) else MM:=inttostr(M);
S:=random(60);if S <10 then SS:='0'+inttostr(S) else SS:=inttostr(S);

z.rec.time:=H*3600+M*60+S;
z.rec.tim_s:=HH+':'+MM+':'+SS;
z.next:=nil;
Add(sp,spN,z);
end;
writeln('LIST HAS BEEN LOADED...');
readln;
end;

end;{case}
until menu=0;{repeat}

END.{BEGIN}



Прилагаю исходник и исполняемый файл: Прикрепленный файл  SJF.rar ( 46.43 килобайт ) Кол-во скачиваний: 391


Сообщение отредактировано: Jabbson -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 3.05.2024 22:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name