PowerPoint 프레젠테이션

Size: px
Start display at page:

Download "PowerPoint 프레젠테이션"

Transcription

1 15 장프로젝트 _ 웨이브렛변환 웨이브렛변환의개념 웨이브렛변환을위한 MFC 설정하기 파일입. 출력설정하기 웨이브렛변환을위한대화상자설정하기 순방향웨이브렛변환구현하기 역방향웨이브렛변환구현하기 한빛미디어 ( 주 )

2 15 장. 프로젝트 _ 웨이브렛변환 학습목표 웨이브렛변환의개념을소개한다. 순방향웨이브렛변환프로그램을실습한다. 역방향웨이브렛변환프로그램을실습함다. 2

3 Section 01 웨이브렛변환의개념 웨이브렛은기본함수로 sine, cosine 함수외에웨이브렛모함수를사용하는데, 각주파수영역에따라변화하는다양한기저함수를생성하여사용함 시간 - 주파수에국부적인성질이있음. 푸리에변환은시간과주파수정보를동시에파악할수없지만웨이브렛에서는이둘을동시에파악가능 3

4 필터뱅크를이용한이산웨이브렛변환수행 이산웨이브렛변환은저주파통과필터와고주파통과필터로구성된필터뱅크로수행됨. 이때, 사용되는필터는특수하게설계된것으로, 직교특성, 선형특성, 고주파와저주파부분을정확하게분할하는특성이있음. 4

5 필터뱅크를이용한이산웨이브렛변환수행 ( 계속 ) 필터뱅크의동작을이용한웨이브렛변환과역변환의수행과정을나타낸것. 필터링은컨벌루션으로수행됨. 웨이브렛변환과정에서는각각필터링한뒤데이터의크기를절반으로줄이는다운샘플링이수행되고, 웨이브렛역변환과정에서는각필터링한뒤데이터의크기를원상태로보상해주려고두배로증가시키는업샘플링이수행됨. 5

6 필터뱅크를이용한 2 차원이산웨이브렛변환 웨이브렛을영상에적용하려면 2 차원처리를수행해야함. 분리성을만족함. 먼저세로방향으로웨이브렛을수행한뒤가로방향으로웨이브렛을수행하면 2 차원웨이브렛변환이가능 6

7 Section 02 웨이브렛변환을위한 MFC 설정하기 ➊ Visual C++ 프로그램을실행 [File]-[New] 메뉴클릭 7

8 Section 02 웨이브렛변환을위한 MFC 설정하기 ( 계속 ) ➋ [New] 대화상자의 [Projects] 탭에서 MFC AppWizard [exe] 항목을선택 Project name 란에다음과같이입력 8

9 Section 02 웨이브렛변환을위한 MFC 설정하기 ( 계속 ) ➌ [MFC AppWizard] 대화상자에서 MDI 기반에서작성하기위해 MDI(multiple documents) 항목을선택 [Finish] 버튼클릭해기본환경설정완료 9

10 Section 03 파일입 출력설정하기 ➊ Visual C++ 프로그램에서 [View]-[ClassWizard] 메뉴클릭 ➋ [MFC ClassWizard] 대화상자의 Class name 항목에서 CWaveletTransformDoc를선택 Message 항목에서 OnOpenDocument 더블클릭 CWaveletTransformDoc에 OnOpenDocument 함수추가 10

11 Section 03 파일입 출력설정하기 ( 계속 ) ➌ 함수에서사용할입력영상버퍼변수, 출력영상버퍼변수, 영상의크기와관련된변수추가 11

