Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
NooB0X
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 5
1

Алгоритм банкира

29.11.2015, 19:48. Просмотров 543. Ответов 6
Метки нет (Все метки)

Нам в университете задали задание создать свой "алгоритм банкира", если незнаете это процедура которая проверает если система может справится со всеми процесами то есть распредиляя ресурси в конечном итоге все процесы должны бить обслужени тоесть несоздаётся такая ситуацыя когда свободное количество ресурсов меньше чем нужна для процеса котораму нужна наименьшое количество ресурсов для выполнения.
Так вот написал программу для создания масива где держать данные.
p l(i) t m(i) C(i)
1 i=p
.
.
.
n

p-номер процеса l(i)-количество ресурсов который уже принадлежит конкретному ресурсу
t-общеё количество ресурсов системы m(i)-скок нужно ресурсов процесу нада штоб тот здох и отдал ресурсов
c(i)=m(i)-l(i) скок ЕЩЁ надо
Я вас непрошу зделать за меня задание и неудивляетесь что проверочная часть которая говорит ли при созданой ситуации система тсправится или нет > нету. Проблема в том что компилятор яростно в 7 местах(там где в масив кладутся данные) пишет illegal qualifier, illegal expression , ; expected but BEGIN found. Как инициализировать масив и структурировать код.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
program Bank_alg_vX0;   
 
label Out1 , Out2;
 
type vector = array[1..5] of integer;
     matrix = array[1..16] of integer;
     proces = array[1..5] of char;
 
var g , k , ml , m , i , n , t: integer;
 
    b : matrix; p : proces;
 
begin
 
write('Input number of processes.');
readln(n);
 
for i := 1 to n do begin;
 b[1,i] := i ;   
end;         
 
{<<<<<>>>>>}
 
writeln('Input quantity of resources.');
readln(t);
 
b[3,1] := t ;
 
ml := 0 ;
 
for i := 1 to n do begin;
 ml := ml + b[2,i];
end;
 
b[3,2] := ml ;
 
{<<<<<>>>>>}
 
for i := 1 to n do begin
 
Out2:
 
 writeln('Input ',i,'. process maximal needed resources quantity.');
 readln(m);
 if m > t then do begin
  writeln('Process maximal needed resources quantity can''t be more than whole quantity of computer resources.');
  goto Out2;
 end;
 b[4,i] := m
end;
 
{<<<<<>>>>>}
 
 
for i := 1 to n do begin
 
Out1:
 
 writeln('Input ',i,'. process used resources quantity.');
 readln(m);
  if b[2,i] > b[4,i] then do begin
   writeln('Process maximal needed resources quantity can''t be more than whole quantity of computer resources.');
   goto Out1;
  end;
 b[2,i] := m;
end;
 
{<<<<<>>>>>}
 
for i := 1 to n do begin
 b[5,i] := b[4,i] - b[2,i]
end;
 
{<<<<<>>>>>}
 
p[1] := p;
p[2] := l(i);
p[3] := t;
p[4] := m(i);
p[5] := C(i);
 
{<<<<<>>>>>}
 
for i:= 1 to 5 do begin
 for k:= 1 to n do begin
 
 write ( tab[i,s]:4);
 end;
writeln;
end;
 
end.
Добавлено через 4 минуты
К стати писать изправлний код необязательно, будет хватать и обяснение ошибки и неболшой пример для понимания. Благадарю за помощ XD!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2015, 19:48
Ответы с готовыми решениями:

Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм
Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный...

Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h.
Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на...

Построить алгоритм ДО и алгоритм ПОКА дя вычислений значения функции на отрезке [а,b] с шагом h. Написать программу
F=3+tg x

Написать алгоритм по блок схеме (Алгоритм метода Ньютона)
Прошу помогите, очень срочно! Сижу на экзамене!

Кто может составить алгоритм по проге? Алгоритм нужен для отчета если вам это интересно)
uses crt; var a:array of integer; b:array of integer; i,j,m,n:integer;...

