반응형

C++ 소스 코드 62

[C++] 85. 최종 실습 - 노래방 가기

[C++] 85. 최종 실습 - 노래방 가기 이번에는 노래방 가기 기능에 관해 시퀀스 다이어그램을 작성하고 난 후에 구체적인 코드를 구현합시다. 노래방 가기에서는 학생을 선택하여 학생의 Sing을 수행합니다. 각 장소에서는 해당 장소에서 명령할 수 있는 기능만 보이게 한정하였기 때문에 IPlay 인터페이스 형식으로 학생 개체에 접근해야 합니다. 그리고 선택한 학생이 운동 학생이면 Dance 기능을 수행합니다. 물론 학생을 선택하기 위해서는 사용자에게 주민번호를 입력받아 컬렉션 내에 유닛과 비교하는 부분이 있어야 합니다. 이 부분은 이미 기반 클래스 Place에 구현하였기 때문에 이를 활용합니다.IPlay 인터페이스에 Sing 메서드를 순수 가상 메서드로 약속하세요.interface IPlay{ virtu..

[C++] 84. 최종 실습 - 파티

[C++] 84. 최종 실습 - 파티 이번에는 파티 기능에 관해 시퀀스 다이어그램을 작성하고 난 후에 구체적인 코드를 구현합시다. 파티 기능은 다운타운에 있는 모든 학생의 Drink을 수행합니다. 그런데 각 장소에서는 해당 장소에서 명령할 수 있는 기능만 보이게 한정하였기 때문에 IPlay 인터페이스 형식으로 학생 개체에 접근해야 합니다.그리고 IPlay 인터페이스에 Drink 메서드를 순수 가상 메서드로 약속하세요. interface IPlay { virtual void Drink()=0; }; 다운타운의 Party 기능을 구현합시다. void Downtown::Party()//파티 { cout

[C++] 80. 최종 실습 - 강의 시작

[C++] 80. 최종 실습 - 강의 시작 이번에는 강의 시작 기능에 관해 시퀀스 다이어그램을 작성하고 난 후에 구체적인 코드를 구현합시다. 강의 시작 기능은 학교에 있는 모든 학생의 ListenLecture를 수행하게 합니다. 그런데 각 장소에서는 해당 장소에서 명령할 수 있는 기능만 보이게 한정하였기 때문에 IStudy 인터페이스 형식으로 학생 개체에 접근해야 합니다.모든 장소에는 기반 클래스인 Place에 학생을 보관하는 컬렉션이 있습니다. 따라서 파생 형식인 각 장소에서 학생 개체에 접근하기 위해 컬렉션에 보관한 학생 수와 특정 인덱스의 학생 개체를 구하는 메서드를 제공하세요. class Place { ...중략... protected: ...중략... size_t GetCount()const;/..

[C++] 78. 최종 실습 - 전체 보기

[C++] 78. 최종 실습 - 전체 보기 이번에는 전체 보기 기능에 관해 시퀀스 다이어그램을 작성하고 난 후에 구체적인 코드를 구현합시다. 전체 보기에서는 이 에이치 나라에 있는 모든 학생 정보를 출력합니다. 그리고 모든 장소의 정보를 출력합니다. 각 장소에서는 해당 장소에 있는 모든 학생 정보를 출력합니다.EhNara의 멤버 ViewAll 메서드를 구현합시다. void EhNara::ViewAll() //전체 보기 { 전체 학생 정보 보기와 전체 장소 정보 보기 메서드를 만들어서 이를 호출하게 합시다. ViewStudents();//전체 학생 정보 보기 ViewPlaces();//전체 장소 정보 보기 } EHNara 클래스에 멤버 메서드 ViewStudents와 ViewPlaces를 추가하세요. Eh..

[C++] 함수 개체 실습의 Zone 클래스 구현 예제 코드

다음은 Zone 클래스의 전체 구현된 예제 코드입니다. Zone.cpp #include "Zone.h" //번호로 검색 시에 사용할 클래스 정의 class SearchByNumFun :public Search { int num; public: SearchByNumFun(int _num){num = _num;} virtual bool operator()(Member *mem) { return mem->GetNum() == num; } }; //이름으로 검색 시에 사용할 클래스 정의 class SearchByNameFun :public Search { string name; public: SearchByNameFun(string _name){name = _name;} virtual bool operator(..

12.4.2 크루스칼 알고리즘 소스 코드 [디딤돌 자료구조와 알고리즘 with C++]

12.4.2 크루스칼 알고리즘 소스 코드다음은 앞에서 작성한 크루스칼 알고리즘 소스 코드입니다. //Edge.h#pragma once#include using namespace std;class Edge{ string vt1; string vt2; int weight;public: Edge(string vt1,string vt2,int height); bool Exist(string vt)const; bool Exist(string vt1, string vt2)const; string Other(string vt)const; void View()const; int GetWeight()const; string GetVt1()const; string GetVt2()const;}; //Edge.cpp#incl..

12.3.1 프림 알고리즘 구현 [디딤돌 자료구조와 알고리즘 with C++]

12.3.1 프림 알고리즘 구현이제 프림 알고리즘을 구체적으로 구현해 보아요. 앞에서 작성했던 그래프 부분까지는 매우 비슷합니다. 먼저 간선을 정의합시다.class Edge{두 개의 정점과 간선의 비용이 필요하죠. string vt1; string vt2; int weight;public:생성자는 두 개의 정점과 간선의 비용을 입력 인자로 받습니다. Edge(string vt1,string vt2,int height);특정 정점이 존재하는지 판별하는 메서드를 제공하세요. bool Exist(string vt)const;두 개의 정점을 잇는 간선인지 판별하는 메서드를 제공하세요. bool Exist(string vt1, string vt2)const;하나의 정점을 입력 인자로 받아 다른 나머지 정점을 구하..

12.2 SJF 알고리즘 [디딤돌 자료구조와 알고리즘 with C++]

12.2 SJF 알고리즘 여러 개의 작업을 하나의 CPU에서 수행하는 순서를 결정하는 스케쥴링 알고리즘은 여러가지 방법이 있습니다. 그 중에서 작업을 수행 요청하고 실제 수행이 끝날 때까지 대기하는 평균 시간을 최소로 하는 알고리즘은 SJF(Shortest Job First)알고리즘입니다. SJF 알고리즘은 작업량이 작은 작업을 먼저 수행하는 알고리즘입니다. 동시에 n개의 작업을 수행 요청이 왔다가 가정합시다. n번째 수행할 작업의 길이를 An이라고 한다면 모든 작업을 수행하는데 걸리는 비용은 다음과 같습니다.A1 + (A1 + A2) + (A1 + A2 + A3) + ... + (A1+A2+A3+...+An) = nA1 + (n-1)A2 + (n-2)A3 + ... +An 그리고 대기 시간의 합은 다음..

12.1 거스름 돈 [디딤돌 자료구조와 알고리즘 with C++]

12.1 거스름 돈 물건을 팔고 가장 적은 개수로 거스름 돈을 주려면 어떻게 해야 할까요? 큰 단위의 돈을 주는 것이 작은 단위로 주는 것보다 유리하겠죠. 탐욕 알고리즘으로 문제를 해결한다면 큰 단위부터 거스름돈을 주게 전개합니다. 큰 단위 화폐부터 작은 단위 화폐 순으로 다음의 알고르즘을 전개합니다. 만약 화폐 단위보다 거슬러 줘야 할 돈이 많으면 몇 개를 줄 것인지를 결정합니다. 그리고 남은 돈은 다음 단위 화폐로 넘어가서 계산합니다. 이러한 방법을 계속 수행하면 가장 적은 개수로 거스름 돈을 지불할 수 있습니다. 예를 들어 만원을 받고 1723원의 상품을 구입한다고 가정합시다. 거슬러 주어야 할 돈은 8277원입니다. 5000원8277원이므로 5000원 화폐가 1개 필요합니다. 나머지는 3277원입..

11.3 다익스트라 알고리즘 [디딤돌 자료구조와 알고리즘 with C++]

11.3 다익스트라 알고리즘 이번에는 간선의 비용이 있는 그래프에서 최단 거리를 찾는 알고리즘 중에 하나인 다익스트라 알고리즘을 살펴 보아요. 다익스트라 알고리즘은 출발 정점에서 가까운 경로 순으로 보관하는 우선 순위 큐와 출발 정점에서 특정 정점까지 최단 경로 후보들을 보관하는 후보 테이블을 이용하는 알고리즘입니다. 참고로 벨만 포드 알고리즘은 간선의 비용이 음수일 때도 적용할 수 있는 알고리즘이며 나머지는 다익스트라와 같습니다. 제일 먼저 출발 정점에서 인점한 정점을 방문하는 다음 경험 목록을 구합니다. 그리고 마지막 정점까지 가는 경로가 후보 테이블에 있는지 확인합니다. 만약 후보 테이블에 있는 경로가 새로운 경로보다 비용이 많으면 새로운 경로로 교체합니다. 처음 마지막 정점이 방문하였을 때는 후보..

반응형