algorytm.org

Implementacja w Java

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 Habermana - Implementacja w Java
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.

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");

	}
}
Dodaj komentarz