6
T-rox
10 / 10 / 12
Регистрация: 13.03.2012
Сообщений: 30
30.11.2015, 16:48 2
for i := 1 to n do begin; - после begin точка с запятой не ставится.

Старые добрые масивы и их ошибки
Массивы не ошибаются, ошибаются программисты.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3905 / 2562 / 2085
Регистрация: 22.11.2013
Сообщений: 7,162
01.12.2015, 08:29 3
1) Полагаю, matrix должен был быть типом двумерного массива, а у вас он одномерный, отсюда ошибки при упоминании b[i,j]
Pascal
6
  matrix = array [1..5,1..16] of Integer;
2) Синтаксис условного оператора -- "if условие then оператор", а не как у вас "... then do ...".
3) Не только компилятору непонятно что такое l(i), m(i), C(i), в строках 77, 79, 80. По синтаксису -- вызов функций, но их таких у вас нет.
0
NooB0X
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 5
01.12.2015, 23:10  [ТС] 4
Всем спасибо и потрудясь сам зделал свой алгоритм банкира!
Рабочий! Кому интересно или нужно смртрите но коментарии на латышскомб если нужен перевод для понимания пишите...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
program Bank_alg_vX0;
 
uses Crt; {Lai izmantotu "delay()"}
 
label Out1 , Out2 , Out3 ;
 
const p = 16;  {defineju kads ir maksimalais procesu daudzums, lai neuztaisitu programmu kuru kompis nevar palaist jo taja ir 64 procesi !}
 
type matrix = array[1..p,1..5] of integer;  {masivs mainigajaiem}
     vector = array[1..p] of integer;       {masivs parbausei}
     proces = array[1..5] of shortstring;   {masivs tabulas pirmajai rindai lai varetu izmantotu rakstu zimes}
 
var b : matrix;
    o : proces;
    v2 : vector;
 
    k , i , n , t , l , u , ml , m , max , min , q , s , e : integer;
 
begin
 
Out1:
 
write('Input number of processes:'); {Jauta cik procesi bus...1 lidz 16}
read(n);
 
if n <= p then
k := n   {mainu n uz k lai nebutu erori par to ka local variables tiek izmantoti nepareizi}
else  begin
write('n cant be more than 16!');    {Ja n > p tada programma nestradas tapec saku lai liek mazaku n un aizsutu uz jautajuma sakumu}
goto Out1;
end;
 
for i := 1 to k do    {Izveidoju masiva jeb tabulas pirmo kollonu ar procesu nummuriem >>> velak vajadzes lai identificetu}
 b[i,1] := i ;
 
{<<<<<>>>>>}
 
write('Input quantity of resources:');  {t = cik kompim ir resursu un ta veriba tiek ielikta 1 rinda un otraja kollona}
read(t);
 
b[1,3] := t ;
 
{<<<<<>>>>>}
 
for i := 1 to k do begin
 
Out2:
 
 write('Input ',i,'. process maximal needed resources quantity:');   {tiek prasits cik katram procesam kopa vajag resursus lai to pabeigtu}
 read(m);
 
 if m > t then begin
  writeln('Process maximal needed resources quantity can''t be more than whole quantity of computer resources = ',t,' .');
  goto Out2;         {nevar but tads process kuram vajag vairak resursus neka kompis vispar var iedot. Tadus *idarasus OS suta paris majas talak XD}
 end;
 
 b[i,4] := m
end;
 
{<<<<<>>>>>}
 
for i := 1 to k do begin
 
Out3:
                      {Tagad prasu cik katrs atbilstosais proces ir jau apedis manu RAMu}
 write('Input ',i,'. process used resources quantity:');
 read(l);
  if l > b[i,4] then begin {kad vadat ieksa mainigos esat  uzmanigi, ja visu procesu izmantoto resursu skaits ir lielaks neka vispar kompis var iedot, tad OS atkal visus suta talak...}
   write('Process used resources can''t be more than maximum quantity of needed resources.');
   goto Out3;
  end;
 b[i,2] := l;
