algorytm.org

Implementacja w C/C++

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 C/C++
Ocena użytkownikóww: *****  / 2
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 Haberman'a - C++.cpp:
//www.algorytm.org
//Algorytm Haberman'a - detekcja zakleszczenia
//(c)2002 Tomasz Lubinski

#include <stdio.h>
#include <conio.h>

int p,z,i,j,flaga,zwolnic,A[100][100],H[100][100],D[100],f[100];


void main()
{
printf("Podaj liczbe procesow (max. 100)\n");
scanf("%d",&p);
printf("Podaj liczbe zasobow (max. 100)\n");
scanf("%d",&z);
//pobranie danych
for (i=0; i<p; i++)
	for (j=0; j<z; j++)
		{
		printf("Podaj ile zasobu %d posiada proces %d\n", j+1, i+1);
		scanf("%d",&A[i][j]);
		}
for (i=0; i<p; i++)
	for (j=0; j<z; j++)
		{
		printf("Podaj ile zasobu %d moze jeszcze zazadac proces %d\n", j+1, i+1);
		scanf("%d",&H[i][j]);
		}
for (i=0; i<z; i++)
	{
	printf("Podaj ile zasobu %d jest jeszcze wolne w systemie\n",i+1);
	scanf("%d",&f[i]);
	}
//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;
					}
				printf("Zwalniam zasoby procesu %d\n",i+1);
				break;
				}
			}

	}
//sprawdz czy D jest zbiorem pustym: jesli tak to brak zakleszczenia
flaga=1;
printf("Zbior zadan zakleszczonych: {");
for (i=0; i<p; i++)
	if (D[i]!=0)
		{
		flaga=0;
		printf(" %d",i+1);
		}
printf(" }\n");
if (flaga==1) printf("Zbior zadan zakleszczonych jest pusty zatem w tym systemie nie ma zakleszczenia\n");
getch();
}
Dodaj komentarz