강의노트
## 교수 및 조교 연락처
- 안기영 (컴퓨터공학과 조교수) kya@hnu.kr
- 송민혁 (석사과정 장학조교) smh7047@naver.com
- 잔디 업무용 메신저
## 수업에 사용할 책
- C 기초 플러스, 6판
(원서: C Primer Plus, 6th edition)
- C++ 기초 플러스, 6판
(원서: C++ Primer Plus, 6th edition)
## 평가: 과제 25%, 중간 30%, 기말 45%
과제는 다른 사람과 토의하거나 다른 사람이 작성한 프로그램이나 책이나 인터넷 자료 등 어떤 것을 참고하여도 상관없다.
하지만 자신이 이해한 것, 정확히 말하면 중간고사나 기말고사 때 관련 문제가 나왔을 때 해결할 수 있는 수준으로 이해한 것을 제출하는 것을 추천한다.
중간고사와 기말고사에서는 과제와 관련된 문제들을 출제하여 이를 해결하지 못했을 경우 과제의 점수에 비례해서 마이너스 점수로 감점이 이루어진다.
예를 들면 첫번째 과제가 for 문을 이용하여 작성하는 것인데 제대로 이해하지 않고 제출기한이 다가와 급해서 다른 자료를 참고하여 제출해서 5점 만점에 5점을 다 맞았다고 하자.
그 이후에 열심히 공부해서 for 문을 이해하여 중간고사에 나온 for 문을 작성하는 문제가 4문제 나왔는데 그 4문제를 모두 해결했다면 상관없다.
하나 정도는 실수할 수 있으므로 예를 들면 1개 틀리고 3개 정도 맞춘 것 까지는 그냥 틀린 한문제만 0점으로 처리한다.
하지만 중간고사때까지도 for 문을 제대로 이해하지 못하여 for 문이 나온 문제 4문제 중 2문제 이상 틀렸을 경우
그 문제에 해당하는 점수를 그냥 못받아서 0점이 아니라 -5점씩 감점된다. 즉 4문제 다 틀렸다면 -20점의 감점이 이루어진다.
즉 총점이 음수가 나오게 되어 이해하지도 못하고 제출했으면서 중간고사때까지도 이해를 못했으므로 부당하게 과제 점수를 받아간 것에 반칙적인 행위에 대해서는 시험에서 확실한 페널티 점수를 부과함으로써 제대로 공부하여 이해한 사람이나 아니면 제대로 이해하지 못했기 때문에 정직하게 불완전한 과제를 제출하여 점수를 제대로 받지 못한 사람과 형평성을 맞추는 방식으로 중간 기말 채점에 과제 관련 문제의 요소를 재확인하는 방법으로 채점이 이루어질 것이다.
과제는 세부 지시사항을 정확하게 따라야 한다. 왜냐하면 사람이 직접 수동으로 확인하는 것이 아니라 자동 스크립트를 돌려서 10개 혹은 100개의 입력에 맞는 10개 혹은 100개의 출력이 정확히 나오는지 기계적으로 확인하기 때문이다. 원리를 이해하고 있더라도 입출력 양식을 지키지 못해 스크립트를 돌렸을 때 정확하지 않은 것은 점수를 받지 못한다. 어떤 이유로든 컴파일이 되지 않으면 (파일/폴더 이름을 지시한 대로 하지 않았거나 문법오류가 나거나 실수로 저장소에 최종 버전을 commit하여 push 하지 않았거나 프로젝트 파일을 추가하지 않았거나 등등) 점수를 전혀 받지 못한다 한다. 또한 빌드에 필요한 최소한의 소스 파일과 프로젝트 파일만 저장소에 등록하는 것이 아니라 부가적을 생성되는 목적코드나 링크 결과 바이너리 등을 등록하면 과제의 감점요인이 될 수 있다.
이 과목은 프로그래밍 실습을 중심으로 한 과목이므로 중간 기말 모두 컴퓨터로 프로그램을 직접 작성하여 제출하는 방식으로 이루어진다. 중간고사는 어떤 프로그램을 작성하라는 과제의 원리를 재확인하는 문제 및 과제를 응용해서 좀더 어려운 응용을 하는 문제 이렇게 대략 두 가지 유형의 난이도로 제출하려는 대략적인 계획을 가지고 있다. 기말고사는 중간고사와 비슷하게 갈수도 있고 아니면 여건이 허락한다면 프로그램끼리 대전을 시키는 형식으로 무한경쟁을 통한 방법도 고려하고는 있으니 올해는 아직 구체적인 아이디어가 없어 그렇게까지 못하고 그냥 중간고사와 비슷한 형식으로 갈 가능성이 더 크다.
## 실습에 사용할 SW
- GitKraken
- 분산 버전 관리 시스템(DVCS) 중에 가장 많이 쓰는 git을 사용하기 편하게 GUI로 제공하는 멀티플랫폼(리눅스, 맥, 윈도우즈 셋 다 지원)툴이다.
- 프로그래밍 과제 등은 종이나 이메일 등으로 절대로 받지 않으며 학생 개개인의 git 저장소에 올려놓은 것을 당겨와서 평가하게 되므로 git을 사용하지 못하면 F학점 예약이 확실하니 수강신청 후부터 학기전에 미리 예습하거나 늦어도 학기 초반부 수강 변경/취소기간 안에 git의 기본적인 사용법을 숙달하지 못하는 일이 발생할 경우 즉시 수강을 취소하는 것을 추천.
- 이미 다른 방식으로 git을 사용하는 데 익숙한 사람은 굳이 이 툴을 쓰지 않고 자신이 편한 방식으로 git 저장소를 관리해도 무방하다.
- 첫 강의/실습시간에 어떤 git 온라인 저장소 서비스를 사용해서 진행할지 공지할 예정이다.
- Code::Blocks
- 멀티플랫폼(리눅스, 맥, 윈도우즈 셋 다 지원) 통합 개발 환경(IDE)으로 기본적으로 C/C++를 포함한 여러 가지 언어 및 프로그래밍 환경을 지원한다.
- 윈도우즈 사용자의 경우 Code::Blocks 홈페이지의 Downloads / Binary 에서
codeblocks-17.12mingw-setup.exe
설치
- 에디터 글꼴 설정은 네이버의 D2Coding 글꼴을 추천
- 이미 리눅스나 맥에서 C/C++ 컴파일러를 다른 방식으로 사용하는 것에 익숙한 사람은 굳이 이 통합개발환경을 사용할 필요는 없다.
- 혹시 윈도우즈에서 Visual C/C++ 개발환경에 익숙한 사람의 경우 본인이 정말로 강력하게 원한다면 그것을 사용해서 실습해도 되지만 Code::Blocks 패키지에 포함된 버전의 gcc와 호환되지 않는 C/C++ 코드를 제출할 경우 프로그래밍 관련 점수를 받지 못하게 될 큰 위험부담을 본인이 감수하고 그로 인한 불이익에 대해서는 스스로가 책임질 각오를 단단히 한 경우에만 Visual C/C++을 사용해서 이 과목 실습을 진행하는 것도 불가능하지는 않겠지만 결코 추천하지 않는다.
- 잔디 업무용 메신저