end;
 
ml := 0 ; {Tiek inicializets ml, kas ir visu izmantoto resursu summa}
 
for i := 1 to k do begin
 ml := ml + b[i,2];  {Te taisa ml...}
end;
 
b[2,3] := t - ml;   {...bet ml mums vajag, lai dabutu cik vispar resursu mums vel ir palicis!}
 
if b[2,3] < 0 then begin   {Ja ir atlicis nih*ja, tad jau zinat ko dara OS...}
 
 write('#1: System overload! Can not meet the requests. System will shutdown afther 3 seconds.');
 delay(3000);
 halt;
end;
 
{<<<<<>>>>>}
 
for i := 1 to k do begin     {Pedeja tabulas kollona, neviemam nepis* cik procesam kopa vajag resursu, bet cik tai maitai vel ir jaatdod mans RAMs, lai nomirtu un dabutu resursus atpakal!}
 b[i,5] := b[i,4] - b[i,2];
end;
 
{<<<<<>>>>>}
 
o[1] := 'p';     {Tabulas pirma rinda kas lauj saprast kas tie par cipariniem tur ir paradijusies: COMPILE => o.O??? :WTF!!!!!}
o[2] := 'l(i)';
o[3] := 't';
o[4] := 'm(i)';
o[5] := 'C(i)';
 
{<<<<<>>>>>}
{Parbaudes bloks!!!}
{<<<<<>>>>>}
 
for i := 1 to k do begin  {Cikla izpildes skaits ir tik pat liels cik visu procesu skaits.}
 
 
{<<<<<>>>>>}
                        {WHERE IS MY TABLE ?!?}
  for i:= 1 to 5 do begin
   write(o[i]:5);
  end;
 
  writeln;
 
  for i:= 1 to k do begin  {...}
    for u:= 1 to 5 do begin
 
     write( b[i,u]:5);
    end;
 
   writeln;
  end;
 
  readln;
                        {Table Done! ... Aaa there you are!}
{<<<<<>>>>>}
 
 
  q := 0;
 
  for i := 1 to k do begin {Ja nepatik varat neizmantot 'do begin ... end;' ... ,bet tad jus jau nezinasiet par ko kompilators ir parvertis jusu programmu!}
    writeln(b[2,3],' ',b[i,5]);
    if b[i,5] <= b[2,3] then begin   {Ja procesa nepieciesamo resursu skaits ir mazaks par pieejamo resursu skaitu , tad to var izpildit!}
 
     q := q + 1; {Katru reizi atrodot izpildamu procesu, tam tiek atvelets ieraksts , un beigas zinam cik ir tadu procesu, kuri ir izpildami!}
     v2[q] := i; {Katru reizi atrodot izpildamu procesu, ta nummurs tiek pierakstits}
     max := b[i,2];  {Pedeja izpildama procesa izmantoto resursu daudzums tiek saglabats ka max vertiba, ka max inicializators.}
     e := i;         {Pedeja izpildama procesa atrasanas nummurs.}
     min := b[i,5];  {Pedeja izpildama procesa nepieciesamo resursu daudzums tiek saglabats ka min vertiba, ka min inicializators.}
 
    end;
 
  end;
 
  if b[1,3] = b[2,3] then begin  {Izpildot katru procesu beigas visur jabut viss pa nullem iznemot 3 kollonu un masimalo resursu skaitam ir jasakrit ar pieejamu resursu skaitu }
   write('1#: System stable! All proceses are done!System will shutdown afther 5 seconds.'); {ja ta ir:  <<<FUCK ALL YOU! MUAHAHA!>>>}
   delay(5000);
   halt;
  end;
 
  if q = 0 then begin  {Ja q = 0, tad ieprieksejais cikls nav atradis nevienu izpildamu procesu un sistema ir nestabila! :[    }
   write('2#: System overload! Can not meet the requests. System will shutdown afther 3 seconds.');
   delay(3000);
   halt;
  end;
                                  {Procesa izpilde japrasa maksimali maz resursu bet jaatgriez maksimali daudz!}
  for i := 1 to q do begin        {Skatamies kurs resurs prasis vismazak resursus.}
 
   s := v2[i];
 
    if b[s,5] < min then begin
     min := b[s,5];                  {Atrodam pasu mazako C vertibu starp izpildamo procesu C vertibam.}
     e := s
    end;                         {Neatkarigi no ta vai tada vertiba ir viena vai vairakas , ats nozime ka visi sie procesi ir izpildami, jo resursu skaits tikai palielinasies un nav svarigi kada kartiba tas notiks!}
 
  end;
 
  writeln('Most appropriate is to do ',e,'process.');
  b[e,5] := 2*t; {Nevar likt 0, savadak es nezinu ka uztaisit parbaudes bloku kas strada, PROGRAMETAJS zin , bet es ne, ta ka paliek mans variants XD}
  b[e,4] := 0;
  b[2,3] := b[2,3] + b[e,2]; {Pirms izdest L vertibu, pieskaitam to t-ml, jo atbrivojas aiznemtie resursi. }
  b[e,2] := 0;
 
end;
 
readln
 
end.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3905 / 2562 / 2085
Регистрация: 22.11.2013
Сообщений: 7,162
04.12.2015, 15:36 5
Вместо:
Pascal
1
2
3
4
5
6
7
8
9
10
11
Out1:
 
write('Input number of processes:'); {Jauta cik procesi bus...1 lidz 16}
read(n);
 
if n <= p then
k := n   {mainu n uz k lai nebutu erori par to ka local variables tiek izmantoti nepareizi}
else  begin
write('n cant be more than 16!');    {Ja n > p tada programma nestradas tapec saku lai liek mazaku n un aizsutu uz jautajuma sakumu}
goto Out1;
end;
лучше:
Pascal
1
2
3
  repeat
    Write('Number of processes [1..',p,']: '); ReadLn(n);
  until n in [1..p];
или, если сообщение о неправильном вводе всё-таки нужно выводить:
Pascal
1
2
3
4
5
  repeat
    Write('Number of processes [1..',p,']: '); Read(n);
    if n in [1..p] then Break
    else WriteLn('Error: n must be in [1..',p,'16!');
  until False;
Добавлено через 30 минут
Цитата Сообщение от NooB0X Посмотреть сообщение
Рабочий!
Это не так:
Код
a.pas(113,8) Error: Illegal assignment to for-loop variable "i"
0
NooB0X
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 5
04.12.2015, 18:19  [ТС] 6
Спасибо за просмотр кода и поправки А насчот неисправности незнаю...
У меня программа идёт, единствено пишет что одно из переменных неизпользовано!
К стати наасчот твоей поправки , наконец то кто то показал как заменить go to out, на цикл.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3905 / 2562 / 2085
Регистрация: 22.11.2013
Сообщений: 7,162
04.12.2015, 22:16 7
Цитата Сообщение от NooB0X Посмотреть сообщение
А насчот неисправности незнаю... У меня программа идёт
У вас внешний цикл не выполняется (а FPC 2.4.6 и собрать такое не даст):
Pascal
1
2
3
4
5
6
7
8
9
10
11
108 for i:=1 to k do begin
113   for i:=1 to 5 do begin
115   end;
119   for i:=1 to k do begin
126   end;
135   for i:=1 to k do begin
147   end;
161   for i:=1 to q do begin
170   end;
      { и вот тут i=q или q+1 }
178 end;
0
04.12.2015, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2015, 22:16

Разработайте алгоритм и программу, реализующую этот алгоритм. Исходные данные вводите из текстового файла. Результаты работы программы также помести
Разработайте алгоритм и программу, реализующую этот алгоритм. Исходные...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru