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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2012, 19:59   #1
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию Планирование процессов SJF

Программа вылетает почему то

Код:
program sjf;

{$apptype console}

uses
	SysUtils, Russificate;

type
	TProc = record
		CPU: integer;
		TimeBeforeProcess: integer;
		TimeWork: integer;
    TimeAllWork: integer;
		LineOfProcess: ansistring;
		UsesNow: boolean;
		Active: boolean;
		Completed: boolean;
	end; 

const
	MinProc = 0;

var
	Process: array of TProc;
	n,i,j,p,k: cardinal;
	Doing: char;
  	AllTime: integer;
	TimeAll: integer;
	q: integer;
	Ended, Empty: boolean;
	a: array of integer;
	CPUMIN: cardinal;

begin
writeln(RusOut('Ââåäèòå êîë-âî ïðîöåññîâ'));
readln(n);
SetLength(Process, n);
SetLength(a, n);
n:=n-1;
for i:=MinProc to n do begin
	Writeln(RusOut('Ââåäèòå CPU è âðåìÿ ïîÿâëåíèÿ '),i+1,RusOut('-ãî ïðîöåññà â ñèñòåìå'));
	With Process[i] do begin 
		readln(CPU, TimeBeforeProcess);
		if TimeBeforeProcess<=0 then
			Active:=True
		else
			Active:=False;
		LineOfProcess:='';
		UsesNow:=False;
		if CPU<=0 then
			Completed:=True
		else
			Completed:=False;
		TimeWork:=0;
    TimeAllWork:=0;
	end;
end;
Ended:=True;
for i:=0 to n do
	if (Process[i].TimeBeforeProcess<>0)or(Process[i].CPU<>0) then
		Ended:=False;
while not Ended do begin
k:=0;
for i:=0 to n do
	if Process[i].TimeBeforeProcess=0 then begin
		a[k]:=i;
		k:=k+1;
	end;
Empty:=True;
for i:=0 to n do
  if Process[i].TimeBeforeProcess>0 then
    Empty:=False;
if not Empty then begin
  CPUMIN:=a[0];
  for i:=1 to k-1 do
  	if Process[CPUMIN].CPU>Process[a[i]].CPU then
	  	CPUMIN:=a[i];
end;
for i:=0 to n do
  if Process[i].TimeBeforeProcess>0 then begin
 		Process[i].TimeBeforeProcess:=Process[i].TimeBeforeProcess-1;
  	Process[i].LineOfProcess:=Process[i].LineOfProcess+'-';
 	end else
  	if Process[i].CPU<>0 then
	  	if i=CPUMIN then begin
		  	Process[i].CPU:=Process[i].CPU-1;
			  Process[i].LineOfProcess:=Process[i].LineOfProcess+RusOut('И');
 			end else
  			Process[i].LineOfProcess:=Process[i].LineOfProcess+RusOut('Г');
Ended:=True;
for i:=0 to n do
 	if (Process[i].TimeBeforeProcess<>0)or(Process[i].CPU<>0) then
 		Ended:=False;
end;

writeln(#13);
for i:=0 to n do
	writeln('Proc[',i,'] - ',Process[i].LineOfProcess,RusOut('X'));
readln;
end.
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Планирование. yeaP Фриланс 0 16.03.2012 23:13
Создание задания, добавление процессов, удаление процессов RAZOR1703 Win Api 12 16.02.2012 18:07
Планирование процессов CPU goshanoob Операционные системы общие вопросы 0 16.01.2012 19:08
Планирование времени. Izhic Свободное общение 12 04.08.2009 16:16