이 페이지의 목차
순서도와 의사 코드로 표현하기
학습 목표
- 순서도 기호의 의미를 알고 알고리즘을 순서도로 표현한다.
- 같은 알고리즘을 의사 코드로 옮겨 적는다.
관련 성취기준
- 프그01-03
주어진 문제를 해결하기 위한 알고리즘의 개념을 알고, 순서도 또는 의사 코드 등을 이용하여 문제를 해결하는 알고리즘을 작성할 수 있다.
생각 열기 — 말로만 적은 절차
6차시에서 다듬은 절차를 말로 적으면 이런 모양이 된다.
값을 하나 받는다. 그 값이 60 이상이면 합격이라고 알리고, 아니면 불합격이라고 알린다. 다만 값이 0보다 작거나 100보다 크면 잘못된 값이라고 알리고 처음으로 돌아가 다시 받는다.
순서도 — 절차를 그림으로 그린다
순서도(flowchart) — 정해진 기호와 화살표로 절차의 흐름을 나타낸 그림는 정해진 기호와 화살표로 절차를 그린 그림이다. 어디서 갈라지고 어디로 되돌아가는지 화살표가 그대로 보여 주므로, 글로 적을 때 생기는 애매함이 사라진다.
기호는 아무렇게나 그리지 않는다. 모양마다 정해진 뜻이 있다. 그래서 다른 사람이 그린 순서도도 읽을 수 있다.
카드를 누른 뒤, 넣을 통을 누른다. 통 안의 카드를 누르면 다시 나온다.
단자
입·출력
처리
판단
- 타원 — 절차가 시작되는 곳과 끝나는 곳을 나타낸다
- 직사각형 — 계산하거나 값을 저장한다
- 마름모 — 조건에 따라 길이 갈라진다. 나가는 화살표가 둘이다
갈라지는 흐름 — 두 수 중 큰 수 찾기
두 수를 받아 큰 것을 알려 주는 절차를 순서도로 그린 것이다. 마름모에서 길이 둘로 갈라지고, 다시 하나로 모여 끝난다.
두 값이 같을 때는 “아니오” 쪽으로 가서 큰수 ← b 가 된다. 두 값이 같으므로 답은 맞다. 판단의 조건을 정할 때는 같은 경우가 어느 쪽으로 가는지 늘 확인해야 한다. 5차시의 경계값 이야기가 여기에도 그대로 적용된다.
되돌아가는 흐름 — 1부터 n까지 더하기
반복은 화살표가 위로 되돌아가는 모양으로 나타난다. 되돌아가기 전에 반드시 판단을 지나야 한다. 판단을 지나지 않고 되돌아가면 끝나지 않는 절차가 된다.
의사 코드 — 말과 코드 사이로 적는다
순서도는 흐름을 한눈에 보여 주지만 단점이 있다. 그리는 데 시간이 걸리고, 절차가 길어지면 종이 한 장에 들어가지 않는다. 그래서 실제 설계에서는 의사 코드(pseudocode) — 특정 언어의 문법에 얽매이지 않고 사람이 읽을 수 있게 적은 절차를 더 많이 쓴다.
의사 코드는 프로그래밍 언어처럼 줄 단위로 적지만 어느 언어의 문법도 따르지 않는다. 세미콜론이나 괄호 규칙을 지킬 필요가 없고 한국어로 적어도 된다. 대신 두 가지를 지킨다.
- 한 줄에 한 단계를 적는다.
- 들여쓰기로 구조를 나타낸다. 조건 안에 들어가는 줄, 반복 안에 들어가는 줄을 오른쪽으로 밀어 적는다.
앞의 두 순서도를 의사 코드로 옮기면 이렇게 된다.
[두 수 중 큰 수 찾기]
1 시작
2 a, b 를 입력받는다
3 만약 a > b 이면
4 큰수 ← a
5 아니면
6 큰수 ← b
7 큰수 를 출력한다
8 끝
[1부터 n까지 더하기]
1 시작
2 n 을 입력받는다
3 합계 ← 0
4 i ← 1
5 i ≤ n 인 동안 되풀이한다
6 합계 ← 합계 + i
7 i ← i + 1
8 합계 를 출력한다
9 끝
36번 줄과 57번 줄의 들여쓰기가 순서도의 갈라짐과 되돌아감을 대신한다. 6번 줄이 5번 줄보다 안쪽에 있으므로 “되풀이하는 동안 실행되는 부분”임을 알 수 있다. 이 들여쓰기는 2단원에서 배울 Python 문법과 거의 그대로 이어진다.
순서도와 의사 코드 — 언제 무엇을 쓰나
| 기준 | 순서도 | 의사 코드 |
|---|---|---|
| 나타내는 방식 | 기호와 화살표 그림 | 줄 단위 글과 들여쓰기 |
| 흐름 파악 | 한눈에 들어온다 — 특히 갈라짐과 되돌아감 | 들여쓰기를 읽어야 파악된다 |
| 긴 절차 | 종이를 넘어가 그리기 어렵다 | 길어져도 감당된다 |
| 고치기 | 다시 그려야 한다 | 한 줄만 고치면 된다 |
| 코드로 옮기기 | 한 번 더 옮겨 적어야 한다 | 거의 그대로 옮겨진다 |
| 잘 맞는 곳 | 흐름을 남에게 설명할 때, 처음 배울 때 | 실제 설계 문서, 혼자 정리할 때 |
되짚기
정해진 기호와 화살표로 흐름을 그리는 것이 1이고, 어느 언어의 문법도 따르지 않고 줄 단위로 적되 2로 구조를 나타내는 것이 의사 코드다. 되돌아가는 흐름을 그렸다면 무엇이 변해서 반복이 3 반드시 확인한다.
정답 보기
- 순서도
- 들여쓰기
- 끝나는지
활동
같은 알고리즘을 순서도와 의사 코드로 각각 적기
약 25분과제 1 — 두 수의 합
두 수를 입력받아 합을 출력하는 절차를 ⓐ 순서도와 ⓑ 의사 코드로 각각 만든다. 순서도에는 단자·입출력·처리 기호를 모두 쓴다.
과제 2 — 세 수 중 최댓값
세 수 a, b, c 를 입력받아 가장 큰 값을 출력하는 절차를 만든다. 판단 기호를 몇 개 써야 하는지 먼저 생각한다.
- 순서도로 그린다. 갈라진 길이 다시 모이는 지점을 반드시 표시한다.
- 같은 절차를 의사 코드로 옮긴다. 들여쓰기를 정확히 맞춘다.
- 세 값이 모두 같을 때 어느 길로 가는지 확인하고, 그때도 답이 맞는지 적는다.
과제 3 — 서로 확인하기
짝과 종이를 바꾼다. 짝의 의사 코드만 보고 다음 표를 채운다. 표의 값이 손으로 따라간 결과와 맞는지 확인한다.
| 입력 (a, b, c) | 내가 손으로 따라간 결과 | 기대한 결과 | 같은가 |
|---|---|---|---|
| 3, 9, 5 | 9 | ||
| 7, 7, 2 | 7 | ||
| 4, 4, 4 | 4 | ||
| -2, -8, -5 | -2 |
마지막 줄에 음수를 넣은 까닭을 생각해 보자. 최댓값을 0으로 두고 시작하는 절차는 이 줄에서 틀린 답을 낸다.
개념 확인 문제
보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.
순서도에서 마름모 기호가 뜻하는 것은?프그01-03
순서도에서 '합계 ← 합계 + i' 라고 적었을 때 이 표기의 뜻은?프그01-03
1부터 n까지 더하는 순서도에서 'i ← i + 1' 을 빠뜨리면 어떻게 되는가?프그01-03
의사 코드에서 들여쓰기가 하는 일은?프그01-03
긴 절차를 설계 문서로 남길 때 순서도보다 의사 코드가 유리한 까닭으로 알맞은 것은?프그01-03
더 알아보기
심화순서도 기호는 표준으로 정해져 있다
순서도 기호는 나라마다 다르게 쓰면 소용이 없으므로 국제 표준으로 정해져 있다. 이 차시에서 다룬 다섯 기호 말고도 서류(출력물), 저장 장치, 다른 순서도로 이어짐을 뜻하는 기호 등이 더 있다. 다만 실무에서 자주 쓰는 것은 몇 개뿐이다. 기호를 많이 아는 것보다 판단과 반복을 정확히 그리는 것이 훨씬 중요하다.
심화흐름을 그리는 다른 방법들
순서도 말고도 절차와 구조를 그리는 방법이 여럿 있다. 화살표 없이 상자를 겹쳐 쌓아 조건과 반복을 나타내는 방법, 화면이 어떤 순서로 넘어가는지만 그리는 방법, 프로그램의 덩어리와 그 관계만 그리는 방법이 있다. 목적이 다르기 때문이다. 절차를 그릴 때와 구조를 그릴 때 쓰는 그림이 다르다. 3단원에서 프로그램 구조를 설계할 때 그 차이를 다시 다룬다.
실무설계 없이 코드부터 쓰면 정말 빠른가
짧은 프로그램이라면 순서도를 그리는 시간이 아깝게 느껴진다. 실제로 열 줄짜리 프로그램은 바로 쓰는 것이 빠르다. 그런데 판단이 셋 이상 겹치거나 반복 안에 반복이 들어가면 머릿속으로 흐름을 붙잡고 있기가 어려워진다. 이때부터는 그리는 쪽이 빠르다. 기준을 하나 세워 두면 편하다 — “흐름을 말로 설명하다가 막히면 그린다.” 설명할 수 있으면 머릿속에 있는 것이고, 막히면 없는 것이다.
이어지는 학습
이 차시를 이해하려면 다음을 먼저 알아야 한다.
- 6차시의 알고리즘 개념과 조건 — 프로그래밍 프그01-03
교과서에서 찾기
| 교과서 | 해당 위치 | 쪽수 |
|---|---|---|
| 성림출판(Python) | 프로그래밍의 개요 › 03 알고리즘 | 34쪽 |
| 씨마스커뮤니케이션(Python) | 프로그래밍 개요 › 3 알고리즘 | 32쪽 |
| 삼양미디어(Python) | 프로그래밍의 개요 › 02 프로그래밍의 절차와 알고리즘 (프그01-02와 통합) | 22쪽 |
| 삼양미디어(C) | 프로그래밍의 개요 › 02 프로그래밍의 절차와 알고리즘 (프그01-02와 통합) | 22쪽 |
| 씨마스(C) | 프로그래밍의 개요 › 3 알고리즘 | 30쪽 |
| 웅보출판사(C) | 프로그래밍의 개요 › Chapter 03 알고리즘 | 34쪽 |