algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Holta - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 09 maja 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Algorytm Holt'a - Delphi/Algorytm_Holt.dpr:
//www.algorytm.org
//Algorytm Holt'a - detekcja zakleszczenia
//(c)2002 Tomasz Lubinski

program Algorytm_Holt;

uses
  Forms,
  SysUtils;

{$R *.RES}
{$Apptype console}

var
p,z,j,k,tmp: Integer;
E : Array [0..1] of Array [1..100] of Array [1..100] of Integer;
A : Array [1..100] of Array [1..100] of Integer;
I,f : Array [1..100] of Integer;
c : Array [0..100] of Integer;
flaga: Boolean;

begin
writeln('Podaj liczbe procesow (max. 100)');
readln(p);
writeln('Podaj liczbe zasobow (max. 100)');
readln(z);
//pobranie danych
for k:=1 to p do
        for j:=1 to z do
                begin
                writeln('Podaj ile zasobu '+IntToStr(j)+' posiada proces '+IntToStr(k));
                readln(A[k,j]);
                end;
for k:=1 to p do
        for j:=1 to z do
                begin
                writeln('Podaj ile zasobu '+IntToStr(j)+' moze jeszcze zazadac proces '+IntToStr(k));
                readln(E[0,k,j]);
                E[1,k,j]:=k;
                end;
for j:=1 to z do
        begin
        writeln('Podaj ile zasobu '+IntToStr(j)+' jest jeszcze wolne w systemie');
        readln(f[j]);
        end;
writeln; writeln;
//algorytm Holt'a
//posortowanie żądań procesów (bubble sort)
for j:=1 to z do
        begin
        flaga:=true;
        while flaga do
                begin
                flaga:=false;
                for k:=1 to p-1 do
                        if E[0,k,j]>E[0,k+1,j] then
                                begin
                                flaga:=true;
                                tmp:=E[0,k,j];
                                E[0,k,j]:=E[0,k+1,j];
                                E[0,k+1,j]:=tmp;
                                tmp:=E[1,k,j];
                                E[1,k,j]:=E[1,k+1,j];
                                E[1,k+1,j]:=tmp;
                                end;
                end;
        end;
for k:=1 to z do I[k]:=1;
for k:=1 to p do c[k]:=z;
c[0]:=p;
//wlasciwa częsc algorytmu
repeat
flaga:=false;
for j:=1 to z do
        while ((I[j]<=p) and (E[0,I[j],j]<=f[j])) do
                begin
                c[E[1,I[j],j]]:=c[E[1,I[j],j]]-1;
                if c[E[1,I[j],j]]=0 then
                        begin
                        c[0]:=c[0]-1;
                        flaga:=true;
                        for k:=1 to z do
                                f[k]:=f[k]+A[E[1,I[j],j],k];
                        end;
                I[j]:=I[j]+1;
                end;
until not((flaga)and(c[0]>0));
if flaga then writeln('Nie ma zakleszczenia') else writeln('Istnieje zakleszczenie');
write('Zbior zadan zakleszczonych: {');
for k:=1 to p do if c[k]<>0 then write(' '+IntToStr(k));
write(' }');
readln;
end.
Dodaj komentarz