Created
May 30, 2019 06:19
-
-
Save blood72/43d87f30e4fb46f021af5a07ec35198c to your computer and use it in GitHub Desktop.
학창 시절에 만든 C언어 은행가 알고리즘 (반성하자 더티코드ㅜ_ㅜ)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#pragma warning(disable:4996) | |
int main() { | |
int allocated_table[5][5]; //할당 행렬A | |
int claim_table[5][5]; //요구 행렬C | |
int avaliable_vector[5]; //가용 벡터V | |
int allocated_vector[5] = { 0, 0, 0, 0, 0 }; //할당 벡터C-A | |
int resource_vector[5]; //자원 벡터R | |
int isRun[5]; //현재 프로세스 실행상태 | |
int isSafe = -1; //-1은 FALSE, 1은 TRUE | |
int i, j, k, resource_num, process_num; //i: 행, j:렬, k: 실행가능여부 | |
int count = 0; //while문 조건변수 | |
///////////////////////////////////////////////////////////입력 코드 | |
printf("\n자원의 개수를 입력하시오 : "); | |
scanf("%d", &resource_num); | |
printf("\n프로세스의 개수를 입력하시오: "); | |
scanf("%d", &process_num); | |
for (i = 0; i < process_num; i++) { | |
isRun[i] = 1; | |
count++; | |
} | |
printf("\n자원 벡터를 입력하시오: "); | |
for (i = 0; i < resource_num; i++) | |
scanf("%d", &resource_vector[i]); | |
printf("\n할당 행렬을 입력하시오 (가로순으로): "); | |
for (i = 0; i < process_num; i++) { | |
for (j = 0; j < resource_num; j++) | |
scanf("%d", &allocated_table[i][j]); | |
} | |
printf("\n요구 행렬을 입력하시오 (가로순으로): "); | |
for (i = 0; i < process_num; i++) { | |
for (j = 0; j < resource_num; j++) | |
scanf("%d", &claim_table[i][j]); | |
} | |
printf("\n입력된 자원 벡터 : "); | |
for (i = 0; i < resource_num; i++) | |
printf("%d ", resource_vector[i]); | |
printf("\n입력된 할당 행렬:\n"); | |
for (i = 0; i < process_num; i++) { | |
for (j = 0; j < resource_num; j++) | |
printf("\t%d", allocated_table[i][j]); | |
printf("\n"); | |
} | |
printf("\n입력된 요구 행렬:\n"); | |
for (i = 0; i < process_num; i++) { | |
for (j = 0; j < resource_num; j++) | |
printf("\t%d", claim_table[i][j]); | |
printf("\n"); | |
} | |
for (i = 0; i < process_num; i++) | |
for (j = 0; j < resource_num; j++) | |
allocated_vector[j] += allocated_table[i][j]; | |
printf("\n요구 벡터: "); | |
for (i = 0; i < resource_num; i++) | |
printf("%d ", allocated_vector[i]); | |
for (i = 0; i < resource_num; i++) | |
avaliable_vector[i] = resource_vector[i] - allocated_vector[i]; | |
printf("\n가용 벡터: "); | |
for (i = 0; i < resource_num; i++) | |
printf("%d ", avaliable_vector[i]); | |
printf("\n"); | |
///////////////////////////////////////////////////////////// | |
while (count != 0) { //체크된 프로세스 개수만큼 while문을 돌린다 | |
isSafe = -1; | |
for (i = 0; i < process_num; i++) { | |
if (isRun[i]) { //프로세스가 실행상태인지 확인 | |
k = 1; | |
for (j = 0; j < resource_num; j++) { | |
if (claim_table[i][j] - allocated_table[i][j] > avaliable_vector[j]) | |
{ //요구행렬C - 할당행렬A > 가용벡터V | |
k = 0; //이 프로세스는 실행할 수 없음 | |
break; | |
} | |
} | |
if (k) { | |
printf("\n%d번 프로세스가 실행 중입니다.\n", i + 1); | |
isRun[i] = 0; //프로세스를 종료상태로 둔다 | |
count--; | |
isSafe = 1; | |
for (j = 0; j < resource_num; j++) | |
avaliable_vector[j] += allocated_table[i][j]; | |
break; | |
} | |
} | |
} | |
if (isSafe == -1) { | |
printf("\n안전하지 않은 상태입니다."); | |
break; | |
} | |
if (isSafe == 1) | |
printf("\n안전한 상태입니다."); | |
printf("\n가용 벡터: "); | |
for (i = 0; i < resource_num; i++) | |
printf("%d ", avaliable_vector[i]); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment