28
소프트웨어 & 프로그래밍 이민석 컴퓨터공학과, 국민대학교

국민대학교 컴퓨터프로그래밍

Embed Size (px)

Citation preview

소프트웨어 & 프로그래밍

이민석

컴퓨터공학과,국민대학교

자동차 vs 컴퓨터

자동차

• 자동차는시키는대로간다.

– 자동차자체는그냥껍데기일뿐

– 자동차는운전자가원하는곳으로간다.

– ‘자동’차이지만, 모든것이자동으로되지는않는다.• 밟으면엔진이돌고, 핸들을돌리면방향이바뀐다.

– 더구나, 자동차는누군가가만들었다.

– 정말처음부터자동으로된것은아무것도없다.• 그누군가가설계하고,

• 또누군가가 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;

}

언어의첫걸음: Hello World!

• Scratch 버전

• Python 버전

# Hello World in Python 3

print("Hello World!")

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. ‘잘못했어‘ 하고, 이유추궁당하고,아무대답이나하는단계

프로그램시작

화났음표시

2 단계 (미안해)진입

1. 시작단계

2. 미안해단계

3 단계 (대답하고추궁당하기) 진입

3. 다시추궁단계

2 단계 (미안해) 진입

4 단계 (잘못했어) 진입

y (Yes) 를눌렀으면

이니면 (n 을눌렀으면)

알면서그래?

모르면서그래?

아무거나말하기 (컴퓨터선택)

4. 잘못했어단계

3 단계 (대답하고추궁당하기) 진입

Q & [email protected]

Slidehttp://sw4all.tistory.com

Scratch File:https://scratch.mit.edu/projects/60234316/