week 2
컴퓨팅 : 컴퓨터가 수행 주체인 계산
프로그래밍 언어 (사람의 언어처럼 문법과 의미론이 있음)
○ 문법
-어휘를 명시
-단어 배치 규정을 정의
○ 의미론
-단어 조합이 연산인지 명령인지 판단
-실행 결과를 설명
○ 사람도 결과를 예측할 수 있음
정수 1부터 100까지 더해서 화면에 출력하는 계산
ex) C 언어
#include <stdio.h>
main() {
int sum = 0, n=1;
while (n<=100) {
sum = sum + n;
n = n + 1;
}
printf("%d\n", sum);
}
ex) Python 언어
sum = 0
n = 1
while (n<=100):
sum = sum + n
n = n + 1
print(sum)
프로그래밍 = 글짓기
● 프로그램 실행 결과
- 실행이 성공적으로 끝난다
- 계산 결과 = 문제답
- 계산결과 ≠ 문제
● 실행이 비정상적으로 끝난다
- 예 : 0으로 나누는 연산
● 실행이 끝나지 않는
프로그램에 있는 오류를 찾아 고치는 작업 = 디버깅
프로그래밍언어들은 각기 다른 문법과 의미론을 가진다
컴퓨팅 사고
계산 주체로서 컴퓨터의 장점
- 계산 대상이 크다
1기가 바이트 메모리 => 알바벳 1024^3 = 1,073,741,824 글자 기억
조선왕조실록 10배 이상의 분량
-계산 수행 속도가 빠르다
1기가 헤르츠 컴퓨터에서 덧셈
초당 1024^3 =1,073,741,824번 이상 수행
빛이 1미터 갈 때 1,073,741,824/299,792,458 > 3번 이상 수행
-계산 과정을 반복할 수 있다
-> 똑같은 과정을 반복함으로써 큰분량을 계산 대상을 빠르게 처리
ex) 피보나치 수열
○정의
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 (n>=2)
=> 수학으로 풀기
Fn = 1/✔5 {[(1+ ✔5)/2]^5 - [(1- ✔5)/2]^5}
풀기
=>컴퓨팅으로 풀기
F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | ... |
1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | ... |
컴퓨팅 사고(Computational Thinking)
○컴퓨팅으로 문제를 풀고자 할 때 적합한 생각의 틀
- 기계적 수행 고려
- 체계적 계산 설계
○프로그래밍보다 우선하는 개념
계산 대상 바라보기
○ 알맹이 요약하기 필요
-다음 유도하기 : 작은 것으로부터 더 큰 것을 간단하게 이끌어 내기
-다음 유도하기 조건
○ 작은 것의 꼴 = 큰 것의 꼴
ex)
reason : 계산 자료가 대개 일정한 규칙에 따라 생성되기 때문
-다음 유도하기 이후 문제 풀기
○ 두 가지 경우로 나누어 접근
1. 최초 경우
ex) 0
2. 작은 것으로부터 더 큰 것을 이끌어 내는 경우
ex) n-1 + 1 = n
퀴즈
계산 주체로서 컴퓨터의 장점
처리할 수 있는 계산 대상이 크다
계산 수행 속도가 빠르다
계산 과정을 반복할 수 있다
'직관적인 계산이 가능하다' =>사람의 경우 적용됨
컴퓨팅사고
기계적 수행을 고려해야함
계산 대상, 계산 자료, 계산 과정을 컴퓨터 눈으로 바라보아야한다
프로그래밍보다 우선하는 개념이다
'사람이 계산하는 것과 유사한 생각의 틀을 요구한다'=>사람의 직관적인 계산과는 다름
다음유도하기
작은 것이 큰 것과 같은 꼴을 가질 때 적용 가능하다
작은 것으로 더 큰 것을 간단하게 이끌어 내는 방법이다
다음 유도하기로 계산자료를 바라보는 이유는 계산 자료가 대개 일정한 규칙에 따라 생성되기 때문이다
문제를 풀 때 최초 경우, 작은 것으로 더 큰 것을 이끌어 내는 경우로 나누어 접근한다
'자연수 0부터 n까지 더하는 문제는 n=0일 때와, n=n-1 + 1일 때로 나누어 생각할 수 있다'