![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет
У меня задание реализовать приоритетное невытесняющее планирование процессов ( http://cs.mipt.ru/docs/courses/osstud/03/ch3.htm п.3.5.5), т.е. посчитать среднее время ожидание для него. Написал программу, но при запуске она тупо виснет, даже не могу посмотреть где ошибка. Проект прикрепляю к сообщению, посмотрите пжл Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; n: integer; Bu: array[1..20] of integer; implementation {$R *.dfm} procedure priority(); var i,j,max: integer; B: array[1..10] of integer; P: array[1..10] of integer; A: array[1..10] of real; Wt: array[1..10] of real; Twt, Awt, w: real; begin w:=0; Twt:=0; max:=1; for i:= 1 to n do begin B[i] := Bu[i]; B[i]:= strtoint(InputBox('Burst time','Enter CPU burst for process '+ inttostr(i),'')); P[i]:= strtoint(InputBox('Priority','Enter process priority ' +inttostr(i), '')); if max < P[i] then max := P[i]; end; j:=1; while (j<=max) do begin i:=1; while i<=n do begin if P[i] = j then begin Wt[i]:=w; w:= w+B[i]; end; end; end; for i:= 1 to n do begin Twt:=Twt+Wt[i]; Awt:=Twt/n; end; ShowMessage(floattostr(Awt)); end; procedure TForm1.Button1Click(Sender: TObject); var k:integer; begin n:= strtoint(InputBox('number of processes','Enter number of processes','')); for k:= 1 to n do begin Bu[k]:= strtoint(InputBox('Burst time','Enter CPU burst' + inttostr(k),'')); end; priority(); end; end. |
#2
|
|||
|
|||
![]() Код:
j:=1; while (j<=max) do Из этого цикла не выходит. не нашел когда б он смог выйти ибо. переменные внутри цикла НЕ изменяются! Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#3
|
|||
|
|||
![]() а как исправить?
|
#4
|
|||
|
|||
![]() в подробности не вдавался,
но как-то так: Код:
j:=1; i:=1; while (j<=max) do begin j:=j+1; i:=i+1; while i<=n do begin if P[i] = j then begin Wt[i]:=w; w:= w+B[i]; end; end; end; |
#5
|
|||
|
|||
![]() подправлю чуть...
Код:
while (j<=max) do begin j:=j+1; i:=1; while i<=n do begin i:=i+1; Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#6
|
|||
|
|||
![]() скорей всего так:
Код:
j:=1; while (j<=max) do begin i:=1; while (i<=n) do begin if P[i] = j then begin Wt[i]:=w; w:= w+B[i]; end; i:=i+1; end; j:=j+1; end; теперь работает, но так получается ответ 7,75, а должен быть 4,50 ![]() входные данные: Процесс | Время появления | CPU Burst | Приоритет | 1 | 1 | 6 | 4 | 2 | 3 | 2 | 3 | 3 | 7 | 7 | 2 | 4 | 1 | 5 | 1 | Массивы Время появления (Bu), CPU Burst (B), приоритет (P) заполняются правильно (вывел в Memo для проверки). а вот результирующий массив Wt (время ожидания) неправильный. хотя алгоритм вроде правильный. Wt должен быть [14,3,1,0], а получается [14,12,5,0] подскажите что не так Исправленный проект прикрепляю Последний раз редактировалось Fazotron, 18.04.2011 в 22:30. |