반응형

C++ 소스 코드 62

9.3 수식 파서 트리(Numeric Parser Tree) [디딤돌 자료구조와 알고리즘 with C++]

9.3 수식 파서 트리(Numeric Parser Tree)수식 계산기는 스택으로 만드는 방법과 파서 트리로 만드는 방법이 있습니다. 정규화를 할 수 있는 구문을 파싱(Parsing)할 때 파서 트리로 구현하면 운행 방법에 따라 원하는 결과물을 얻을 수 있습니다. 이번에는 컴파일러 개념을 도입한 수식 파서 트리를 만들어 보기로 할게요. 파서(Parser)는 파싱하는 도구를 말합니다. 그리고 파싱은 입력 문장을 분석하는 것을 말합니다. 따라서 파서는 입력 문장을 분석하여 원하는 결과물을 만드는 번역기라 할 수 있습니다. 컴파일러도 고급 언어로 작성한 소스를 분석하여 기계어로 번역하므로 내부에 파싱하는 파서가 필요합니다. 컴파일러가 컴파일하는 과정은 여러 단계로 나누며 컴파일러 종류에 따라 다릅니다. 여기에..

9.1 힙 정렬 알고리즘 [디딤돌 자료구조와 알고리즘 with C++]

9.1 힙 정렬 알고리즘이제 힙 정렬 알고리즘을 살펴보기로 해요. 힙 정렬은 완전 이진 트리의 한 종류인 힙 트리를 이용하여 정렬하는 알고리즘입니다. 먼저 힙 트리가 무엇인지 살펴본 후에 힙 정렬 알고리즘을 알아보고 분석 및 구현해 봅시다. 힙 트리는 부모의 값이 자식의 값보다 큰 값을 보장하는 최대 힙과 작은 값을 보장하는 최소 힙이 있습니다. 최대 힙으로 표현한 힙 트리의 루트에는 가장 큰 값을 갖고 최소 힙으로 표현하면 가장 작은 값을 갖습니다. 힙 트리처럼 완전 이진 트리는 배열로 많이 표현합니다. 완전 이진 트리가 아닌 이진 트리도 배열로 표현할 수 있지만 트리의 높이가 높아지고 한 쪽으로 기울어질 수록 비어있는 공간이 많아져서 메모리 효율이 떨어집니다. 하지만 완전 이진 트리는 마지막 자료가 ..

8.7 장르별 도서 관리 프로그램 코드[디딤돌 자료구조와 알고리즘 with C++]

8.7 장르별 도서 관리 프로그램 코드 다음은 이번 실습에서 작성한 장르별 도서 관리 프로그램의 소스입니다. //ehglobal.h#pragma once#pragma warning(disable:4996)#include #include using namespace std; #include #include enum keydata{ NO_DEFINED,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,ESC}; //공통적으로 사용할 정적 메서드를 캡슐화한 클래스class ehglobal{public: static void clrscr();//화면을 지우는 메서드 static void timeflow(int millisecond); //원하는 시간동안 지연시키는 메서드 static int getnum()..

8.5 도서 검색 및 특정 장르 보기 [디딤돌 자료구조와 알고리즘 with C++]

8.5 도서 검색 및 특정 장르 보기이번에는 ISBN으로 도서 검색과 특정 장르 선택 후 도서 검색과 특정 장르 보기 기능을 구현합시다. 먼저 ISBNㅇ로 도서 검색 기능을 구현하세요.void App::FindBookByISBN() //ISBN으로 도서 검색{먼저 검색할 도서의 ISBN을 입력받으세요. cout

8.4 전체 도서 보기 및 전체 보기 [디딤돌 자료구조와 알고리즘 with C++]

8.4 전체 도서 보기 및 전체 보기이번에는 전체 도서 보기와 전체 보기 기능을 구현합시다. 앞에서 도서 추가 기능을 구현하였는데 이를 확인할 수 있기 때문에 먼저 구현하는 것이 개발하기 편합니다. 먼저 정체 도서 보기 기능을 구현합시다.void App::ListBook() //전체 도서 보기{isbn을 키, 도서 개체를 값으로하는 bookdic의 반복자를 이용하여 전체를 순회합니다. BDIter seek = bookdic.begin(); BDIter last = bookdic.end(); Book *book=0; for( ;seek != last; ++seek) {map에 보관한 것은 isbn키와 도서 개체를 값으로 하는 pair입니다. 도서 개체를 구하려면 반복자에 간접 연산하여 보관한 pair에 접..

8.3 도서 추가 [디딤돌 자료구조와 알고리즘 with C++]

8.3 도서 추가이번에는 도서 추가 기능을 구현합시다. void App::AddBook() //도서 추가{먼저 추가할 도서의 ISBN을 입력받습니다. coutGetGNum() == gnum) {장르의 번호와 사용자가 입력한 장르 번호가 같으면 장르를 반환하세요. return genre; } }사용자가 입력한 장르 번호를 갖는 장르 개체가 없으면 0을 반환하세요. return 0;} Genre 클래스에 도서 추가 AddBook 메서드와 장르 번호 접근자 GetGNum을 추가하세요.class Genre{ ...중략... Book *AddBook(string isbn); int GetGNum()const;}; Book *Genre::AddBook(string isbn){사용자에게 장르 내 도서 구분자를 입력받..

8.2 장르 추가 및 전체 장르 보기 [디딤돌 자료구조와 알고리즘 with C++]

8.2 장르 추가 및 전체 장르 보기이번에는 장르 추가 및 전체 장르 보기를 구현합시다. 시나리오를 보면 장르 추가에서 장르의 일련 번호는 1부터 순차 부여합니다. 이를 위해 App 개체는 가장 최근에 생성한 장르 번호를 기억하고 있어야 합니다. 멤버 필드로 가장 최근에 장르 번호를 추가하세요.class App{ ...중략... int last_gnum; ...중략...}; App 생성자에서는 last_gnum을 초기값을 설정하세요.App::App(void){ last_gnum = 0;}void App::AddGenre() //장르 추가{장르 추가에서는 부여할 장르 번호를 위해 last_gnum을 1 증가하세요. last_gnum++;사용자로부터 추가할 장르 이름을 입력받습니다. cout

8. STL 실습 - 장르별 도서 관리 프로그램 [디딤돌 자료구조와 알고리즘 with C++]

8. STL 실습 - 장르별 도서 관리 프로그램 이번 장에서는 STL에서 제공하는 vector, list, map을 사용하여 장르별 도서 관리 프로그램을 만들어 보아요. 실습할 프로그램에서는 도서를 장르별로 관리합니다. 장르에 도서는 vector를 이용하여 보관합니다. 응용에서는 장르를 list에 보관합니다. 그리고 App에는 모든 도서를 isbn(문자열 형식으로 정의)을 키로 값을 도서인 map에 보관합시다. 주의할 점은 하나의 도서 개체를 장르와 App에 보관할 것입니다. 똑같은 정보를 갖는 두 개의 도서 개체를 만들어서 보관할 것이 아님을 주의합시다. 시나리오는 다음과 같습니다. 주제: 장르별 도서 관리 프로그램장르별 도서 관리 프로그램은 콘솔에서 동작하는 응용 프로그램입니다. 프로그램은 크게 초기..

반응형