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 Holta - 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 Holt'a - C++.cpp:
//www.algorytm.org
//Algorytm Holt'a - detekcja zakleszczenia
//(c)2002 Tomasz Lubinski

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

int p,z,j,k,tmp,flaga;
int E[2][10][10],A[10][10],f[10],I[10],c[11];

void main()
{
printf("Podaj liczbe procesow (max. 10)\n");
scanf("%d",&p);
printf("Podaj liczbe zasobow (max. 10)\n");
scanf("%d",&z);
//pobranie danych
for (k=0; k<p; k++)
	for (j=0; j<z; j++)
		{
		printf("Podaj ile zasobu %d posiada proces %d\n",j+1,k+1);
		scanf("%d",&A[k][j]);
		}
for (k=0; k<p; k++)
	for (j=0; j<z; j++)
		{
		printf("Podaj ile zasobu %d moze jeszcze zazadac proces %d\n",j+1,k+1);
		scanf("%d",&E[0][k][j]);
		E[1][k][j]=k;
		}
for (j=0; j<z; j++)
	{
	printf("Podaj ile zasobu %d jest jeszcze wolne w systemie\n",j+1);
	scanf("%d",&f[j]);
	}
//algorytm Holt'a
//posortowanie zadan procesow (bubble sort)
for (j=0; j<z; j++)
	{
	flaga=1;
	while (flaga==1)
		{
		flaga=0;
		for (k=0; k<p-1; k++)
			if (E[0][k][j]>E[0][k+1][j])
				{
				flaga=1;
				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;
				}
		}
	}
for (k=0; k<z; k++) I[k]=0;
for (k=1; k<=p; k++) c[k]=z;
c[0]=p;
//wlasciwa częsc algorytmu
do
{
flaga=0;
for (j=0; j<z; j++)
	while ((I[j]<p)&&(E[0][I[j]][j]<=f[j]))
		{
		c[E[1][I[j]][j]+1]=c[E[1][I[j]][j]+1]-1;
		if (c[E[1][I[j]][j]+1]==0)
			{
			c[0]--;
			flaga=1;
			for (k=0; k<z; k++)
				f[k]=f[k]+A[E[1][I[j]][j]][k];
			}
		I[j]++;
		}
}while ((flaga==1)&&(c[0]>0));
if (flaga==1) printf("Nie ma zakleszczenia\n"); else printf("Istnieje zakleszczenie\n");
printf("Zbior zadan zakleszczonych: {");
for (k=1; k<=p; k++) if (c[k]!=0) printf(" %d",k);
printf(" }\n");
getch();
}
Dodaj komentarz