알고리즘 설계와 분석 프로그래밍 숙제 1 공지 및 피드백 게시판입니다.

 

프로그래밍 숙제 1을 진행하는 데 필요한 내용이나 수강생들이 메일을 통해 질문한 것에 대한 대답을 이 게시판에 업데이트 할것입니다.

 

자주 확인하셔야 불이익을 받지 않을 수 있습니다.

 

------------------- 제출 양식 ---------------------

 - 이메일 제목 : HW2_S******** ( 학번 뒤 8자리 )

 - 파일 압축명 : HW2_S******** ( 학번 뒤 8자리 )


Late 5일까지 받겠습니다. // 11월 4일 수정사항 ( 이것 뿐입니다. )

1일당 10% 감점. 과제 PDF에 명시된 시간 기준(오후 8시)입니다. 즉, 토요일 저녁 8시 까지 받겠습니다.

 

어떤 이유에서든 기간을 벗어난 제출은 받지 않습니다.

질문 Email : chlrbwls95@sogang.ac.kr

제출 Email : 2018algorithm@naver.com

------------------------------------------------------질문 정리----------------------------------------------------------

 

 * 모두에게 해당 될만한 것들만 작성하겠습니다. 도움이 될 수 있는게 있으니 다른 학생들의 질문도 읽어주시면 좋습니다.

 

◎ 제출 명칭 

보고서, 제출 파일, 메일 제목 등 모두 HW2로 통일하겠습니다. HW1으로 작성하지 말아주세요.

 

◎ parameter 형태

바꾸시면 안됩니다. 반드시 주어진 형식대로 작성해주세요.

 

◎ 제출 형식

디렉토리 6개에 .c파일을 넣는 형태로 제출해주시면 됩니다.

 

◎ unsigned int 관련

PDF에 보시면 unsigned int 데이터를 받는데, 함수 parameter는 int형입니다.

신경쓰지 마시고 모두 int로 해주시면 되겠습니다. int형 범위인 (+/-)2^31를 벗어나지 않도록 데이터를 설정해주시면 됩니다.

 

◎ Random Data 관련

드린 코드는 Entirely random 코드입니다. 이외의 것들은 적절히 수정하시고 만드셔야합니다.

Input Data는 제출하실 필요 없습니다. 저희가 만든걸로 테스트할것이기 때문에

#define FILENAME "inputdata.bin"

의 형식으로 매크로 내용만 바꾸면 입력파일을 선택할 수 있도록 구현해주시기만 하면 되겠습니다.

 

◎ Recursion함수 return형식 관련

PDF에 보시면 Insertion, Selection Sort가 int형을 return해줍니다. 이 return을 보고 정렬이 제대로 되었는지를 판별할 수 있습니다.

Recursion함수에 대해서도 이런 작업을 해주셔야 되는데, 함수 밖에서 진행하시는 경우도 허용하도록 하겠습니다.

type을 void로 바꾸시고 정렬을 끝마치신 뒤에 Main에서 Validation 작업을 해주시면 되겠습니다.

굳이 이렇게 바꾸는 이유는 시간 측정을 할 때, Validation작업까지 넣게되는 일이 없도록 하기 위함입니다.

--------------------------------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------------------------------------------------

10월 31일 Update

 * 아래 스택 예약 크기에서 숫자를 늘리는 것 뿐만 아니라 힙 예약 크기도 늘려주세요.

 * 스택 예약 크기는 정적 할당의 크기, 힙 예약 크기는 동적 할당의 크기라고 생각하시면 됩니다.

 

 * 제출은 반드시 코드만 디렉토리에 한개씩 넣어서 제출해 주세요.

제출 디렉토리에 6개의 디렉토리가 있고 각 디렉토리에 .c 파일이 하나씩 들어있으면 됩니다. 각 .c파일의 구성은 보내드린 샘플 코드를 참고하세요. ( 메일로 보내드렸습니다. )

 * 입력데이터는 삽입해주실 필요 없습니다.

--------------------------------------------------------------------------------------------------------------------------

 

 

------------------- Release모드 및 Stack 크기 조절, 시간 측정 코드 ( 프로젝트는 메일 발송 ) ---------------------

 

<<Debug모드 및 Release모드 변경>>

 

3.PNG

상단 상태바에서 Release모드로 변경 및 x86 및 x64 변경이 가능합니다. 

제출하실 때는 반드시 Release모드로 변경해주셔야 합니다.

보고서도 Release모드 기준에서 측정해주시기 바랍니다.

 

<< Stack 크기 변경 >>

 

 

 

프로젝트 속성으로 들어갑니다.

 

0.PNG

(프로젝트를 우클릭 하시거나, )

 

1.PNG

상단 바에서 프로젝트를 클릭하신 뒤 속성을 들어가셔도 됩니다.

 

2.PNG

 

※ 구성은 모든 구성으로 하시면 Debug 모드 및 Relese모드가 모두 설정이 됩니다.

※ 플랫폼은 x86혹은 x64인데, 이는 한번에 설정하실 수 없습니다.

