다음은 C언어로 작성한 최솟값(최댓값) 찾기 알고리즘 소스 코드입니다.
//common.h #pragma once //헤더 파일을 한 번만 포함해서 컴파일 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <malloc.h> #include <memory.h> #include <time.h> #pragma warning(disable:4996) //4996컴파일 경고 메시지 출력 해제
//Book.h #pragma once #include "common.h" #define MAX_TIT_LEN 200 #define MAX_AUT_LEN 20 typedef struct _Book Book; struct _Book { char title[MAX_TIT_LEN+1]; char author[MAX_AUT_LEN+1]; int num; }; Book *New_Book(const char *title,const char *author,int num); void Delete_Book(Book *book); void Book_View(Book *book); int Book_CompareTitle(Book *book,const char *title); int Book_CompareAuthor(Book *book,const char *author); int Book_CompareNum(Book *book,int num);
//Book.c #include "Book.h" void Book_Book(Book *book,const char *title,const char *author,int num); Book *New_Book(const char *title,const char *author,int num) { Book *book = 0; book = (Book *)malloc(sizeof(Book)); Book_Book(book,title,author,num); return book; } void Book_Book(Book *book,const char *title,const char *author,int num) { memset(book,0,sizeof(Book)); strncpy(book->title,title,MAX_TIT_LEN); strncpy(book->author,author,MAX_AUT_LEN); book->num = num; } void Delete_Book(Book *book) { free(book); } void Book_View(Book *book) { printf("<%010d>:<%s>\n",book->num,book->title); printf("\t 저자:%s\n",book->author); } int Book_CompareTitle(Book *book,const char *title) { return strcmp(book->title,title); } int Book_CompareAuthor(Book *book,const char *author) { return strcmp(book->author,author); } int Book_CompareNum(Book *book,int num) { return book->num-num; }
//Program.c #include "common.h" #include "Book.h" typedef void *Element; typedef int (*Compare)(Element , Element); Element FindMin(Element *base,int asize,Compare compare) { int ahalf = asize/2; int bhalf = asize - ahalf; Element min_a = 0; Element min_b = 0; if(asize<=0) { return 0; } if(asize == 1) { return base[0]; } min_a = FindMin(base,ahalf,compare); min_b = FindMin(base+ahalf,bhalf,compare); if(compare(min_a,min_b)>0) { return min_b; } return min_a; } #define MAX_BOOK 10 Book *books[MAX_BOOK]={0}; void SimulationInit(); void Simulation(); void SimulationClear(); int main() { SimulationInit(); Simulation(); SimulationClear(); return 0; } void SimulationInit() { char title[MAX_TIT_LEN+1]=""; char author[MAX_AUT_LEN+1]=""; int i = 0; for(i=0; i<MAX_BOOK; ++i) { sprintf(title,"%010d",rand()); sprintf(author,"%010d",rand()); books[i] = New_Book(title,author,rand()); } } void ListBook(int n); int CompareByNum(Book *book1,Book *book2); void Simulation() { Book *book = 0; printf("전체 도서 목록\n"); ListBook(MAX_BOOK); book = (Book *)FindMin(books,MAX_BOOK,CompareByNum); printf("도서 번호가 가장 작은 도서\n"); Book_View(book); } int CompareByNum(Book *book1,Book *book2) { return Book_CompareNum(book1,book2->num); } void ListBook(int n) { int i = 0; for(i=0; i<n; ++i) { Book_View(books[i]); } } void SimulationClear() { int i = 0; for(i=0; i<MAX_BOOK; ++i) { Delete_Book(books[i]); } }