12 Section 03 파일입 출력설정하기 ( 계속 ) ➍ BOOL CWaveletTransformDoc::OnOpenDocument(LPCTSTR lpszpathname) 에다음프로그램추가 (1) BOOL CWaveletTransformDoc::OnOpenDocument(LPCTSTR lpszpathname) { if(!cdocument::onopendocument(lpszpathname)) return FALSE; CFile File; File.Open(lpszPathName, CFile::modeRead CFile::typeBinary); if(file.getlength() == 256*256){ // RAW 파일의크기결정 m_height = 256; m_width = 256; else if(file.getlength() == 512*512){ // RAW 파일의크기결정 m_height = 512; m_width = 512; else{ AfxMessageBox("Not Support Image Size"); return 0; 12

13 Section 03 파일입 출력설정하기 ( 계속 ) ➍ BOOL CWaveletTransformDoc::OnOpenDocument(LPCTSTR lpszpathname) 에다음프로그램추가 (2) m_size = m_height * m_width; m_inputimage = new unsigned char [m_height * m_width]; // 입력영상저장공간 m_outputimage = new unsigned char [m_height * m_width]; // 출력영상저장공간 for(int i = 0 ; i<m_height * m_width ; i++){ m_inputimage[i] = 255; // 초기화 m_outputimage[i] = 255; // 초기화 File.Read(m_InputImage, m_height * m_width); // 파일읽기 File.Close(); return TRUE; 13

14 Section 03 파일입 출력설정하기 ( 계속 ) ➎ 입력된영상을확인하기위해 CWaveletTransformView::OnDraw(CDC* pdc) 에다음프로그램추가 void CWaveletTransformView::OnDraw(CDC* pdc) { CWaveletTransformDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int i, j; int R, G, B; for(i=0 ; i<pdoc->m_height ; i++){ for(j=0 ; j<pdoc->m_width ; j++){ R = pdoc-> m_inputimage[i*pdoc->m_width + j]; B = G = R; pdc->setpixel(j+5, i+5, RGB(R, G, B)); // 입력영상을화면에출력 for(i=0 ; i<pdoc->m_height ; i++){ for(j=0 ; j<pdoc->m_width ; j++){ R = pdoc->m_outputimage[i*pdoc->m_width + j]; B = G = R; pdc->setpixel(j+pdoc->m_width+10, i+5, RGB(R, G, B)); // 복원된영상을화면에출력 14

15 Section 04 웨이브렛변환을위한대화상자설정하기 ➊ ResourceView 창에서 [WaveletTransform resources]-[dialog] 폴더에서마우스오른쪽버튼을클릭 바로가기메뉴 [Insert Dialog] 클릭 ➋ 추가된대화상자를오른쪽과같이편집 15

16 Section 04 웨이브렛변환을위한대화상자설정하기 ( 계속 ) ➌ 대화상자속성을다음과같이정의 16

17 Section 04 웨이브렛변환을위한대화상자설정하기 ( 계속 ) ➍ 대화상자위에서마우스오른쪽버튼을눌러 [ClassWizard] 메뉴를클릭 [ClassWizard] 대화상자에서 [Add Class] 버튼클릭 [Adding a Class] 대화상자에서 Create a new class 항목선택 17

18 Section 04 웨이브렛변환을위한대화상자설정하기 ( 계속 ) ➎ 다음과같이대화상자를클래스에등록 18

19 Section 04 웨이브렛변환을위한대화상자설정하기 ( 계속 ) ➏ [Class Wizard] 대화상자에서 [Add Variable] 버튼클릭 [Add Member Variable] 대화상자에서 CWaveletTransforDlg 대화상자를선택 변수추가 19

20 Section 05 순방향웨이브렛변환구현하기 ➊ ResourceView 창에서 [Menu]-[IDR_IMAGETYPE] 더블클릭해메뉴추가 ➋ 메뉴를추가할부분을더블클릭 [Menu Item Properties] 대화상자에서다음과같이캡션추가 20

21 ➌ 프로그램을실행하는실제메뉴를추가하려고 ➋ 처럼메뉴가들어갈위치를더블클릭 [Menu Item Properties] 대화상자에서다음과같이속성지정 ➍ 해당메뉴위에서마우스오른쪽버튼을눌러 바로가기메뉴 [ClassWizard] 클릭 21

22 ➎ [MFC Class Wizard] 대화상자의 [Message Maps] 탭에서 Object IDs 항목과 Messages 항목을다음과같이지정하고 [Add Function] 버튼클릭 [Add Member Function] 대화상자에서 [OK] 버튼을눌러함수를추가 [Edit Code] 버튼을눌러함수로이동 22

23 ➏ CWaveletTransformView::OnWaveletTransform에다음과같이프로그램을작성. CWaveletTransformView는 CWaveletTransformDoc를호출하는역할을하고, 웨이브렛변환은 CWaveletTransformDoc에서일어나게됨 void CWaveletTransformView::OnWaveletTransform() { CWaveletTransformDoc* pdoc = GetDocument(); ASSERT_VALID(pDoc); pdoc->onwavelettransform(); // Doc 클래스에서생성해야할함수이름 Invalidate(TRUE); 23

24 ➐ ResoureViess 창의 CWaveletTransformDoc 폴더위에서마우스오른쪽버튼클릭후바로가기메뉴 [Add Member Function] 클릭 [Add Member Function] 대화상자에서 OnWaveletTransform 함수추가 24

25 ➑ CWaveletTransformDoc::OnWaveletTransform 에서는입력된영상과미리만든대화상자를이용하여웨이브렛변환실행. Wavelet Transform 대화상자를호출할수있도록 [File View]-[Header File]-[WaveletTransformDoc.h] 파일을클릭하여다음부분추가 // avelettransformdoc.h : interface of the CWaveletTransformDoc class ////////////////////////////////////////////////////////////// #if!defined(afx_wavelettransformdoc_h 4A38BAEB_ E3CB_44C9_B2CB_057CD4D9FF0A INCLUDED_) #define AFX_WAVELETTRANSFORMDOC_H 4A38BAEB_E3CB_44C9_ B2CB_057CD4D9FF0A INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "WaveletTransformDlg.h" // 대화상자헤더선언 class CWaveletTransformDoc : public CDocument { protected: // create from serialization only CWaveletTransformDoc(); DECLARE_DYNCREATE(CWaveletTransformDoc) // Attributes public: // Operations public: CWaveletTransformDlg *pdlg; 25

26 ➒ CWaveletTransformDoc 클래스의생성자와소멸자를다음과같이작성 CWaveletTransformDoc::CWaveletTransformDoc() { // TODO: add one-time construction code here pdlg = new CWaveletTransformDlg(this); CWaveletTransformDoc::~CWaveletTransformDoc() { delete pdlg; 26

27 ➓ 생성된함수 CWaveletTransformDoc::OnWaveletTransform 을다음과같이작성여기서 WaveletTransform 대화상자를호출하게됨. void CWaveletTransformDoc::OnWaveletTransform() { if(pdlg->getsafehwnd() == NULL) pdlg->create(idd_dialog1); // 모달리스대화상자이용 pdlg->showwindow(sw_show); 27

28 11 CWaveletTransformDlg 클래스로이동. 대화상자를이용하여변환에사용되는변수를입력받게됨. [File View]-[Header Files]-[WaveletTransformDlg.h] 파일로이동하여다음프로그램추가 ////////////////////////////////////////////////////////// // CWaveletTransformDlg dialog class CWaveletTransformDoc; class CWaveletTransformDlg : public CDialog { // Construction public: CWaveletTransformDlg(CWnd* pparent = NULL); // standard constructor CWaveletTransformDlg(CWaveletTransformDoc *pdoc, CWnd* pparent = NULL); : // Implementation protected: CWaveletTransformDoc *m_pdoc; 28

29 12 [File View]-[Source Files]-[WaveletTransformDlg.cpp] 파일로이동하여다음과같이프로그램수정 #include "WaveletTransformDoc.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = FILE ; #endif //////////////////////////////////////////////////////////// // CWaveletTransformDlg dialog CWaveletTransformDlg::CWaveletTransformDlg(CWnd* pparent /*=NULL*/) : CDialog(CWaveletTransformDlg::IDD, pparent) { m_pdoc = NULL; CWaveletTransformDlg::CWaveletTransformDlg(CWaveletTransform Doc *pdoc, CWnd* pparent /*=NULL*/) : CDialog(CWaveletTransformDlg::IDD, pparent) { m_pdoc = pdoc; // Doc 클래스참조 m_level = 1; // Wavelet 분해레벨초기화 m_error = 0.0f; // MSE 초기화 m_snr = 0.0f; // SNR 초기화 m_filtercheck = 0; // Filter Check 초기화 29

30 13 Section 05 순방향웨이브렛변환구현하기 ( 계속 ) [MFC Class Wizard] 대화상자의 Wavelet Transform 대화상자에서 [ 변환 ] 버튼클릭 웨이브렛변환이일어나도록다음과같이함수추가 30

31 void CWaveletTransformDlg::OnButtonUpdate() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_pdoc->m_level = m_level; // 대화상자에서입력받은레벨값을 Doc 클래스에전달 m_pdoc->onwaveletencode(); // 웨이브렛변환 UpdateData(FALSE); // 결과업데이트 31

32 14 Section 05 순방향웨이브렛변환구현하기 대화상자의변환버튼이클릭되면변환이실행되고실행코드는 CWaveletTransformDoc 클래스에서있게됨. CWaveletTransformDoc 클래스로이동하여 OnWaveletEncode 함수추가 32

33 15 수학함수를사용하기위해 CWaveletTransforDoc.cpp 의위쪽에다음과같이선언 // WaveletTransformDoc.cpp:implementation of the CWaveletTransformDoc class // #include "stdafx.h" #include "WaveletTransform.h" #include "WaveletTransformDoc.h" #include "math.h" // 수학함수를위한헤더선언 33

34 16 Section 05 순방향웨이브렛변환구현하기 ( 계속 ) OnWaveletEncode 함수에서사용되는전역변수를선언하기위해 [WaveletTransform Classes]-[CWaveletTransformDoc] 폴더위에서마우스오른쪽버튼클릭 [Add Member Variable] 클릭 [Add Member Variable] 대화상자를이용해변수추가 34

35 17 Section 05 순방향웨이브렛변환구현하기 ( 계속 ) CWaveletTransformDoc 폴더위에서마우스오른쪽버튼클릭 [Add Member Function] 클릭 [Add Member Function] 대화상자에서 OnWaveletEncode 함수에서사용되는함수를선언하고작성 35

36 1 OnDownSampling 함수추가하기 double* CWaveletTransformDoc::OnDownSampling(double *m_target, int size) { int i; double* m_temp; m_temp = new double [size / 2]; for(i=0 ; i<size/2 ; i++) m_temp[i] = m_target[2*i]; // 다운샘플링처리 return m_temp; 36

37 2 OnConvolution 함수추가하기 (1) double* CWaveletTransformDoc::OnConvolution(double *m_target, double *m_filter, int size, int mode) { // Circular Convolution 을위한함수 int i, j; double *m_temp, *m_tempconv; double m_sum = 0.0; m_temp = new double [size + m_filtertap - 1]; m_tempconv = new double [size]; // Convolution 결과출력배열 switch(mode){ case 1 : // Circular Convolution 을위한초기화 for(i=0 ; i<size ; i++) m_temp[i] = m_target[i]; for(i=0 ; i<m_filtertap-1 ; i++) m_temp[size + i] = m_target[i]; break; 37

38 2 OnConvolution 함수추가하기 (2) case 2 : for(i=0 ; i<m_filtertap-1 ; i++) m_temp[i] = m_target[size - m_filtertap + i + 1]; for(i=m_filtertap-1 ; i<size + m_filtertap-1 ; i++) m_temp[i] = m_target[i - m_filtertap + 1]; break; for(i=0 ; i<size ; i++){ for(j=0 ; j<m_filtertap ; j++){ m_sum += (m_temp[j+i] * m_filter[m_filtertap-j-1]); // Convolution 연산 m_tempconv[i] = m_sum; m_sum = 0.0; return m_tempconv; // 연산결과를반환 38

39 3 OnFilterTapGen 함수추가하기 void CWaveletTransformDoc::OnFilterTapGen() { // Filter Tap 선택 switch(pdlg->m_filtercheck) { case 0 : m_filtertap = 2; break; case 1 : m_filtertap = 4; break; case 2 : m_filtertap = 6; break; case 3 : m_filtertap = 8; break; default : AfxMessageBox("Wrong Filter Tap"); return; 39

40 4 OnFilterGen 함수추가하기 (1) void CWaveletTransformDoc::OnFilterGen(double *m_h0, Double *m_h1, double *m_g0, double *m_g1) { // 필터계수값 int i; switch(m_filtertap) { case 2 : m_h0[0] = ; m_h0[1] = ; break; case 4 : m_h0[0] = ; m_h0[1] = ; m_h0[2] = ; m_h0[3] = ; break; case 6 : m_h0[0] = ; m_h0[1] = ; m_h0[2] = ; m_h0[3] = ; m_h0[4] = ; m_h0[5] = ; break; 40

41 4 OnFilterGen 함수추가하기 (2) case 8 : m_h0[0] = ; m_h0[1] = ; m_h0[2] = ; m_h0[3] = ; m_h0[4] = ; m_h0[5] = ; m_h0[6] = ; m_h0[7] = ; break; default : AfxMessageBox("Wrong Filter"); return; // H0 필터계수를이용해, H1, G0, G1 필터계수생성 for(i=0 ; i<m_filtertap ; i++) m_h1[i] = pow(-1,i+1) * m_h0[m_filtertap - i - 1]; for(i=0 ; i<m_filtertap ; i++) m_g0[i] = m_h0[m_filtertap - i - 1]; for(i=0 ; i<m_filtertap ; i++) m_g1[i] = pow(-1, i) * m_h0[i]; 41

42 5 OnMem2DAllocUnsigned 함수추가하기 unsigned char** CWaveletTransformDoc::OnMem2DAllocUnsigned (int height, int width) { // unsigned char 형태의 2차원배열할당 int i, j; unsigned char** temp; temp = new unsigned char *[height]; for(i=0 ; i<height ; i++) // 2 차원배열할당 temp[i] = new unsigned char [width]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ temp[i][j] = 0; // 2차원배열초기화 return temp; 42

43 6 OnMem2DAlloc double 함수추가하기 double** CWaveletTransformDoc::OnMem2DAlloc double(int height, int width) { // double 형태의 2차원배열할당 int i, j; double** temp; temp = new double *[height]; for(i=0 ; i<height ; i++) temp[i] = new double [width]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ temp[i][j] = 0; return temp; 43

44 7 OnScale 함수추가하기 (1) double** CWaveletTransformDoc::OnScale(double **m_target, int height, int width) { // 정규화함수 : 필터링된값을 0~255 사이의값으로정규화 int i, j; double min, max; double **temp; temp = OnMem2DAlloc double(height, width); min = max = m_target[0][0]; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ if(m_target[i][j] <= min){ min = m_target[i][j]; // 최소값 if(m_target[i][j] >= max){ max = m_target[i][j]; // 최대값 44

45 7 OnScale 함수추가하기 (2) max = max - min; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ temp[i][j] = (m_target[i][j] - min) * (255. / max); // 정규화처리 return temp; 45

46 18 OnWaveletEncode 함수작성 (1) void CWaveletTransformDoc::OnWaveletEncode() { // Wavelet encode 함수 if(m_level <= 0 (pow(2, m_level+3) > (double) m_width) (pow(2, m_level+3) > (double) m_height)){ AfxMessageBox("Not support decomposition level"); return; // 최대분해레벨이 512*512이면 6레벨로제한 int i, j, k, width, height; double *m_conv1, *m_conv2, *m_conv3, *m_conv4; // Convolution을위한버퍼 double *m_down1, *m_down2, *m_down3, *m_down4; // 다운샘플링을위한버퍼 double *m_hor, *m_ver1, *m_ver2; double **m_l, **m_h, **m_ll, **m_lh, **m_hl, **m_hh, **m_sll, **m_slh, **m_shl, **m_shh; m_tempinput = OnMem2DAlloc double(m_height, m_width); m_tempoutput = OnMem2DAlloc double(m_height, m_width); m_arrangeimage = OnMem2DAllocUnsigned(m_Height, m_width); for(i=0 ; i< m_height ; i++){ for(j=0 ; j< m_width ; j++){ m_tempinput[i][j] = (double) m_inputimage[i* m_width + j]; // 1차원입력을 2차원배열로변환 46

47 18 OnWaveletEncode 함수작성 (2) OnFilterTapGen(); // 필터 tap 생성 m_filterh0 = new double [m_filtertap]; // 필터계수를위한배열 m_filterh1 = new double [m_filtertap]; // 필터계수를위한배열 m_filterg0 = new double [m_filtertap]; // 필터계수를위한배열 m_filterg1 = new double [m_filtertap]; // 필터계수를위한배열 OnFilterGen(m_FilterH0, m_filterh1, m_filterg0, m_filterg1); // 필터계수생성 width= m_width; height= m_height; for(k=0 ; k<m_level ; k++){ m_l = OnMem2DAlloc double(height, width/2); // m_h = OnMem2DAlloc double(height, width/2); // m_ll = OnMem2DAlloc double(height/2, width/2); // LL 저장을위한배열 m_lh = OnMem2DAlloc double(height/2, width/2); // LH 저장을위한배열 m_hl = OnMem2DAlloc double(height/2, width/2); // HL 저장을위한배열 m_hh = OnMem2DAlloc double(height/2, width/2); // HH 저장을위한배열 m_hor = new double [width]; // 횡입력을위한배열 47

48 18 OnWaveletEncode 함수작성 (3) for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ m_hor[j] = m_tempinput[i][j]; // 입력배열을 1차원배열에할당 m_conv1 = OnConvolution(m_Hor, m_filterh0, width, 1); // Convolution 처리 m_conv2 = OnConvolution(m_Hor, m_filterh1, width, 1); // Convolution 처리 m_down1 = OnDownSampling(m_Conv1, width); // 다운샘플링 m_down2 = OnDownSampling(m_Conv2, width); // 다운샘플링 for(j=0 ; j<width/2 ; j++){// 다운샘플링결과를저장 m_l[i][j] = m_down1[j]; m_h[i][j] = m_down2[j]; m_ver1 = new double[height]; m_ver2 = new double[height]; 48

49 18 OnWaveletEncode 함수작성 (4) for(i=0 ; i<width/2 ; i++){ for(j=0 ; j<height ; j++){ m_ver1[j] = m_l[j][i]; // 열방향으로 1차원배열에할당 m_ver2[j] = m_h[j][i]; m_conv1 = OnConvolution(m_Ver1, m_filterh0, height, 1); // Convolution 처리 m_conv2 = OnConvolution(m_Ver1, m_filterh1, height, 1); m_conv3 = OnConvolution(m_Ver2, m_filterh0, height, 1); m_conv4 = OnConvolution(m_Ver2, m_filterh1, height, 1); m_down1 = OnDownSampling(m_Conv1, height); // 다운샘플링 m_down2 = OnDownSampling(m_Conv2, height); m_down3 = OnDownSampling(m_Conv3, height); m_down4 = OnDownSampling(m_Conv4, height); for(j=0 ; j<height/2 ; j++){ m_ll[j][i] = m_down1[j]; // 결과저장 m_lh[j][i] = m_down2[j]; m_hl[j][i] = m_down3[j]; m_hh[j][i] = m_down4[j]; 49

50 18 OnWaveletEncode 함수작성 (6) m_sll = OnScale(m_LL, height/2, width/2); // 처리결과를정규화 m_slh = OnScale(m_LH, height/2, width/2); m_shl = OnScale(m_HL, height/2, width/2); m_shh = OnScale(m_HH, height/2, width/2); for(i=0 ; i<height/2 ; i++){ for(j=0 ; j<width/2 ; j++){ m_tempoutput[i][j] = m_ll[i][j]; m_tempoutput[i][j+(width/2)] = m_hl[i][j]; m_tempoutput[i+(height/2)][j] = m_lh[i][j]; m_tempoutput[i+(height/2)][j+(width/2)] = m_hh[i][j]; // 처리결과를정렬 m_arrangeimage[i][j] = (unsigned char)m_sll[i][j]; m_arrangeimage[i][j+(width/2)] = (unsigned char)m_shl[i][j]; m_arrangeimage[i+(height/2)][j] = (unsigned char)m_slh[i][j]; m_arrangeimage[i+(height/2)][j+(width/2)] = (unsigned char)m_shh[i][j]; // 정규화과정을거친정렬영상 width = width / 2; // 분해를계속하기위해영상의가로축크기를반으로줄임 height = height / 2; // 분해를계속하기위해영상의세로축크기를반으로줄임 50

51 18 OnWaveletEncode 함수작성 (7) m_tempinput = OnMem2DAlloc double(height, width); for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ m_tempinput[i][j] = m_ll[i][j]; // LL 값을새로운입력으로할당 delete [] m_conv1, m_conv2, m_conv3, m_conv4; delete [] m_down1, m_down2, m_down3, m_down4; delete [] m_hor, m_ver1, m_ver2; for(i=0 ; i<height ; i++){ // 메모리해제 delete[] m_ll[i]; delete[] m_lh[i]; delete[] m_hl[i]; delete[] m_hh[i]; delete[] m_sll[i]; delete[] m_slh[i]; delete[] m_shl[i]; delete[] m_shh[i]; delete[] m_l[i]; delete[] m_h[i]; delete m_l, m_h, m_ll, m_lh, m_hl, m_hh, m_sll, m_slh, m_shl, m_shh; UpdateAllViews(NULL); 51

52 정렬영상출력 ➊ [Resource View] 창의 [WaveletTransform resources-dialog] 폴더에서마우스오른쪽버튼클릭 [Insert Dialog] 클릭해대화상자하나삽입 ( [OK], [Cancel] 버튼은삭제 ) [Dialog Properties] 대화상자에서캡션 Arrange Image 로설정 52

53 ➋ 대화상자를클래스에추가 ➌ [MFC ClassWizard] 대화상자의 [Message Maps] 탭에서 Messages 항목의 WM_INITDIALOG 를클릭하여 OnInitDialog 함수추가. 대화상자를초기화하는역할을함. 53

54 ➍ Messages 항목의 WM_PAINT 지를클릭하여 OnPain 함수추가. 이곳은대화상자에그림을그리는역할수행 54

55 ➎ CWaveletTransformDoc 에서 CArrangeDlg 클래스에출력할영상과크기를저장하는변수선언 55

56 ➏ 생성된함수에다음프로그램추가 1 OnInitDialog 함수추가하기 BOOL CArrangeDlg::OnInitDialog() { CDialog::OnInitDialog(); CRect rect, rectc; GetWindowRect(&rect); GetClientRect(&rectC); int cx, cy; CSize sizeimg; sizeimg.cx = Width; sizeimg.cy = Height; cx = sizeimg.cx + rect.width() - rectc.width() + 4; // 정렬영상출력을위한대화상자크기조절 cy = sizeimg.cy + rect.height() - rectc.height() + 4; SetWindowPos(this, 0, 0, cx, cy, SWP_NOZORDER); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE 56

57 2 OnPaint 함수추가하기 void CArrangeDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages int i, j; unsigned char R, G, B; for(i=0 ; i<height ; i++){ for(j=0 ; j<width ; j++){ R = m_tempimage[i][j]; G = B = R; dc.setpixel(j, i, RGB(R, G, B)); // 정규화된정렬영상을화면에출력 57

58 ➐ 정렬된영상은 Wavelet Transform(IDD_DIALOG1) 대화상자에서 [Arrange Image] 버튼을클릭하면영상이출력되게함. [MFC ClassWizard] 대화상자에서 [Arrange Image] 버튼에함수추가 58

59 ➑ ArrangeDlg 를사용하기위해 CWaveletTransformDlg.cpp 파일위쪽에 ArrangeDlg.h 선언 #include "stdafx.h" #include "WaveletTransform.h" #include "WaveletTransformDlg.h" #include "WaveletTransformDoc.h" #include "ArrangeDlg.h" 59

60 ➒ OnButtonArrange 함수추가 void CWaveletTransformDlg::OnButtonArrange() { // 버튼을누르면정렬영상출력 CArrangeDlg dlg; dlg.width = m_pdoc->m_width; dlg.height = m_pdoc->m_height; dlg.m_tempimage = m_pdoc->m_arrangeimage; UpdateData(TRUE); dlg.domodal(); // 정렬영상을위한대화상자출력 60

61 ➓ Wavelet Transform(IDD_DIALOG1) 대화상자의 [ 종료 ] 버튼에변환을종료하는프로그램추가 61

62 11 OnButtonEnd 함수추가 void CWaveletTransformDlg::OnButtonEnd() { CDialog::OnOK(); 62

63 Section 06 역방향웨이브렛변환구현하기 ➊ 역방향웨이브렛변환은순방향변환이일어난뒤변환된값을사용하여역방향변환을하게됨. 따라서순방향에서사용되었던함수와대화상자가재사용됨. ➋ CWaveletTransformDlg::OnButtonArrange 함수에다음프로그램추가 void CWaveletTransformDlg::OnButtonUpdate() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_pdoc->m_level = m_level; m_pdoc->onwaveletencode(); m_pdoc->onwaveletdecode(); // 웨이브렛역변환 m_pdoc->onsnr(); // 신호대잡음비 UpdateData(FALSE); 63

64 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) ➌ 순방향웨이브렛변환처럼 CWaveletTransformDoc 클래스에 OnWaveletDecode 함수를추가하여역방향웨이브렛변환을수행할수있도록한. 역방향웨이브렛변환하는데필요한함수는 CWaveletTransformDoc 클래스에추가 64

65 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) 1 OnUpSampling 함수추가하기 double* CWaveletTransformDoc::OnUpSampling(double *m_target, int size) { // 업샘플링을위한함수 int i; double* m_temp; m_temp = new double[size * 2]; for(i=0 ; i<size*2 ; i++) m_temp[i] = 0.0; // 초기화 for(i=0 ; i<size ; i++) m_temp[2*i] = m_target[i]; // 업샘플링처리 return m_temp; 65

66 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) 2 OnSNR 함수추가하기 void CWaveletTransformDoc::OnSNR() { // 신호대잡음비를위한함수 double OrgSum, ErrSum, MeanErr, MeanOrg; int i; OrgSum = 0.0; ErrSum = 0.0; // calculate mean squared error for(i=0 ; i<m_size ; i++){ // 오류의에너지계산 ErrSum += ((double) m_inputimage[i] - m_recon[i]) * ((double) m_inputimage[i] - m_recon[i]); MeanErr = ErrSum / m_size; // 오류에너지평균 for(i=0 ; i<m_size ; i++){ // 신호의에너지계산 OrgSum += ((double) m_inputimage[i]) * ((double) m_inputimage[i]); MeanOrg = OrgSum / m_size; // 신호에너지평균 pdlg->m_error = (float)meanerr; // 오류출력 pdlg->m_snr = (float)(10 * (double)log10(meanorg / MeanErr)); // 신호대잡음비계산 66

67 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) ➍ OnWaveletDecode 함수작성 (1) void CWaveletTransformDoc::OnWaveletDecode() { int i, j, k; int width, height; double *templl, *templh, *temphl, *temphh, *templ, *temph; double **L, **H; double *Up1, *Up2, *Up3, *Up4; double *Conv1, *Conv2, *Conv3, *Conv4; double **R; width= m_width / (int)(pow(2, m_level)); height= m_height / (int)(pow(2, m_level)); m_recon = new double [m_width * m_height]; for(k=m_level ; k>0 ; k--){ if(width > m_width height >m_height){ // 분해종료 return; templl = new double [height]; templh = new double [height]; temphl = new double [height]; temphh = new double [height]; 67

68 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) ➍ OnWaveletDecode 함수작성 (2) L = OnMem2DAlloc H = OnMem2DAlloc templ = new double [width]; temph = new double [width]; double(height*2, width); double(height*2, width); R = OnMem2DAlloc double(height*2, width*2); for(i=0 ; i<width ; i++){ for(j=0 ; j<height ; j++){ // 정렬영상에서처리하려는열을분리 templl[j] = m_tempoutput[j][i]; templh[j] = m_tempoutput[j + height][i]; temphl[j] = m_tempoutput[j][i + width]; temphh[j] = m_tempoutput[j + height][i + width]; Up1 = OnUpSampling(tempLL, height); // 업샘플링 Up2 = OnUpSampling(tempLH, height); Up3 = OnUpSampling(tempHL, height); Up4 = OnUpSampling(tempHH, height); Conv1 = OnConvolution(Up1, m_filterg0, height*2, 2); // 컨벌루션연산 Conv2 = OnConvolution(Up2, m_filterg1, height*2, 2); Conv3 = OnConvolution(Up3, m_filterg0, height*2, 2); Conv4 = OnConvolution(Up4, m_filterg1, height*2, 2); 68

69 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) ➍ OnWaveletDecode 함수작성 (3) for(j=0 ; j<height*2 ; j++){ L[j][i] = Conv1[j] + Conv2[j]; H[j][i] = Conv3[j] + Conv4[j]; for(i=0 ; i<height*2 ; i++){ for(j=0 ; j<width ; j++){ templ[j] = L[i][j]; // 횡데이터분리 temph[j] = H[i][j]; Up1 = OnUpSampling(tempL, width); // 업샘플링 Up2 = OnUpSampling(tempH, width); Conv1 = OnConvolution(Up1, m_filterg0, width*2, 2); // 컨벌루션연산 Conv2 = OnConvolution(Up2, m_filterg1, width*2, 2); for(j=0 ; j<width*2 ; j++){ R[i][j] = Conv1[j] + Conv2[j]; for(i=0 ; i<height*2 ; i++){ for(j=0 ; j<width*2 ; j++){ m_tempoutput[i][j] = R[i][j]; // 복원데이터를다시정렬 69

70 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) ➍ OnWaveletDecode 함수작성 (4) height = height * 2; // 영상의크기를두배확장 width = width * 2; for(i=0 ; i< m_height ; i++){ for(j=0 ; j< m_width ; j++){ m_recon[i* m_width + j] = R[i][j]; m_outputimage[i* m_width + j] = (unsigned char)r[i][j]; // 최종복원된결과를출력 UpdateAllViews(NULL); delete [] templl, templh, temphl, temphh, templ, temph; // 메모리해제 delete [] Up1, Up2, Up3, Up4; delete [] Conv1, Conv2, Conv3, Conv4; for(i=0 ; i< m_height ; i++){ // 메모리해제 delete[] L[i]; delete[] H[i]; delete[] R[i]; delete L, H, R; 70

71 ➎ 결과영상 Section 06 역방향웨이브렛변환구현하기 ( 계속 ) 71

72 Thank you

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 03 장 영상처리를위한 Visual C++ 디지털영상파일포맷 MFC AppWizard[exe] 를이용한 MFC 프로젝트작성 MFC 를이용한영상처리입. 출력프로그램작성 MFC 를이용한영상축소 MFC 를이용한영상확대 MFC 를이용한양자화영상처리 한빛미디어 ( 주 ) 학습목표 3 장. 영상처리를위한 Visual C++ 영상처리에사용되는 RAW 파일포맷을이해한다.

More information

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770> 제목 : 미디어정보처리프로그래밍실습모음 일시 : 2002. 6. 15 작성자 : 성용철학번 : 한남대학교정보통신멀티미디어공학부 ( 전자정보통신전공 ) 미디어정보처리프로그래밍실습숙제설명 1.256 X 256 grayscale 의디스플레이프로그램 Resource View 의 menu item 에서 Display 밑에 Raw gray 라마든다음에그림과같이 ID 와

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

歯Lecture2.PDF

歯Lecture2.PDF VISUAL C++/MFC Lecture 2? Update Visual C ++/MFC Graphic Library OpenGL? Frame OpenGL 3D Graphic library coding CLecture1View? OpenGL MFC coding Visual C++ Project Settings Link Tap Opengl32lib, Glu32lib,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 이동, 대칭, 회전, 워핑 09 장기하학적변환 영상의이동기하학적변환 영상의대칭기하학적변환 영상의회전기하학적변환 영상의워핑기하학적변환 한빛미디어 ( 주 ) 학습목표 9 장. 이동, 대칭, 회전, 워핑기하학적변환 이동의기하학적변환을공부한다. 대칭기하학적변환을공부한다. 회전기하학적변환의원리를학습한다. 회전기하학적변환에고려할사항을소개한다. 워핑을이해하고수행방법과응용분야를소개한다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 13 장영상변환 ㅎㅎ 영상변환의개요 주파수변환 주파수영역에서의필터링 웨이브렛변환 한빛미디어 주 ) 13 장. 영상변환 학습목표 주파수의개념을이해한다. 푸리에변환과고속푸리에변환을소개한다. 이산코사인변환의특징을이해한다. 주파수영역에서필터링의특징을공부한다. 웨이브렛변환의개념을소개한다. 2 Section 01 영상변환의개요 주파수영상에서화소밝기의변화정도를나타내는것은화소값의변화율주파수는밝기가얼마나빨리변화하는가에따라서고주파와저주파로분류

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 06장화소영역ㅎㅎ처리 화소영역처리의개념 회선처리의원리 블러링 샤프닝 한빛미디어 ( 주 ) 6 장. 화소영역처리 학습목표 영역처리의개념을이해한다. 회선처리를이용한영역처리를구현하는방법을학습한다. 블러링효과를이해하고프로그램을실습한다. 샤프닝효과를이해하고프로그램을실습한다. 2 Section 01 화소영역처리의개념화소영역처리 화소의원값이나위치를바탕으로화소값을변경하는화소의점처리과달리해당입력화소뿐만아니라그주위의화소값도함께고려하는공간영역연산회선기법

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 05 장히스토그램을이용한화소점처리 디지털영상의히스토그램 산술연산을이용한히스토그램에서의이동 히스토그램스트레칭 히스토그램평활화 히스토그램명세화 한빛미디어 ( 주 ) 학습목표 5 장. 히스토그램을이용한화소점처리 디지털영상의히스토그램을이해한다. 산술연산으로히스토그램에서명도와명암대비를조정하는방법을이해한다. 히스토그램스트레칭기법의원리와효과를학습한다. 히스토그램평활화의기본원리를익히고,

More information

Dialog Box 실행파일을 Web에 포함시키는 방법

Dialog Box 실행파일을 Web에 포함시키는 방법 DialogBox Web 1 Dialog Box Web 1 MFC ActiveX ControlWizard workspace 2 insert, ID 3 class 4 CDialogCtrl Class 5 classwizard OnCreate Create 6 ActiveX OCX 7 html 1 MFC ActiveX ControlWizard workspace New

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID android:title= 항목제목 /> </menu> public boolean oncreateoptionsmenu(menu menu) { getme 8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기 [ 그림 8-1] XML 을이용한옵션메뉴설정방법 public boolean

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#2) 2012.10.08. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 07 영역처리를장ㅎㅎ이용한에지검출 에지검출의개요 에지검출기 1차미분을이용한에지검출 2차미분을이용한에지검출 한빛미디어 ( 주 ) 7 장. 영역처리를이용한에지검출 학습목표 에지의개념을학습한다. 이동과차분을기본으로한에지검출기를학습한다. 미분과에지의관련성을소개한다. 1차미분회선마스크를이용한에지검출기를학습한다. 2차미분회선마스크를이용한에지검출기를학습한다. 2 에지 (edge)

More information

슬라이드 1

슬라이드 1 13장직렬화 김성영교수 금오공과대학교 컴퓨터공학부 도큐먼트 / 뷰구조 (1) 도큐먼트와뷰 디스크에저장된파일데이터를읽는경우 도큐먼트객체 뷰객체 파일 사용자 읽기 화면표시 2 도큐먼트 / 뷰구조 (2) 도큐먼트와뷰 사용자가데이터를입력하는경우 도큐먼트객체 뷰객체 파일 사용자 저장 입력 3 도큐먼트 / 뷰구조 (3) 도큐먼트와뷰 입력된데이터를디스크파일에저장하는경우

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

chap10.PDF

chap10.PDF 10 C++ Hello!! C C C++ C++ C++ 2 C++ 1980 Bell Bjarne Stroustrup C++ C C++ C, C++ C C 3 C C++ (prototype) (type checking) C C++ : C++ 4 C C++ (prototype) (type checking) [ 10-1] #include extern

More information

C++-¿Ïº®Çؼ³10Àå

C++-¿Ïº®Çؼ³10Àå C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

히스토그램구하기 사전준비 : 히스토그램을저장할메모리가필요함 필요한메모리개수 à 전체영상의픽셀은그값이 0 ~ 255이므로 256 개의메모리필요함 영상을구성하는픽셀의개수는매우크므로메모리형식은 unsigned long으로해야함 ( unsigned 란 +/- 를고려하지않는다는

히스토그램구하기 사전준비 : 히스토그램을저장할메모리가필요함 필요한메모리개수 à 전체영상의픽셀은그값이 0 ~ 255이므로 256 개의메모리필요함 영상을구성하는픽셀의개수는매우크므로메모리형식은 unsigned long으로해야함 ( unsigned 란 +/- 를고려하지않는다는 디지털영상처리 실습 : 히스토그램 방송영상미디어과 히스토그램 (Histogram) 히스토그램이란? n 디지털영상을구성하는화소는명도값을나타내는데어떤명도값을가진픽셀수가몇개있는가를나타내는함수 n 화소의명도값은 0~255 인데각명도값에해당하는화소의수를나타내는함수 히스토그램구하는방법 4 4 3 3 픽셀갯수 6 5 4 4 3 3 4 1 2 3 2

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070> 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

그래픽 프로그래밍

그래픽 프로그래밍 제 13 장그래픽프로그래밍 13.1 베지어곡선 실습 13-1 알고리즘을통한베지어곡선그리기 실습 13-2 컨트롤포인트이동및베지어곡선 해상도설정하기 그래픽프로그래밍 베지어곡선 베지어곡선알고리즘은곡선을생성하는대표적이고기본이되는알고리즘이다. MFC 에서의베지어곡선함수 BOOL PolyBezier(const POINT* lppoints, int ncount); lppoints

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B

Comtrol ID 레이블 Hotkey Callback 함수 ⑴ Button, IDC_BTN_DEPT, &Department, OnBtnDepartment ⑵ Button, IDC_BTN_EMP, &Employee, OnBtnEmployee ⑶ Button, IDC_B adb.open(dsn) ;; DB 연결 (CompanyAccDB) adb.open(null, false, false, strdsn) ;; DB 연결 (DSN=CompanyAccDB) adb.executesql(strsql) ;; 결과가없는연산자 (Ins/Del/Upd) adb.close() ;; DB 연결끊음 CRecordset aqryset(&adb) ;;

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600 균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

untitled

untitled MFC MFC MFC AppWizard 來 MFC MFC 類 了 類 Document/View MFC Visual C++ AppWizard MFC 不 力 亮 來 不 Document View 不 列 AppWizard View 類 CEditView 列 列 說 行 不 了 Document/View MFC Application Framework 靈 OLE Document

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager are trademarks or registered trademarks of Ari System, Inc. 1 Table of Contents Chapter1

More information

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D> 09: 대화상자 학습목표 대화상자편집기의사용법을익힌다. 모드형대화상자와비모드형대화상자의차이점을이해하고작성방법을익힌다. 대화상자기반응용프로그램의원리를이해하고작성방법을익힌다. 공통대화상자를다루는방법을배운다. 개요 (1/2) 대화상자 다양한컨트롤을포함하고있는일종의윈도우 사용자로부터입력을받거나정보를출력 1 개요 (2/2) 대화상자종류 모드형대화상자 대화상자를닫지않으면응용프로그램이더이상진행할수없다.

More information

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

슬라이드 1

슬라이드 1 전자정부개발프레임워크 1 일차실습 LAB 개발환경 - 1 - 실습목차 LAB 1-1 프로젝트생성실습 LAB 1-2 Code Generation 실습 LAB 1-3 DBIO 실습 ( 별첨 ) LAB 1-4 공통컴포넌트생성및조립도구실습 LAB 1-5 템플릿프로젝트생성실습 - 2 - LAB 1-1 프로젝트생성실습 (1/2) Step 1-1-01. 구현도구에서 egovframe>start>new

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

untitled

untitled - -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int

More information

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi 소프트웨어공학 Tutorial #2: StarUML Eun Man Choi emchoi@dgu.ac.kr Contents l StarUML 개요 l StarUML 소개및특징 l 주요기능 l StarUML 화면소개 l StarUML 설치 l StarUML 다운 & 설치하기 l 연습 l 사용사례다이어그램그리기 l 클래스다이어그램그리기 l 순서다이어그램그리기 2

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) 8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) - DDL(Data Definition Language) : show, create, drop

More information

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345]) 클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

More information

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint 세션.ppt 웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070> /* */ /* LZWIN.C : Lempel-Ziv compression using Sliding Window */ /* */ #include "stdafx.h" #include "Lempel-Ziv.h" 1 /* 큐를초기화 */ void LZ::init_queue(void) front = rear = 0; /* 큐가꽉찼으면 1 을되돌림 */ int LZ::queue_full(void)

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

Microsoft PowerPoint - hci2-lecture9.ppt

Microsoft PowerPoint - hci2-lecture9.ppt Overview 대화상자 대화상자, 대화상자템플렛, 대화상자편집기 모드형대화상자와비모드형대화상자의차이 대화상자기반응용프로그램 HCI Programming 2 (321190) 2007 년가을학기 11/19/2007 박경신 2 대화상자 대화상자 (Dialog Box) 다양한컨트롤을포함하고있는일종의윈도우 사용자로부터입력을받거나정보를출력 정적, 버튼, 편집등다양한컨트롤들을배치하고관리하는윈도우

More information

Microsoft PowerPoint _대화상자.ppt

Microsoft PowerPoint _대화상자.ppt 7 장. 대화상자 모달대화상자 (modal dialog box) DDX (Dialog Data Exchange) 모델리스대화상자 (modeless dialog box) 공통대화상자의사용 Paint3.dsw 순천향대학교정보기술공학부이상정 1 모달대화상자 (modal dialog box) 순천향대학교정보기술공학부이상정 2 대화상자의종류 모달대화상자 (modal

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의

More information

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

Microsoft PowerPoint - IP11.pptx

Microsoft PowerPoint - IP11.pptx 열한번째강의카메라 1/43 1/16 Review 2/43 2/16 평균값 중간값 Review 3/43 3/16 캐니에지추출 void cvcanny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size = 3); aperture_size = 3 aperture_size

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx Development of Fashion CAD System 9. Object Oriented Programming-3 Sungmin Kim SEOUL NATIONAL UNIVERSITY Introduction Topics Object Oriented Programming (OOP) 정의 복수의 pattern object 로 이루어지는 새로운 class Pattern

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 11 장상속 1. 상속의개념을이해한다. 2. 상속을이용하여자식클래스를작성할수있다. 3. 상속과접근지정자와의관계를이해한다. 4. 상속시생성자와소멸자가호출되는순서를이해한다. 이번장에서만들어볼프로그램 class Circle { int x, y; int radius;... class Rect { int x, y; int width, height;... 중복 상속의개요

More information