Ocena użytkownikóww: ***** / 1
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.
AlgorytmHabermana.java:
/**
* www.algorytm.org
* Algorytm Haberman'a - detekcja zakleszczenia
* (c)2005 Tomasz Lubinski
*/
public class AlgorytmHabermana {
public static void main(String[] args) {
int p,z,i,j,flaga,zwolnic;
int A[][] = new int[100][100];
int H[][] = new int[100][100];
int D[] = new int[100];
int f[] = new int[100];
System.out.println("Podaj liczbe procesow (max. 100)");
p = Console.readInt("?");
System.out.println("Podaj liczbe zasobow (max. 100)");
z = Console.readInt("?");
// pobranie danych
for (i=0; i<p; i++)
for (j=0; j<z; j++)
{
System.out.println("Podaj ile zasobu "+ (j+1) + " posiada proces "+ (i+1));
A[i][j] = Console.readInt("?");
}
for (i=0; i<p; i++)
for (j=0; j<z; j++)
{
System.out.println("Podaj ile zasobu "+ (j+1) + " moze jeszcze zazadac proces "+ (i+1));
H[i][j] = Console.readInt("?");
}
for (i=0; i<z; i++)
{
System.out.println("Podaj ile zasobu "+ (i+1) + " jest jeszcze wolne w systemie");
f[i] = Console.readInt("?");
}
// algorytm Habermana
flaga=1;
// zainicjuj D:={1,2,...,p}
for (i=0; i<p; i++) D[i]=i+1;
while (flaga==1)
{
flaga=0;
for (i=0; i<p; i++)
if (D[i]!=0)
{
zwolnic=1;
for (j=0; j<z; j++) //sprawdz czy mozna zwolnic zasoby procesu i
if (f[j]<H[i][j])
{
zwolnic=0;
break;
}
if (zwolnic==1) //jezeli mozna to zwolnij zasoby proesu i
{
D[i]=0;
flaga=1;
for (j=0; j<z; j++)
{
f[j]=A[i][j]+f[j];
H[i][j]=0;
A[i][j]=0;
}
System.out.println("Zwalniam zasoby procesu "+ (i+1));
break;
}
}
}
// sprawdz czy D jest zbiorem pustym: jesli tak to brak zakleszczenia
flaga=1;
System.out.print("Zbior zadan zakleszczonych: {");
for (i=0; i<p; i++)
if (D[i]!=0)
{
flaga=0;
System.out.print(" "+ (i+1));
}
System.out.println(" }");
if (flaga==1) System.out.println("Zbior zadan zakleszczonych jest pusty zatem w tym systemie nie ma zakleszczenia");
}
}