data.txt

report2.cpp



대체 선택 알고리즘을 C++로 작성하시오
슬라이드 10쪽과 같이 생성과정을 보여줄 것
슬라이드 8쪽을 입력 데이터로 수행하여 실행


//////////////////////////////////////////////////////////////////////////////////////



#include <iostream>

#include <fstream>

#include<cstdlib>

#include <cstring>


/*

Microsoft visual studio 2015 에서 실행했습니다~~

*/


#pragma warning ( disable : 4996 )


#define MAX_MEMORY 3


using namespace std;


void saveMemory(int data);

bool checkFullMemory();

bool checkFrozen();

void makeRun();

void printMemory();

void Selectminimum();

void writeRunFile();

void lastDataClear();

void printRun();


int memory[MAX_MEMORY];

bool written[MAX_MEMORY];

bool frozen[MAX_MEMORY];

int lastData = 0;

int cnt_partition = 0;

int minIndex;



void main() {

ifstream file;

int i = 0;

int buf = 0;

file.open("data.txt");

if (!file.is_open()) {

cout << "파일 열기 실패!" << endl;

}


memset(memory, 0, MAX_MEMORY);

memset(written, false, MAX_MEMORY);

memset(frozen, false, MAX_MEMORY);


while (!file.eof()) {

file >> buf;


cout << "Input data = " << buf << endl;


saveMemory(buf); //메모리가 비어있으면 data를 메모리에 저장


if (!checkFullMemory()) {

continue;

makeRun();

//printRun();

}

file.close();


for (i = 0; i < MAX_MEMORY - 1; i++) {

lastDataClear();

}


printRun();

}


//비어있는 메모리에 입력값 저장

void saveMemory(int data) {

int i = 0;


for (i = 0; i < MAX_MEMORY; i++) {

if (written[i] == false) {

memory[i] = data;

written[i] = true;

break;

}

}


}


//메모리 상태 체크

bool checkFullMemory() {

//메모리에 데이터가 다 들어가 있으면 true, 없으면 false

int i = 0;

int cnt = 0;


for (i = 0; i < MAX_MEMORY; i++) {

if (written[i] == true) {

cnt++;

}

}


if (cnt != MAX_MEMORY) {

return false;

}

else {

return true;

}


}


//빙결상태 체크

bool checkFrozen() {

// 전체 빙결상태이면 true, 아니면 false

int i = 0;

int cnt = 0;


for (i = 0; i < MAX_MEMORY; i++) {

if (frozen[i] == true) {

cnt++;

}

}


if (cnt != MAX_MEMORY) {

return false;

}

else {

return true;

}


}


//런만들기

void makeRun() {


int i;


Selectminimum();


if (checkFrozen()) {

cout << "!!!!!!!!!!!!!!전체 빙결(분할 완료)!!!!!!!!!!!!!!!!!" << endl;

cnt_partition++;

lastData = 0;


for (i = 0; i < MAX_MEMORY; i++) {

frozen[i] = false;

}

Selectminimum();

}


writeRunFile();

}


//조건에 맞는 미니멈값 찾기

void Selectminimum() {

int i=0;

minIndex = 0;


//프로즌상태가 아니고, 라스트데이터보다 값이 크며, 현재 비교대상 메모리보다 작을 때 mindIndex 교체

for (i = 0; i < MAX_MEMORY; i++) {

if ((memory[i] < lastData)) {

frozen[i] = true;

}

}


//비교 대상 찾기 (프로즌 상태가 아닌 수)

i = 0;

while(i < MAX_MEMORY) {

if (frozen[i] != true) {

minIndex = i;

break;

}

i++;

}


//비교하면서 조건에 맞는 인덱스 찾기

for (i=0; i < MAX_MEMORY; i++) {

if ((frozen[i] == false) && (memory[i] > lastData) && (memory[minIndex] >= memory[i])) {

minIndex = i;

}

}


printMemory();

}


//파일에 런 쓰기입력

void writeRunFile() {

char file_name[20];

ofstream outfile;


//파일이름 설정

itoa(cnt_partition + 1, file_name, 10);

strcat(file_name, "_partition.txt");


outfile.open(file_name, ios::app);


//outfile << memory[minIndex] << " ";

outfile << " " << memory[minIndex];

lastData = memory[minIndex];


outfile.close();

written[minIndex] = false;

}


//현재 메모리에 들어가있는 값 출력

void printMemory() {

int i;


cout << "\n//////////////////////////////////////////////" << endl;


for (i = 0; i < MAX_MEMORY; i++) {

if (frozen[i] == true) {

cout << "(";

}

cout << memory[i];

if (frozen[i] == true) {

cout << ") ";

} else {

cout << " ";

}

}


cout << "\n//////////////////////////////////////////////" << endl;

}



//런파일들을 화면에 출력

void printRun() {

int i;

ifstream file;

int buf;

char file_name[20];


cout << "\n----------------------------------------------" << endl;


for (i = 0; i <= cnt_partition; i++) {

cout << i + 1 << "번 분할////" << endl;


memset(file_name, 0, sizeof(file_name));

itoa(i + 1, file_name, 10);

strcat(file_name, "_partition.txt");


file.open(file_name);


while (!file.eof()) {

file >> buf;

cout << buf << " ";

}

file.close();

cout << "\n////////////////////////////////////////" << endl;

}

cout << "\n----------------------------------------------" << endl;

}


//마지막 남은 데이터 처리

void lastDataClear() {

int i = 0;


while (i < MAX_MEMORY) {

if (written[i] == true) {

minIndex = i;

break;

}

i++;

}


for (i = 0; i < MAX_MEMORY; i++) {

if ((written[i] == true) && (memory[minIndex] > memory[i])) {

minIndex = i;

}

}


writeRunFile();


}



+ Recent posts