Текст програми.
Задача Джонсона
End. {Конец вычислений}. Begin smin: =t; ii: =i; jj: =j end; Begin smin: =t; ii: =1; jj: =2 end. If tKP2 >tKP1 then tHP2: =tKP2. Else begin lo: =ii; l: =l+1 end; Assign (inf,'a: est3_in. pas'); Readln (inf); writeln (outf); Program Algorithm_of_Johnson; THP1, tHP2,tKP1,tKP2,lo: vec; Assign (outf,'a: ez3. pas'); Type vec=array of integer; T: =10 000; t: =10 000; If (l+k) (n+2) then goto 1; For k… Читать ещё >
Текст програми. Задача Джонсона (реферат, курсовая, диплом, контрольная)
{Алгоритм оптимальной обработки изделий на двух машинах (алгоритм Джонсона)
Алгоритм выбирает такой порядок обработки изделий, при котором суммарное время
обработки изделий будет минимальным}
program Algorithm_of_Johnson;
ses crt;
type vec=array [1.50] of integer;
matr=array [1.50,1.2] of integer;
var t, s: matr;
tHP1,tHP2,tKP1,tKP2,lo: vec;
i, j, ii, jj, k, l, smin, n, th1,th2: integer;
{inf — файл исходных данных;
outf — файл результатов}
inf, outf: text;
sw: string;
label 1;
BEGIN {Начало программы}
clrscr;
assign (inf,'a: est3_in. pas');
reset (inf);
{Ввод количества изделий}
readln (inf, sw);
readln (inf, n);
assign (outf,'a: ez3. pas');
rewrite (outf);
writeln (outf,' ИСХОДНЫЕ ДАННЫЕ: ');
writeln (outf);
writeln (outf, 'Количество изделий, подлежащих обработке: ', n);
readln (inf, sw);
writeln (outf,'‚Время обработки изделий соответственно на первой и второй машинах');
for i: =1 to n do begin
for j: =1 to 2 do begin
{Ввод времени обработки каждого изделия на 1-ой и 2-ой машинах}
read (inf, t [i, j]);
write (outf,' t (', i,',', j,') =', t [i, j]);
end;
readln (inf); writeln (outf);
end;
close (inf);
writeln (outf,' РЕЗУЛЬТАТЫ ВЫЧИСЛЕНИЙ: ');
writeln (outf);
for i: =1 to n do
for j: =1 to 2 do
s [i, j]: =t [i, j];
k: =1;
l: =1;
1: if t [1,1] >t [1,2] then
begin smin: =t [1,2]; ii: =1; jj: =2 end
else begin smin: =t [1,1]; ii: =1; jj: =1 end;
for i: =2 to n do
for j: =1 to 2 do begin
if t [i, j]
begin smin: =t [i, j]; ii: =i; jj: =j end;
end;
{lo [i] - порядковый номер цикла обработки i-го изделия}
if jj=1 then begin lo [k]: =ii; k: =k+1 end
else begin lo [n-l+1]: =ii; l: =l+1 end;
t [ii, 1]: =10 000; t [ii, 2]: =10 000;
if (l+k) (n+2) then goto 1;
{tHP1 [i] - время начала обработки i-го изделия на 1-ой машине;
tHP2 [i] - время начала обработки i-го изделия на 2-ой машине;
tKP1 [i] - время окончания обработки i-го изделия на 1-ой машине;
tKP2 [i] - время окончания обработки i-го изделия на 2-ой машине; }
tHP1 [1]: =0;
tKP1 [1]: =s [lo [1], 1];
tHP2 [1]: =tKP1 [1];
tKP2 [1]: =tHP2 [1] +s [lo [1], 2];
{th2 — время простоя 2-ой машины}
th2: =tHP2 [1];
for k: =2 to n do begin
tHP1 [k]: =tKP1 [k-1];
tKP1 [k]: =tHP1 [k] +s [lo [k], 1];
if tKP2 [k-1] >tKP1 [k] then tHP2 [k]: =tKP2 [k-1]
else begin
tHP2 [k]: =tKP1 [k];
th2: =th2+tKP1 [k] - tKP2 [k-1];
end;
tKP2 [k]: =tHP2 [k] +s [lo [k], 2];
end;
th1: =tKP2 [n] - tKP1 [n];
writeln (outf, 'Оптимальный порядок обслуживания требований: ');
for i: =1 to n do
write (outf,' ', lo [i]);
writeln (outf);
writeln (outf, 'Общее время обслуживания требований: ', tKP2 [n]);
writeln (outf,'Время простоя машины 2: ', th2);
close (outf);
writeln ('Конец вычислений');
readln;
end. {Конец вычислений}