본문 바로가기

Computer Science/Computational thinking

(7)
컴퓨팅 사고 | 코드의 디자인 ✔ 학습목표 CS50 IDE에서 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있다. 규모가 큰 프로그램을 작성할 때에는 보통 여럿이 작업을 진행한다. 이때는 코드의 내용뿐만 아니라 형식도 신경 써야 한다. 같은 내용이라 하더라도 어떻게 표현하느냐에 따라 코드를 이해하고 수정하는 속도가 달라진다. CS50 IDE에서는 check50과 style50이라는 프로그램을 사용할 수 있다. check50 check50은 코드의 정확도를 확인하는 자동 검사 프로그램이다. hello.c라는 프로그램을 검사하고 싶다면 명령창에 'check50 cs50/preblems/hello'를 입력하면 된다. 간단한 깃허브 계정 인증과정을 거치면 검사 결과(피드백)가 나온다. style50 style50은 코드가 심미적으로 ..
컴퓨팅 사고 | 디버깅 ✔ 학습목표 디버깅하는 여러 방법을 설명할 수 있다. 버그와 디버깅 버그(bug)는 코드에 들어있는 오류를 말한다. 코드에 있는 버그를 식별하고 고치는 과정이 디버깅(debugging)이다. 프로그래머는 디버거라 불리는 프로그램을 사용해서 디버깅을 한다. 디버깅의 기본 프로그램은 일반적으로 인간보다 훨씬 빠르게 연산을 수행하기 때문에, 프로그램을 실행시켜보는 것만으로는 무엇이 잘못됐는지 찾기 어렵다. 그래서 디버거를 사용한다. 디버거는 프로그램을 특정 행에서 멈출 수 있게 해 주기 때문에 버그를 찾는데 도움이 된다(이때 프로그램이 멈추는 특정 지점을 중지점이라고 한다). 디버거를 사용해 프로그래머는 프로그램을 한 번에 한 행씩 실행할 수 있고, 프로그램이 내리는 모든 결정을 단계별로 따라갈 수 있다. 방..
컴퓨팅 사고 | 컴파일링 ✔ 학습목표 컴파일링의 네 단계를 설명할 수 있다. 컴파일링 지금까지는 아무것도 모른 채 코드를 컴파일했다면, 이제부터는 연습과 응용을 통해 동작 원리를 이해할 수 있을 것이다. C 코드로 작성된 쉬운 예시(hello.c)를 보자. #include int main(void) { printf("hello, world\n"); } "hello, world"를 출력하는 프로그램이다. 우선 main 이라는 함수가 있다. 이는 프로그램의 시작점으로 실행 버튼을 클릭하는 것과 같다. main 함수 안의 printf는 출력을 담당하는 함수이다. 이 함수를 사용하기 위해 stdio.h 가 필요하다. stdio.h는 C언어로 작성된 헤더 파일로, printf 함수의 프로토 타입을 담고 있다. C언어 강의에서 우리는 cl..
컴퓨팅 사고 | 하드웨어의 한계 ✔ 학습목표 메모리 용량이 프로그램의 구동에 미치는 영향을 설명할 수 있다. 메모리 컴퓨터는 RAM(랜덤 엑세스 메모리)라는 물리적 저장장치를 포함하고 있다. 우리가 작성한 프로그램은 구동 중에 RAM에 저장되는데, 이는 유한한 크기의 비트만 저장할 수 있기 때문에 부정확한 결과를 내기도 한다. #include #include int main(void) { // 사용자에게 x 값 받기 float x = get_float("x: "); // 사용자에게 y 값 받기 float y = get_float("y: "); // 나눗셈 후 출력 printf("x / y = %.50f\n", x / y); } 그중 하나가 부동 소수점의 부정확성이다. 예시 프로그램을 보자. 이는 사용자에게 실수형 데이터 타입(float..
컴퓨팅 사고 | 알고리즘 ✔ 학습목표 1. 우리가 일상생활에서 하는 일들을 컴퓨터가 이해할 수 있는 알고리즘으로 표현할 수 있다. 2. 효율적인 알고리즘에 대해 설명할 수 있다. 알고리즘 앞서 숫자, 글자, 색깔 등을 컴퓨터가 이해할 수 있는 2진법으로 표현하는 것은 입력(input)에 해당한다. 컴퓨팅은 입력을 받아 처리한 후 출력하는 과정이다. 여기서 처리 과정에 해당하는 것이 알고리즘(algorithm)이다. 알고리즘은 입력(input)에서 받은 자료를 출력(output) 형태로 만든다. 즉, 알고리즘은 출력값을 나타내기 위해 어떤 명령이 수행되어야 하는지에 대한 규칙들의 순서적 나열이다. 이때 정확성은 물론 효율성도 중요하다. 예를 들어 전화번호부에서 친구 Mike Smith를 찾는 경우를 생각해보자. 1) 첫 페이지를 ..
컴퓨팅 사고 | 정보의 표현 ✔ 학습목표 컴퓨터가 문자, 사진, 영상, 음악 등 다양한 정보를 처리하는 방식을 설명할 수 있다. ASCII ASCII(아스키코드/American Standard Code for Information Interchange)는 문자를 숫자로 표현할 수 있도록 정해진 표준 중 하나이다. 예를 들어 알파벳 F는 10진수 기준으로 70이다. 이를 2진법으로 표현하면 1000110으로 표현할 수 있다. Unicode Unicode(유니코드)는 ASCII의 상위개념으로, 더 많은 비트를 사용하여 더 다양한 문자를 표현하도록 지원한다. 유니코드를 사용하면 😂(기쁨의 눈물)과 같은 이모티콘까지 표현할 수 있다. RGB 문자와 같이 그림의 경우에도 숫자로 표현할 수 있다. 그림은 수많은 작은 점으로 구성된다. 이를 픽..
컴퓨팅 사고 | 컴퓨터 과학과 2진법 ✔ 학습목표 컴퓨터 과학이 무엇인지 정의하고, 컴퓨터가 정보를 표현하는 방법에 대해 설명할 수 있다. 컴퓨터과학 컴퓨터과학은 문제 해결에 대한 학문이다. 문제 해결은 입력(input)을 전달받아 출력(output)을 만들어내는 과정이다. 그 중간에 있는 과정이 컴퓨터 과학이다. 입력과 출력을 표현하기 위해서는 모두가 동의하는 약속, 즉 표준이 필요하다. 2진법 일상에서 사용하는 0,1,2,3,4,5,6,7,8,9 총 10개의 기호로 표현하는 것이 10진법이다. 하지만 컴퓨터에서는 오직 0과 1로만 데이터를 표현한다. 이것을 2진법이라 한다. 10진법에서는 각 자릿수가 10의 거듭제곱을 의미하지만, 2진법에서는 2의 거듭제곱을 의미한다(예) 10진법의 3을 2진법으로 표현하면 011이 된다). 컴퓨터에는 ..