※ 따라서 모든 구성으로 하신 뒤 x86에 대해서 설정해 주시거나 x64로 설정해 주신 뒤, 해당 구성과 플랫폼에 맞게 변경해주시고 ( 변경 방법은 가장 상단에 있습니다. ) 코딩을 해주시면 되겠습니다.

※ 설정한 환경에서 코드도 작성하시고 빌드 및 실행을 해주셔야 합니다.

 

링커 -> 시스템 -> 스택 예약 크기를 늘려줍니다.

 

default가 1MB ( 1024 * 1024 Byte ) 이기 때문에 4 * 256 * 1024 = 4 * 262144, 262144개의 float형 혹은 int형 만큼의 데이터를 잡는게 한계입니다.

 

그래서 이미지에선 2* 4* (32* 1024* 1024) = 268435456 만큼의 크기를 잡아 stack영역의 크기를 늘려줍니다.

 

4.PNG

 

위 코드는 Arr라는 배열에 2^25만큼의 float 영역을 할당해, 적당한 부하만큼 일을 시킨 뒤 시간을 측정하는 코드입니다.

 

N을 보시면 32*1024*1024라는 것을 알 수 있고, 전체 Stack영역이 2 * 4 * 32 * 1024 * 1024 이기 때문에

(float형)4 * 32 * 1024 * 1024 보다 커서 문제없이 작동합니다.

 

5.PNG

 

하지만 데이터를 2배 늘려주면, Arr 뿐만 아니라 다른 데이터들도 있기 때문에 Stack영역을 벗어나게 됩니다.

따라서 비정상적인 종료가 발생합니다.

 

6.PNG

 

이전 크기의 2배만큼의 크기로 Stack영역을 설정해준 뒤, 코드를 수행시키면

 

7.PNG

 

정상적으로 작동함을 알 수 있습니다.

 

<< 시간 코드 >> 

 

보내드리는 프로젝트 혹은 상단에 작성된 코드의 용법대로 사용하시면 됩니다.

 

#include<Windows.h> 

 

__int64 start, freq, end;

 

float resultTime;

 

CHECK_TIME_START;

 

CHECK_TIME_END(resultTime);

 

만 적당히 사용해주시면 됩니다.

 

매크로는 그대로 복사붙여넣기 하신 뒤 사용하시기 바랍니다.

 

 

 

 

--------------------------------------------------------------------------------------------------------------------------

 - 2018 / 10 / 18 수정

 - 2018 / 10 / 25 수정

 - 2018 / 11 / 01 수정

 

댓글 0

번호 제목 글쓴이 날짜 조회 수
공지 알고리즘 설계와 분석 - 프로그래밍 숙제 3 grmanet 2018.12.11 1729
공지 알고리즘 설계와 분석 - 기말고사 공지 grmanet 2018.12.04 1494
공지 알고리즘 설계와 분석 - 프로그래밍 숙제 2 [ 11/27 수정 ] grmanet 2018.11.19 2048
공지 질문 관련 grmanet 2018.10.18 1508
» 알고리즘 설계와 분석 - 프로그래밍 숙제 1 ( 11 / 4 수정, late 기간 변경 ) grmanet 2018.10.18 2371
공지 알고리즘 설계와 분석 - 중간고사 공지 grmanet 2018.10.11 1608
공지 출결 현황 grmanet 2018.09.18 4041
공지 2018 2학기 알고리즘설계와분석 게시판입니다. grmanet 2018.09.18 1712
56 Quick Sort P 질문입니다. [1] file HELLOWORLD 2018.11.02 305
55 sort 범위관련 하나 더 질문드립니다 ㅠ [1] 0000 2018.11.02 332
54 프로젝트 제출물 문의 [1] null 2018.11.02 301
53 범위 관련 질문드립니다 [1] 알고리즘 2018.11.03 308
52 dataCreate 질문입니다 [4] 아시아의찬란한 등불 김인직 2018.11.03 334
51 데이터 성질에 관한 질문입니다 [1] 조국통일의 자양분 김인직 2018.11.03 319
50 과제2 질문입니다 [3] 갈매기 2018.11.04 280
49 프로젝트 질문입니다. [1] 아아아아 2018.11.04 262
48 gcc 컴파일러 질문드립니다. [1] macOS 2018.11.04 330
47 과제2 질문입니다. [1] 어ㅏ아아아 2018.11.04 287
46 데이터 개수 관련 질문드립니다 [2] 흐엉어 2018.11.04 270
45 배열 길이 질문드립니다(input data) [2] 1233 2018.11.04 291
44 왜 Arr 배열은 float 형으로 지정되어 있는 것인가요? [1] ㄱㄱㄱㄱ 2018.11.04 423
43 few swap input 질문드립니다 [1] ㄴㄻㄴ 2018.11.04 330
42 프로그래밍 과제 질문입니다! [1] ㅇㅇㄴㅇㄴㅇ 2018.11.05 593
41 Quick 시리즈 질문입니다 [1] 아아이? 2018.11.05 309
40 시간 측정 질문입니다 [1] 12313 2018.11.05 241
39 보고서 파일 형식 관련 질문입니다. [1] ㅁㄴㅇㄹ 2018.11.05 409
38 조교님 매크로 관련 질문입니다. [1] 2018.11.05 277
37 Dev c [1] Abc 2018.11.05 260