프로그래밍/C,C++ 12

정렬/탐색

1. 정렬 여러 가지 데이터를 특정 기준에 의해 내림차순/오름차순으로 정렬한다. 여기서는 정수형 데이터를 오름차순으로 정렬한다고 가정한다. ​ 선택정렬 정렬되지 않은 목록에서 가장 큰 수를 찾아 목록의 맨 뒤로 옮기는 것을 반복하는 정렬 방법이다. 삽입정렬 배열의 앞에서부터(이때 이 부분은 정렬되어 있음) 하나씩 인덱스를 늘려가며 새로운 데이터를 기존 정렬된 부분에 순서에 맞추어 끼워넣는 방법이다. 정렬 시작시 "정렬된 부분"은 가장 빠른 인덱스 하나로 정의하고 값이 하나이므로 정렬되었다고 본다. ​ 삽입정렬의 알고리즘은 쉽지만 본인은 이걸 코드로 직접 구현할때 조금 헷갈려했는데, 새로운 데이터를 삽입하기 전 기존 데이터를 한칸씩 shifting 시키는것이 조금 헷갈렸다. 혹시나 마찬가지인 사람은 주석을..

배열

1. 배열 배열(array)는 요소 수가 정해진 동일 자료형 요소의 순차적 집합체이다. 동일한 자료형인 여러 데이터를 다룰 때 쓰인다. 2. 배열의 선언 배열의 선언방법은 다음과 같다. (자료형) (배열명)[배열의 길이]; 예를 들어 int 와 float 자료형을 가지고 크기가 각각 10,15인 배열을 선언하려면 이렇게 하면 된다. 3. 배열의 초기화/원소 접근 배열이 선언되었으면 초기화가 필요하다(C언어에서). 배열 최초 선언시 각 요소에는 쓰레기값이 들어가 있으므로 초기화를 바로바로 해주는것이 좋다. ​ 컴파일 시간 초기화 배열 선언과 동시에 초기화하는 방법이다. 기본적인 문법은 다음과 같다: (자료형) (배열명)[배열의 길이] = {요소1, 요소2....}; 배열 선언문 바로 다음에 대입연산자 = ..

[명품 C++ programming]10,11장 실습문제

단원: 10. 템플릿과 표준 라이브러리(STL) 11. C++ 입출력 시스템 [실습 10.8]문제 7을 푸는 다른 방법을 소개한다. bigger()함수의 다음 라인에서 >연산자 때문에, T에 클래스 타입이 대입될 때 구체화가 실패하여 컴파일 오류가 발생한다. 이 문제를 해결하기 위해 추상 클래스 Comparable이 주어진다. Circle 클래스가 Comparable을 상속받아 순수 가상 함수를 모두 구현하면, 앞의 bigger() 템플릿 함수를 사용하는데 아무 문제가 없다. Circle뿐 아니라, Comparable을 상속받은 모든 클래스를 bigger()에 사용할수 있다. Comparable을 상속받은 Circle 클래스를 완성하고 문제 7의 main()을 실행하여 테스트하라. 코드: #include..

[명품 C++ programming]9장 Open challenge

과제는 아니고 그냥 뭔가 될 거 같아서 풀어본 챌린지 문제 [open challenge]Human의 Food 먹기 게임 게임에는 Human, Monster, Food의 객체가 등장하며, 이들은 10x20 격저판에서 각각 정해진 규칙에 의해 움직인다. Human 객체는 사용자의 키에 의해 왼쪽(a 키), 아래(s 키), 위(d 키), 오른쪽(f 키)으로 한칸씩 움직이고, Monster는 한 번에 2칸씩, 왼쪽, 아래, 위, 오른쪽 방향으로 랜덤하게 움직인다. Food는 5번 중에 3번은 제자리에 있고, 나머지 2번은 4가지 방향 중 랜덤하게 한 칸씩 움직인다. 게임은 Hyman이 Monster를 피해 Food를 먹으면(Food의 위치로 이동) 성공으로 끝나고, Monster가 Food를 먹거나 Human이..

[명품 C++ programming]7,8,9장 실습문제

단원: 7. 프렌드와 연산자 중복 8. 상속 9. 가상함수와 추상클래스 [실습 7.3]다음 연산을 통해 공짜 책인지를 판별하도록 !연산자를 작성하라. 코드: #include using namespace std; class Book { string title; int price, pages; public: Book(string title = "", int price = 0, int pages = 0) { this->title = title; this->price = price; this->pages = pages; } void show() { cout capacity = capacity; mem = new int[capacity]; } ~BaseArray() { delete[] mem; } void put..

[명품 C++ programming]4,5,6장 실습문제

단원: 4. 객체 포인터와 객제 배열, 객체의 동적 생성 5. 함수와 참조, 복사 생성자 6. 함수 중복과 static 멤버 [실습 4.9]다음과 같은 Person 클래스가 있다. Person 클래스와 main()함수를 작성하여, 3개의 Person 객체를 가지는 배열을 선언하고, 다음과 같이 키보드에서 이름과 전화번호를 입력받아 출력하고 검색하는 프로그램을 완성하라. 코드: #include #include using namespace std; class person { string name; string tel; public: person(); string getname() { return name; } string gettel() { return tel; } void set(string name, s..

[ANSI C 프로그래밍]13장 프로그래밍 연습

단원: 12. 포인터 13. 파일 다루기 [프로그래밍 연습 13.8]5개의 물품 정보를 순차적으로 저장하는 프로그램을 작성하라. 정보는 물품 코드, 가격, 재고 개수이며 키보드로 사용자에게 입력을 받는다. 코드: #include struct info { int code; float price; int number; }; void writedata(FILE* x, struct info y) { printf("\nitem code:"); scanf("%d", &y.code); fprintf(x, "%d ", y.code); /*scanf 함수로 일차적으로 데이터를 입력받은 다음 그 데이터들을 fprintf함수를 사용하여 파일에 저장한다. 나머지 부분도 동일한 기능*/ printf("\nitem price:"..

[ANSI C 프로그래밍]10장 프로그래밍 연습

단원: 10. 사용자정의함수 [프로그래밍 연습 10.5]피보나치 수열은 다음과 같이 재귀적으로 표현이 된다. F(1) =1 F(2) = 1 F(n) = F(n-1) + F(n-2) , n > 2 배열을 이용하여 첫 n 개의 피노나치 수를 생성하는 함수를 작성하고, n = 5, 10, 15 일 때의 사용예를 보여라. 코드: #include int fibonacci(int m) { int i; static int fibo[100]; //기존 배열의 초기화를 막기위해 static 사용 if (m = 2) { for (i = 2; i

[ANSI C 프로그래밍]8,9장 프로그래밍 연습

단원: 8. 배열 9. 문자배열과 문자열 [프로그래밍 연습 8.5]학생 100명의 시험결과가 다음과 같이 입력된다고 하자. (학생번호 과목1점수 과목2점수 과목3점수) ex) 1 80 70 56 2 40 50 100 먼저 데이터를 읽어 들인 후 다음과 같은 계산을 하는 프로그램을 작성하시오. (a) 각 학생의 과목 총점 (b) 각 과목에 대하여 최고 점수와 해당 학생번호 (c) 최고 합산 점수를 기록한 학생번호 코드: #include main() { int i, m, n, k, column, row, stop, mode; int scoredata[100][4] = { {0,0,0,0} }; //데이터 입력부 for (row = 0;; row++) { printf("%d 번째 학생의 학생번호,과목1 점수,..