국민대학교 컴퓨터프로그래밍
TRANSCRIPT
자동차
• 자동차는시키는대로간다.
– 자동차자체는그냥껍데기일뿐
– 자동차는운전자가원하는곳으로간다.
– ‘자동’차이지만, 모든것이자동으로되지는않는다.• 밟으면엔진이돌고, 핸들을돌리면방향이바뀐다.
– 더구나, 자동차는누군가가만들었다.
– 정말처음부터자동으로된것은아무것도없다.• 그누군가가설계하고,
• 또누군가가 Every Detail을다정했다.
컴퓨터
• 컴퓨터는시키는것만한다.
– 컴퓨터자체는그냥껍데기일뿐
– 컴퓨터는프로그래머가시킨일만한다.
– ‘컴퓨터’ 이지만, 모든것을알아서하지는않는다.• 소프트웨어를넣고,사용자가지정한기능이수행된다.
– 더구나, 컴퓨터는누군가가만들었다.
– 정말처음부터자동으로된것은아무것도없다.• 그누군가가설계하고,
• 또누군가가 Every Detail을다정했다.
컴퓨터가하는일은문제해결
• 문제를모르면답도없다. 문제란두종류인데,
– 이전에있던것들의생산성을높이는것들
– 전혀새로운가치를사람에게제공하는것들이다
• 문제는사람이정의한다.
– 그리고, 대부분의문제는복잡하다.• 그복잡함의근원에는다양한상황과데이터가있다.
– 그래서, 완벽하고간단한정답은보통없으며
– 상황에따라, 데이터에따라여러가지답이있다.
– 어떤경우에도, 그답도사람이만들고
– 최종적으로는소프트웨어라는도구로구현된다.
문제해결도구, 소프트웨어
• 복잡한문제를해결하는절차
1. 문제를잘이해하려고노력한다.• 문제가존재하는상황과연관된데이터를잘살펴본다.
2. 큰문제를조금은덜복잡한작은문제들로나눈다.• 조각낸작은문제들의답을예측하고,
• 그답들을순서에맞추어잘연결하여,
• 처음큰문제의답이만들어지는지검토한다.
• 필요하면작은문제를더작은문제들로다시나눈다.
3. 작은문제에대한답을구하는방법을찾는다• 어떤때는간단한논리와산수로
• 또어떤때는복잡한논리와고도의수학이필요하다.
4. 작은문제의답들을엮어큰문제의답을얻는다.
문제의예: 자동차, 1 단계
• 큰문제
– 승객을목적지에안전하게도달하게하는것
• 큰문제를해결하기위한작은문제들
1. 굴러가게해야한다.
2. 원하는방향으로가게해야한다.
3. 설수있어야한다.
4. 안전하고, 편하게위목적을달성해야한다.
문제의예: 자동차, 2 단계
• 작은문제를더작게
1. 굴러가게해야한다.• 엔진이필요하다.
• 엔진의동력을바퀴에전달해야한다.
2. 원하는방향으로가게해야한다.• 핸들이필요하다. 바퀴를움직여야한다.
3. 설수있어야한다.• 브레이크페달이필요하다. 움직이는바퀴를세워야한다
4. 편하게위목적을달성해야한다.• 깜박이가, 전조등이, 미등이, 에어백이,
• 에어컨이, 네비게이션이, 블랙박스가필요하다.
• …
문제의예: 자동차, 3단계
• 더작은문제를한층더작게
1. 굴러가게해야한다.• 엔진이필요하다.
A. 연료는? (휘발류? 경유? 전기?)
• 연료통 (배터리) 크기?
• 연료통 (배터리) 위치?
• 남은량측정?
• 화재방지방법?
B. 엔진출력은?
C. …
• 엔진의동력을바퀴에전달해야한다.
• …
여러가지답
상황을고려하여한가지를선택하거나두가지를섞어쓸수있다.
선택은다른문제를만든다(또는문제를바꾼다)
가끔은문제가작아질수록전문성이더요구된다.
소프트웨어 / 프로그램 / 언어
• 컴퓨터소프트웨어는
컴퓨터프로그램들을모아놓은것
• 컴퓨터프로그램은
프로그래밍언어의명령들을모아놓은것
• 프로그래밍언어는
문제를해결하는방법(논리와수학)을
절차적/구조적으로표현할수있게해주는것
큰문제해결도구
작은문제해결
문제해결방법표현
소프트웨어 / 프로그램 / 언어
• 컴퓨터소프트웨어는
컴퓨터프로그램들을모아놓은것
• 컴퓨터프로그램은
프로그래밍언어의명령들을모아놓은것
• 프로그래밍언어는
문제를해결하는방법(논리와수학)을
절차적/구조적으로표현할수있게해주는것
큰문제해결도구
작은문제해결
문제해결방법표현
아직까지는사람만가능
코딩: 문제의근원인데이터의표현
• 데이터의형태–숫자 (정수, 실수, ...), 문자, 문자열
• 예, 0, -6, 3.1415, ‘A’, “국민대학교”
• 데이터의조직화–의미있는한덩어리의데이터
• 예, (이름, 생년월일, 전화번호)
• 데이터사이의관계–데이터또는조직화된데이터의집합또는순서
• 예, 오늘의검색어순위
• 예, 금주의음악챠트
코딩: 문제해결방법의표현
• 순차적접근 (Procedural)–이것하고, 다음에저것하고, 그다음은 …
• 산수와논리 (Arithmetic & Logic)–뭐하고뭐를더하고, 곱하고, …. ( +, -, *, /, …)
–참과거짓의관계 ( AND, OR, NOT )
• 조건과분기 (Conditional)– if (조건) then 이런일 else 저런일
• 반복 (Iterative)–여기서부터저기까지이런일을반복
프로그래밍언어도많다
• 문제에따라, 컴퓨터에따라
http://3.bp.blogspot.com/-QZ4yib_WQFk/VOej26zs_NI/AAAAAAAAAXY/DF7R-KmYzk4/s1600/prog-languages.png
1. Java2. C3. C++4. Objective-C5. C#6. JavaScript7. PHP8. Python9. Visual Basic
2015-04 TIOBE Index
언어의첫걸음: Hello World!
• Java 버전
// Hello World in Java
class HelloWorld {
static public void main(String args[]) {
System.out.println("Hello World!”);
}
}
언어의첫걸음: Hello World!
• C 버전
/* Hello World in C, Ansi-style */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World!");
return EXIT_SUCCESS;
}
Why Scratch?
• Scratch는프로그래밍언어의일종
–쉽고, 재미있고,
–무료
–웹으로되고, PC, Mac에서도되고
• 아이폰, 아이패드에서는아직안되고.
–문법보다는의미에더신경쓸수있게하고
– “~~일이발생하면 ~~를해요” 스타일이가능
• 어떤이벤트에대하여반응
OFF
ON
절차적으로정리하면
만일 스위치가 ON 위치이면불이켜지고,
아니면불이꺼진다.
프로그램으로짜면
if (switch == ON) then
light = ON
else
light = OFF
말로하면
스위치를누르면불이켜진다.
프로그램의예
* 모든언어마다문법은조금씩다름
예제: Man Trapped
Woman_Angry = TRUE;
미안: Man_Says(“미안해”);
Woman_Says(“뭐가미안해?”);
뭐를: if Man_Knows(“뭐”) then
Woman_Says( “알면서그래?”);
else
Woman_Says(“모르면서그래?”);
if (동전=앞면) then
goto 미안;
Say(“잘못했어”);
Woman_Says ( “ 뭘잘못했는데?”);
goto 뭐를;
예제: Man Trapped
• 우선, .. 이문제는끝나지않는다.
• 문제를소프트웨어로해결하기위한단계
1. 시작단계
2. ‘미안해’ 하고, 이유추궁당하고,아무대답이나하는단계
3. 다시추궁당하는단계
4. ‘잘못했어‘ 하고, 이유추궁당하고,아무대답이나하는단계
Slidehttp://sw4all.tistory.com
Scratch File:https://scratch.mit.edu/projects/60234316/