목차 기초편 (교재 구성) 응용편 (활동하는 플레이봇) 1. 교재의 특징 - 1 2. 교재의 구성 - 1 기본편 (플레이봇과 만나기) 1. 플레이봇 시작하기 - 8 2. 움직이는 플레이봇 - 32 3. 내장 함수 - 38 4. 사용자 정의 함수 - 56 5. 조건문 -

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap05-제어문.pptx

Infinity(∞) Strategy

Microsoft PowerPoint - chap04-연산자.pptx

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

OCW_C언어 기초

View Licenses and Services (customer)

게임 기획서 표준양식 연구보고서

윈도우즈프로그래밍(1)

04 Çмú_±â¼ú±â»ç

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

1

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집

PowerPoint Presentation

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

E (2005).hwp

Microsoft PowerPoint - chap01-C언어개요.pptx

새로운 지점에서 단이 시작하는 경우 기둥코로 시작하라고 표시합니다. 기둥코(standing stitch)로 시작하는 방법은 YouTube 에서 찾아볼 수 있습니다. 특수 용어 팝콘뜨기: 1 코에 한길긴뜨기 5 코, 바늘을 빼고 첫번째 한길긴뜨기코의 앞에서 바늘을 넣은

1 경영학을 위한 수학 Final Exam 2015/12/12(토) 13:00-15:00 풀이과정을 모두 명시하시오. 정리를 사용할 경우 명시하시오. 1. (각 6점) 다음 적분을 구하시오 Z 1 4 Z 1 (x + 1) dx (a) 1 (x 1)4 dx 1 Solut

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Windows 8에서 BioStar 1 설치하기

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Visual Basic 반복문


와플-4년-2호-본문-15.ps

PowerPoint 프레젠테이션

<B3EDB9AEC0DBBCBAB9FD2E687770>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

chap x: G입력

Java ...

1 1 만 알아보기 1000이 10개이면 10000입니다. 이것을 또는 1만이라 쓰고 만 또는 일만이라 고 읽습니다. 9000보다 은 2 다섯 자리 수 알아보기 9900보다 보다 보다 1 큰 수입니다. ⑴ 1000

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

(001~006)개념RPM3-2(부속)

Artificial Intelligence: Assignment 6 Seung-Hoon Na December 15, Sarsa와 Q-learning Windy Gridworld Windy Gridworld의 원문은 다음 Sutton 교재의 연습문제

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Chapter_06


statistics

hwp

<3635B1E8C1F8C7D02E485750>

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

SBR-100S User Manual

PowerPoint Presentation

자유학기제-뉴스레터(6호).indd

쓰리 핸드(삼침) 요일 및 2405 요일 시간, 및 요일 설정 1. 용두를 2의 위치로 당기고 반시계방향으로 돌려 전날로 를 설정합니다. 2. 용두를 시계방향으로 돌려 전날로 요일을 설정합니다. 3. 용두를 3의 위치로 당기고 오늘 와 요일이 표시될 때까지 시계방향으로

2학년 1학기 1,2단원 1 차례 세 자리의 수 1-1 왜 몇 백을 배워야 하나요? 1-2 세 자리 수의 자릿값 알아보기와 크기 비교하기 1-3 뛰어 세기와 수 배열표에서 규칙 찾기 1단원 기본 평가 단원 창의 서술 논술형 평가 22 1단원 심화 수

C 언어 프로그래밊 과제 풀이

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Xcrypt 내장형 X211SCI 수신기 KBS World 채널 설정법

Microsoft Word - PLC제어응용-2차시.doc

설계란 무엇인가?

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

중간고사

03_queue

4장.문장

2014학년도 수시 면접 문항

문제지 제시문 2 보이지 않는 영역에 대한 정보를 얻기 위하여 관측된 다른 정보를 분석하여 역으로 미 관측 영역 에 대한 정보를 얻을 수 있다. 가령 주어진 영역에 장애물이 있는 경우 한 끝 점에서 출발하여 다른 끝 점에 도달하는 최단 경로의 개수를 분석하여 장애물의

<C3E6B3B2B1B3C0B C8A32DC5BEC0E7BFEB28C0DBB0D4292D332E706466>

금오공대 컴퓨터공학전공 강의자료

~

K&R2 Reference Manual 번역본

<C6F7C6AEB6F5B1B3C0E72E687770>

C스토어 사용자 매뉴얼

untitled

쉽게 풀어쓴 C 프로그래밍

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint 웹 연동 기술.pptx

슬라이드 1

<C1DFB0B3BBE7B9FD3128B9FDB7C92C20B0B3C1A4B9DDBFB5292E687770>

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Tcl의 문법

쉽게 풀어쓴 C 프로그래밍

Run 봄 연습 Mar 18 Mar 24, 2018, Week 3 문제 1. 초코바 입력 파일: 출력 파일: 시간 제한: 메모리 제한: standard input standard output 1 seconds 128 megabytes H W 격자 모양의 초콜릿이 있다.

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

UI TASK & KEY EVENT

= ``...(2011), , (.)''

Studuino소프트웨어 설치

캘크 시작하기

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

chap 5: Trees

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

»êÇÐ-150È£

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

Convenience Timetable Design

Microsoft PowerPoint - 5장 조건문 pptx

SIGIL 완벽입문

슬라이드 1

Microsoft PowerPoint 자바스크립트(1).pptx

Transcription:

The Platform for SW Education 교육용 지도서 Javascript. 소프트웨어 교육을 통해 발산적 사고! 44 수렴적 사고! 컴퓨팅 사고! 1

목차 기초편 (교재 구성) 응용편 (활동하는 플레이봇) 1. 교재의 특징 - 1 2. 교재의 구성 - 1 기본편 (플레이봇과 만나기) 1. 플레이봇 시작하기 - 8 2. 움직이는 플레이봇 - 32 3. 내장 함수 - 38 4. 사용자 정의 함수 - 56 5. 조건문 - 58 6. 변수와 연산자 - 61 7. 반복문 - 68 8. 배열 - 75 11. 범인 위치 찾기 - 148 12. 비퍼 내려놓기 - 157 13. 다양한 크기의 사각형 그리기 - 165 14. 농장에서 딸기 수확하기 - 171 15. 마트 주차장 관리하기 - 177 16. 100m 달리기 - 186 17. 물건 배송하기 - 194 18. 책상 주인 찾기 - 204 19. 방석 채우기 - 212 20. 일곱 색깔 무지개 색칠하기 - 221 21. 도둑 잡기 - 229 22. 이어달리기 - 238 심화편 (생각하는 플레이봇) 실전편 (움직이는 플레이봇) 1. 패턴 디자인하기 - 79 2. 심부름하는 플레이봇 - 85 3. 징검다리 건너기 - 91 4. 과일 배달하기 - 97 5. 꽃 진열하기 - 103 6. 체육대회 어울림마당 참가하기 - 110 7. 책상 개수 구하기 - 119 8. 식탁보 깔기 - 127 9. 장애물 뛰어넘기 - 134 23. 메뉴 추천하기 - 248 24. 방 탈출하기 - 257 25. 순서대로 놓기 - 267 26. 미로 찾기 - 276 부록 (학습지) - 288 10. 물고기 잡기 - 141

SW교육 왜 필요한가요? 컴퓨터를 이용해 문제를 해결할 경우 가장 먼저 해야 할 일은 컴퓨터가 해야 할 일에 대해 사람이 지정을 해주는 일이다. 그러기 위해서는 컴퓨터가 작업할 문제에 대한 분석이 필요하다. 이 분석 결과를 바탕으로 문제의 해결 방법에 대한 단계별 해결 과정을 계획하게 되는데 이것을 우리는 알고리즘(algorithm)이라고 한다. 알고리즘은 문제를 해결하기 위한 구체적이고 체계적인 방법으로 어떤 결과를 얻기 위한 논리적인 절차이다. 이러한 문제 해결 방법의 단계적 계획을 컴퓨터가 이해할 수 있는 언어로 변환하는 작업을 코딩(coding)이라고 하며, 코딩에 의한 결과물을 프로그램(Program) 이라고 한다. 따라서, 같은 문제라 하더라도 어떻게 알고리즘을 작성하고 어떻게 코딩하느냐에 따라 다양한 결과물이 생성될 수 있다. 즉, 프로그램은 컴퓨터에 명령을 내릴 수 있는 가장 기본적인 단위로 어떤 명령들을 조합(알고리즘 생성)해서 작성(코딩) 하느냐에 따라 다양한 형태로 나타날 수 있으며, 문제의 해결 처리 방법과 속도를 달리한다고 할 수 있다. 결국 컴퓨터를 이용한 문제 해결은 하드웨어인 기계 안에서 그를 움직이는 프로그램 즉, SW에 의해 달라지는 것이다. 그러므로 컴퓨터의 하드웨어적 기능을 효율적으로 활용하기 위해서는 반드시 그를 최적화 시킬 수 있는 프로그램이 필요하며 이런 프로그램을 만들기 위해서는 문제 해결에 적합한 알고리즘을 개발하고 선택하는 일이 중요하다. 그렇다면 컴퓨터에서 말하는 최적화된 프로그램이란 어떤 것일까? 컴퓨터는 복잡하고 반복적인 일을 얼마나 빠르고 정확하게 처리하느냐에 따라 그 성능이 평가된다. 그러므로 최적화된 프로그램이란 하드웨어의 성능에 맞게 빠르고 정확하게 문제를 해결할 수 있는 처리능력을 갖춘 프로그램을 의미하며, 여기에는 알고리즘의 생성과 코딩이 중요한 역할을 하게 된다. 최적화된 프로그램이란? 그렇다면 알고리즘의 실행과 코딩이 우리에게 어떤 역할을 하는지 한번 생각해 보자. 첫째, 알고리즘의 실행과 코딩의 반복적 경험은 프로그램이라는 산출물을 생산해내기 위한 과정이다. 이는 문제 해결을 위한 설계와 실행에 해당하는 것으로 최적의 설계와 실행을 찾기 위한 반복적 오류와 수정의 경험은 우리에게 문제 해결 능력과 논리적 사고력을 증진시키는 기회를 제공하게 된다. 따라서 알고리즘의 실행과 코딩의 반복적 경험은 문제 해결력을 자연스럽게 향상시킬 수 있음과 동시에 논리적 사고력을 키울 수 있다. 둘째, 창의적 사고력 증진에 도움이 된다. 문제 해결을 위한 알고리즘의 설계는 발산적 사고의 기회를 확장할 수 있으며, 프로그램이라는 결과물을 도출하는 과정 속에서 수렴적 사고를 경험함으로써 창의적 사고력 증진에 도움을 줄 수 있다.

발산적 사고 수렴적 사고 창의성 증가 셋째, 다양한 분야에 소프트웨어를 적용해 가치 창출의 효과를 극대화할 수 있다. 하드웨어의 놀라운 기술력은 이제 세계 각국이 공통적으로 공유하고 있는 환경적 인프라이다. 이 기기를 얼마나 산업에 잘 응용하고 활용할 수 하는지에 따라 그 나라의 국가경쟁력이 결정된다고 해도 과언이 아닐 것이다. 우리가 일상에서 접하는 사물이 소프트웨어의 기술력과 합쳐 새로운 가치를 창출해 내는 것 이것이 바로 소프트웨어의 핵심가치이다. 국가 경쟁력 향상 프로그램 교육 과학기술 전반의 가치 창출 증대 핵심인재 양성 SW교육은 문제 해결을 위한 사람의 머릿속 생각이나 문제 해결 과정의 절차를 컴퓨터 관점에서 표현하고 해결할 수 있도록 도와주는 모든 교육 활동을 말한다. 즉, SW교육은 학생들이 정보과학의 기본 개념과 원리를 이해하고 컴퓨터 언어를 활용하여 창의적이고 효율적으로 문제를 해결할 수 있도록 지원하는 교육을 의미한다. 따라서, 최근 세계 각국에서는 이 SW교육을 좀 더 잘 운영하고 활용할 수 있는 방법에 초점을 맞추고 있으며, 이를 잘 운용할 수 있는 소프트웨어 개발에 집중한 인재교육에 관심을 두고 있다. 그렇다면 왜 이렇게 세계가 SW교육에 열광하는 걸까? 그것은 SW교육이 상상을 현실로 만들 수 있는 가장 창의적인 도구이며, 국가의 미래를 책임질 가장 확실한 방법이기 때문이다. 그러나 지금까지 SW교육이라고 하면 어렵고 복잡한 내용으로 여겨져 왔고, 특정 부분에 두각을 나타내는 일부 학습자만을 위한 교육으로 인식되어 보편적이고 일반적인 교육의 영역에서 배제되어 왔다. 그러나 모든 사람이 어릴 때부터 의사소통 능력을 배우듯, 이제는 SW교육도 모든 학생들이 경험하고 학습해야 하는 대중적인 교육이 되어야 한다. 본 교재는 특별한 재능을 갖고 있지 않은 학습자라도 누구나 쉽게 문제 해결의 방법과 절차를 컴퓨팅 사고력의 주요개념에 따라 논리적으로 표현하기 위해 개발된 교재이며 논리적 표현의 도구로 교육용 플레이봇 프로그램을 활용하였다.

기 초 편 교재 구성 5

1 교재의 특징 이 교재는 학습자들이 경험할 수 있는 일상생활의 문제를 스스로 해결하기 위한 논리적 사고의 절차화 과정을 차시별로 제공함으로써, 복잡하고 어려운 문제를 스스로 사고하고 해결할 수 있는 논리적 사고력의 향상에 중점을 두었다. 학습자는 문제 해결을 위해 단순히 프로그램을 코딩하는 것이 아니라, 스토리로 제시된 문제를 해결하기 위해 자신의 선수지식과 경험, 사고를 바탕으로 문제를 해결해 나가는 과정을 절차화시킬 수 있도록 구성하였다. 또, 각 차시별 컴퓨팅 사고력을 기반으로 한 교수-학습과정의 구성과 의사코드를 활용한 문제 해결 절차의 구성은 복잡한 문제 해결에 대한 학습자의 논리적 사고력의 향상에 중점을 두었다. 이 교재를 충분히 숙지하였다면 개별 학습을 통해 배운 내용을 바탕으로 팀별 월드를 구성할 있도록 수업을 구성함으로써 협업이 가능한 프로젝트형 수업을 진행할 수 있기를 권장한다. 2 교재의 구성 가. 영역별 구성 교재의 구성은 크게 기본편과 실전편, 활용편, 심화편의 4개의 영역으로 나누어져 있다. 기본편(플레이봇과 만나기)은 학습자에게 주어진 실생활의 문제를 직접 해결하기 위한 교육용 도구로 플레이봇의 기본 명령어를 익히고 실습해 볼 수 있도록 구성하였다. 실전편(움직이는 플레이봇)은 플레이봇의 내장함수에 대한 연습을, 응용편(활동하는 플레이봇)에서는 내장함수를 활용하여 반복문, 다중반복문, 논리연산자 등을 사용하여 문제를 해결할 수 있는 내용으로 구성되었고, 심화편(생각하는 플레이봇)에서는 실생활 중심의 복잡한 문제 상황을 구성하여 난이도를 높였다. 영역 주제 활동내용 학습개념 난이도 기본 플레이봇과 만나기 - 플레이봇 프로그램의 특징과 초기화면 익히기 플레이봇의 특징 초기화면 메뉴 익히기 - 1. 패턴 디자인하기 - 플레이봇을 움직이는 기본 명령어 익히기 turn_left() set_color() 초 움직이는 플레이봇 2. 심부름 하는 플레이봇 - 물건을 줍고, 놓는 명령을 이용해서 물건 이동시키기 pick_object() put_object() what_object() open_front_door() 초 3. 징검다리 건너기 - 징검다리 건너는 동작의 규칙성을 찾아 사용자 정의함수 만들기 사용자 정의 함수 초 1

4. 과일 배달하기 - 변수의 개념 익히기 - 배달된 과일의 총 개수 구하기 count_object() document.write() 변수 산술연산자 초 5. 꽃 진열하기 - 꽃을 수거하여 원하는 위치에 하나씩 진열하기 - 문자변수와 숫자변수 구별하여 쓰기 변수 활용 초 움직이는 플레이봇 6. 체육대회 어울림마당 참가하기 - 주사위를 던져서 나온 임의의 숫자에 따라 다른 상품 받기 7. 책상 개수 구하기 - 변수와 연산자를 활용하여 교실의 책상 개수 구하기 get_random() say() 조건문 다중 조건문 비교연산자 변수와 연산자 사용자 정의 함수 반복되는 규칙성 찾기 초 초 8. 식탁보 깔기 - 조건문을 사용하여 호박은 노란색, 토마토는 빨간색, 포도는 보라색 식탁보 깔기 비교연산자 다중 조건문 초 9. 장애물 뛰어넘기 - 앞에 장애물이 있는지 확인하기 - 앞에 있는 장애물에 따라 다르게 동작하기 조건문 다중 조건문 논리연산자 초 10. 물고기 잡기 - 월드 크기에 상관없이 물고기 잡는 동작 반복하기 get_max_x() 반복문 초 11. 범인 위치 찾기 - 범인이 남긴 발자국의 모양을 파악하여 범인의 위치 찾기 - 변수 값을 1씩 증가시키는 방법 알기 - 논리 값 익히기 set_color(x,y.색상) show_message() 반복문(while) 논리값(true, false) 증감연산자 중 12. 비퍼 내려 놓기 - 다중반복문을 이용해 바닥에 비퍼 놓기 put_beeper() 다중 반복문 중 13. 다양한 크기의 사각형 그리기 - 월드의 크기에 상관없는 사각형 그리기 get_max_x() 다중 반복문 중 활동하는 플레이봇 14. 농장에서 딸기 수확하기 - 농장의 크기에 상관없이 딸기 수확하기 on_object() 변수 조건문 다중 반복문 중 15. 마트 주차장 관리하기 - 다중반복문을 활용해 빈 주차장의 개수 나타내기 get_x(), get_color() 다중 반복문 누적 개념 중 16. 100m 달리기 - 3대의 플레이봇이 100m달리기를 한 후 1등 찾기 get_random() 논리연산자 객체지향 개념 중 17. 물건 배송 - 물건을 배열에 넣었다가 특정위치로 옳겨 놓기 배열 배열의 push 메소드 중 2

18. 책상 주인 찾기 - 2차원 배열을 이용해 책상 주인 찾기 get_y() 2차원 배열 중 19. 방석 채우기 - 플레이봇이 이동하면서 비퍼를 1개씩 채우기 left_is_clear() pick_beeper() count_beeper() 논리연산자 반복문(while) 다중 조건문 중상 활동하는 플레이봇 20. 일곱 색깔 무지개 색칠하기 - 배열에 색을 저장한 후 반복횟수마다 색깔 가져오기 배열 나머지연산자(%) 중상 21. 도둑 잡기 - 도둑이 남긴 발자국의 모양과 개수를 파악하여 도둑 잡기 - 플레이봇의 방향을 고려하여 회전하기 direction_is_east() direction_is_west() direction_is_south() direction_is_north() 중상 22. 이어달리기 - 3대의 플레이봇이 이어달리기 매개변수 객체지향 개념 중상 23. 메뉴 추천하기 - 최댓값 구하는 알고리즘을 통해 추천수 많은 메뉴 찾기 최댓값 구하는 알고리즘 상 생각하는 플레이봇 24. 방 탈출하기 - 재귀함수를 활용해 최종도착지점의 좌표 알아내기 25. 순서대로 놓기 - 다중반복문을 사용해 바닥에 놓인 버퍼의 개수 정렬하기 누적 개념 재귀 함수 개념 on_beeper() 정렬 알고리즘 상 상 26. 미로 찾기 - 깊이 우선탐색과 스택을 이용해 어떤 상황의 미로에서도 목적지 찾기 깊이우선탐색 알고리즘 스택 최상 나. 컴퓨팅 사고력 기반의 교수-학습과정 구성 이 교재에서는 컴퓨팅 사고력(Computational Thinking)을 복잡하고 어려운 학습문제 뿐만 아니라 일반적인 학습목표의 해결을 위한 학습자의 절차화 된 사고 및 학습과정의 실제적 방법론으로 제시하였다. 즉, 컴퓨팅 사고력의 주요 핵심개념을 교수-학습과정의 순차적 단계에 활용하여 교수-학습 과정안을 구성함으로서 학습자의 논리적 사고력의 향상에 중점을 두었다. 1 컴퓨팅 사고력 이란? 컴퓨팅 사고력은 1996년 Seymour Papert가 기하학적 아이디어 생성을 위한 접근방법으로 처음 사용하면서 우리에게 소개되었고, 그 후 Wing에 의해 알려지게 되었다. 컴퓨팅 사고력은 수학적 사고와 결합하면 문제를 해결할 수 있고, 공학적 사고와 결합하여 복잡한 문제를 분해할 수 있으며, 과학적 사고와 결합하여 우리가 이해하고 계산 가능한 접근을 할 수 있게 해주는 분석적 도구이다(Wing 2008). CSTA(Computer Science Teachers Association, 2011)와 ISTE(International Society for Technology in Education) 3

에서는 컴퓨터과학교사, 연구자 및 실무자의 설문을 통해 전문대, 일반대, 대학원, 산업 및 K-12교육에서의 컴퓨팅 사고력을 문제를 해결하는 과정으로 정의한 후 David Barr, John Harrison, & Leslie Conery(2011)의 연구결과를 토대로 Data Collection, Data Analysis, Data Representation, Problem Decomposition, Abstraction, Algorithms & Procedures, Automation, Simulation, Parallelization을 컴퓨팅 사고력의 핵심 개념과 능력으로 구분하고, K-12의 컴퓨터과학 표준 교육과정 중 하나로 제시하였다. 2 컴퓨팅 사고력의 주요 개념 컴퓨팅 사고력은 복잡하고 어려운 학습문제 뿐만 아니라 일반적인 학습목표의 해결을 위해 학습자의 절차화된 사고 및 학습과정의 실제적 방법으로 제시하기 위해 주요개념을 다음과 같이 정의하였다. 컴퓨팅 사고력의 9가지 주요개념 개념 자료수집 (Data Collection) 자료분석 (Data Analysis) 정의 문제의 이해와 분석을 토대로 문제를 해결하기 위한 자료를 모으는 단계 수집된 자료와 문제에 주어진 자료를 세심히 분류하고 분석하는 단계 자료표현 (Data Representation) 문제의 자료 내용을 그래프, 차트, 단어, 이미지 등으로 표현하는 단계 문제분해 (Problem Decomposition) 추상화 (Abstraction) 알고리즘과 절차 (Algorithms & Procedures) 자동화 (Automation) 시뮬레이션 (Simulation) 병렬화 (Parallelization) 문제를 해결해나가기 위해 문제를 나누어 분석하는 단계 문제의 복잡도를 줄이기 위해 기본 주요 개념의 정의를 설정하는 단계 지금까지 문제를 해결하기 위한 과정을 순서적 단계로 표현하는 단계 순서적으로 나열하고 표현한 내용을 컴퓨팅 기기를 이용하여 해결과정의 최선책을 선택하는 단계 복잡하고 어려운 해결책이나 현실적으로 실행이 불가능한 해결책을 선택하기 위해 모의 실험하는 단계 문제를 해결하기 위한 공동의 목표를 달성하기 위한 작업을 수행하는 단계 자료수집(Data Collection)은 문제를 이해하기 위해 자료를 모으는 단계로, 이는 문제를 이해하고 분석할 수 있는 기틀이 되는 단계이다. 자료분석(Data Analysis)은 수집된 자료를 바탕으로 주어진 문제와의 관계를 분석하는 단계로 자료를 분류하고 분석함으로써, 문제를 이해하고 해결책을 설계하기 위한 단계이다. 자료표현(Data Representation)은 분석된 문제의 내용을 이해하고 알기 쉽게 그래프, 차트, 단어, 이미지 등으로 표현하는 단계이다. 문제분해(Problem Decomposition)는 문제를 해결해 나가는 해결책을 설계하기 위해 문제를 이해하고 알기 쉬운 단위로 나누는 단계이다. 추상화(Abstraction)는 기본 주요 개념의 정의를 설정함으로써 문제의 복잡성을 줄이고, 이미 알고 있는 사실을 바탕으로 해결책을 설계할 수 있도록 해결책을 설정하는 단계이다. 4

알고리즘과 절차(Algorithms & Procedures)는 지금까지의 문제 해결을 위한 과정을 순서적인 단계로 나열하고 표현하는 단계이다. 자동화(Automation)는 알고리즘과 절차(Algorithms & Procedures)의 단계에서 순서적으로 나열하고 표현한 내용을 컴퓨팅 기기를 이용하여 해결과정의 최선책을 선택하는 단계이다. 시뮬레이션(Simulation)은 문제 해결의 과정 중 복잡하고 어려운 해결책이나 현실적으로 실행이 불가능한 해결책 중 최선책을 선택하기 위해 모의실험을 하는 단계이다. 병렬화(Parallelization)는 문제를 해결하기 위한 공동의 목표를 달성하기 위해 모든 작업은 동시에 일어날 수 있는 과정이거나 혹은 단계 중 일부가 생략되어도 문제 해결에는 지장이 없다. 결국, 컴퓨팅 사고력은 문제를 해결하는 단순과정이나 프로그래밍이 아닌, 논리화되고 절차화된 사고와 방법론을 통해 컴퓨터과학의 원리와 개념을 바탕으로 문제를 해결하는 인지적 정의적 사고과정이라고 할 수 있다. 따라서, 이 교재에서는 컴퓨팅 사고력의 절차를 교수학습에 반영하고자 각 차시별 해결해야 할 문제 상황이 주어지고 (자료수집, 자료분석), 문제를 분석(문제분석)한 후 문제 해결 절차를 표현(자료표현)하고, 문제 해결에 필요한 선수 학습 내용을 나열(추상화)하고, 문제 해결 과정(알고리즘과 절차)을 생각하고, 코딩(자동화)을 하는 순으로 수업 전개를 구성하였다. 이와 같은 구성은 문제 해결 절차를 위한 학습자의 논리적 절차적 사고의 향상에 중점을 두기 위함이다. 다. 문제 해결 절차의 중요성을 강조한 교수-학습 과정 구성 프로그래밍 문제의 해결을 위한 논리적 설계 방법으로는 순서도(flow chart)와 의사코드(pseudo code) 방법이 있다. 순서도가 어떤 문제 해결을 하는데 필요한 논리적인 단계들을 그림으로 표현한 것이라면, 의사코드는 논리적인 단계들을 사람이 말하는 언어와 유사하게 표현한 것이다. 의사코드(psuedo code) 순서도(flow chart) a 변수에 1부터 100사이의 숫자 중 하나를 임의로 넣는다. b 변수에 1부터 100사이의 숫자 중 하나를 임의로 넣는다. if (a 변수값 > b 변수값) a 변수값을 출력한다. 그렇지 않으면 b 변수값을 출력한다. 의사코드는 프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위해 사용하는 언어로, 알고리즘을 프로그래밍 언어와 유사한 형태로 풀어 써 놓은 것을 말하며, 이는 실제 프로그래밍 언어는 아니다. 다시 말해 의사코드는 직접 실행할 수 있는 프로그래밍 언어는 아니지만, 거의 실제 프로그램에 가깝게 계산과정을 표현할 수 있다. 5

그렇다면 왜 의사코드를 사용하는 것일까? 1부터 10까지 숫자를 더하는 프로그램을 예로 들어보자. 프로그램을 잘 모르는 사람에게 1부터 10까지의 숫자를 더하는 프로그램 코드를 보여주고 설명을 한다면, 설명을 하는 사람도 듣는 사람도 여간 힘든 일이 아니다. 그런데 문법적 형식에 얽매이지 않는 의사코드를 이용해서 문제 해결 절차를 설명한다면 훨씬 쉽게 이해할 수 있다. 의사코드(psuedo code) 순서도(flow chart) 프로그램 코드 sum <- 0 begin i <- 1 sum <- sum + i i = i+1 if i is not 11 goto begin print sum int i; int sum = 0; for (i = 1; i <= 10; i++) { sum += i; printf( sum is %d\n, sum); 이처럼 의사코드는 특정 프로그래밍 언어의 문법에 따라 쓰여진 것이 아니라, 사람이 쓰는 언어로 코드를 흉내내서 알고리즘을 써놓은 것을 말한다. 의사코드는 말 그대로 흉내만 내는 코드이기 때문에 실제 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없으며, 프로그래밍 언어로 프로그램을 작성하기 전에 알고리즘의 형태로 모델링하는데 쓰인다. 따라서 이 교재에서는 각 단계별 문제 해결 절차를 순서대로 표현해 봅시다. 의 영역을 두어, 주어진 문제 상황에 대한 해결 절차를 의사코드로 표현해 보는 단계를 두었다. 아래는 8차시 책상 개수 구하기 주제의 의사코드로, 플레이봇이 5 개 교실을 돌면서 각 교실에 몇 개의 책상이 있는지, 전체 책상수와 평균 책상수는 몇 개인지, 계산해서 출력하는 내용을 의사코드와 순서도로 나타낸 것이다. 문제 해결 절차를 순서대로 표현해 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대로 적고, 순서도를 그려봅시다. 1 현재 교실에서 다음 교실로 이동한다. 2 교실에 있는 책상 개수를 알아내서 변수에 저장한다. 3 1~2를 교실수 만큼 반복한다. 4 마지막 교실로 이동한다. 5 변수에 들어있는 값을 모두 더해서 전체 책상수를 계산한다. 6 전체 책상수를 교실수로 나누어 평균 책상수를 계산한다. 7 전체 책상수와 평균 책상수를 출력한다. 위의 예와 같이 문제 해결 절차를 순서대로 표현해 보는 경험은 학습자의 논리적 사고력을 향상시키는데 큰 도움이 된다. 따라서 학생들의 사고 과정을 논리적으로 절차화시키는데 도움을 주기 위해 의사코드를 교수-학습 과정안에 활용하였다. 6

기본편 기 본 편 플레이봇과 만나기 플레이봇과 만나기 7

1 플레이봇 시작하기 1.1 플레이봇 특징 플레이봇은 학습자가 쉽게 이해할 수 있는 소프트웨어 교육 방법에 대한 고민 중 모든 학습자에게 적용되는 보편적이고 일반적인 프로그램 언어 교육을 위해 자바스크립트 언어를 기반으로 한 문제 해결 학습 환경을 제공한다는 목적으로 개발된 도구이다. 본 교재의 학습 도구로 사용된 플레이봇은 다음과 같은 특징을 가지고 있다. 자바스크립트 언어를 이용 (C언어와 동일한 문법 사용, 대소문자 구분) 문장의 끝에 세미콜론(;)을 사용 (생략가능) HTML5로 개발되어 다양한 브라우저에서 사용 가능 (크롬 권장, 익스플로러는 11버전 이상 가능) 문법 오류를 최소화하기 위한 다양한 보조 기능 제공 (코드 블록 기능, 괄호 일치 기능) 웹브라우저로 접속해서 실행할 수 있으므로 컴퓨터에 설치 과정이 필요하지 않음 본 교재에서는 짧은 이야기의 학습 상황이 제시되고, 그 상황으로부터 해결해야 할 문제의 핵심을 찾아 프로그래밍 언어로 해결하게 되는데, 여기에 플레이봇이 문제 해결 도구로 활용된다. 따라서 기존 프로그래밍 교육과는 다른 접근 방법이 필요하다. 즉, 프로그래밍 언어를 학습해서 문제 해결에 사용한다. 가 아닌 문제를 해결하는 경험 제공을 목적으로 플레이봇을 사용한다. 는 관점으로 접근해야 한다. 1.2 플레이봇과 만나기 가. 플레이봇 접속 및 초기화면 웹브라우저(크롬 혹은 익스플로러 11버전)를 실행하고 http://playbot.spaceii.com/에 접속하면 다음과 같은 화면을 볼 수 있다. 월드영역 코드영역 출력영역 8

나. 회원 가입하기 상단의 회원가입 버튼을 선택하면 다음과 같은 화면이 나온다. 해당 항목을 이름부터 차례로 입력한 후 확인을 누른다. 아이디를 입력하면 사용 가능 여부가 오른쪽에 표시된다. 이미 사용 중인 아이디는 사용 불가 메시지가 표시된다. 교사 계정이 필요한 경우 학생 회원으로 가입을 한 후, 플레이봇 카페(http://cafe.naver.com/hardrestore)에서 교사 계정으로 변경 신청을 할 수 있다. 교사 계정으로 변경되면 다음과 같은 기능을 사용할 수 있다. 교사가 수업을 원활하게 진행할 수 있도록 학생의 계정과 월드, 코드를 관리 자신을 선생님으로 등록한 학생의 계정을 관리 교사 상호간의 월드 공유가 가능 수행평가 기간을 설정하여 학생들이 자신의 코드를 열지 못하도록 설정 수행평가 채점기를 이용해서 학생의 코드를 쉽고 빠르게 채점 9

다. 로그인하기 1 교사 로그인 교사 권한을 부여받은 후 로그인한다. 교사 계정의 관리 기능을 사용하기 위해 매니저로 이동 버튼을 클릭한다. 교사 전용 공간이 나타난다. : 교사 자신의 계정과 학생 계정을 관리할 수 있다. 이때 보이는 학생 계정은 자신을 선생님으로 등록한 학생들이다. ( 선생님 등록 은 학생 로그인 참조) 10

수정 기능 : 학생 혹은 교사 자신의 정보를 수정한다. 삭제 기능 : 학생 계정을 삭제할 때 사용한다. (학생 계정을 삭제하는 경우, 학생이 작성한 코드와 월드가 모두 삭제되므로 주의해야 한다.) : 교사 자신의 월드를 관리한다. 공유 : 자신의 월드를 다른 교사에게 공유한다. (공유:, 공유해제: ) 잠금 : 학생들이 월드를 열지 못하도록 잠근다. (잠금:, 잠금해제: ) 월드를 잠금 설정하면 해당 월드를 이용한 코드도 함께 잠금 설정된다. 평소에는 학생들이 수행평가 문제를 볼 수 없도록 월드를 잠금 처리해두고, 수행평가를 실시할 경우에만 잠금을 해제한다. 한 학급의 수행평가가 종료된 후에는 반드시 월드를 잠금 처리해야만 한다. (타 학급 학생들에게 수행평가 월드가 사전에 노출되는 것 방지) 월드를 삭제하면 해당 월드를 이용하는 코드가 모두가 삭제되므로 주의해야 한다. 11

: 교사 자신의 코드를 관리한다. : 수행평가 기간 설정을 On/Off 한다. : 학생들이 자신의 기존 코드를 열지 못한다. : 학생들이 자신의 기존 코드를 열어 볼 수 있다. : 교사들이 공유한 월드 목록을 볼 수 있다. 내 월드로 복사 기능을 활용하면 다른 교사의 월드를 자신의 월드로 복사해서 사용할 수 있다. 의 공유 기능을 이용하여 자신의 월드를 다른 교사들에게 공유할 수 있다. 12

: 자신을 교사로 등록한 학생들의 월드를 관리한다. 학생들의 월드는 확인만 가능하고, 수정 삭제는 불가능하다. : 자신을 교사로 등록한 학생들의 코드를 관리한다. 학생들의 코드는 확인만 가능하고, 수정 삭제는 불가능하다. : 학생이 제출한 수행평가 코드를 열어서 채점할 수 있다. 13

현재WORLD에서 수행평가 월드를 선택하면, 선택된 월드를 배경으로 코드를 저장한 학생 목록이 현재STUDENT에 나타난다. 여기에서 학생의 이름을 선택하면 학생 코드가 열리면서 자동으로 실행된다. Q & A Q. 수행평가 시간에 교사가 어떻게 수행평가 월드를 열어 주나요? A. 교사는 에서 수행평가로 제시하려는 월드의 잠금을 해제해 줍니다. 그러면 학생이 월드 열기 선생님 월드 에서 수행평가 월드를 선택할 수 있습니다. 그리고 수행평가가 종료되면 다시 월드를 잠금 처리해야 합니다. 2 학생 로그인 회원 가입 후 로그인을 하면, 학생 회원으로 로그인 된다. 화면 상단의 선생님 등록 버튼을 클릭한 후, 담당 선생님의 아이디를 입력한다. 선생님 등록이 완료되었다는 메시지가 나온다. 이때부터 교사는 학생 계정을 관리할 수 있고, 학생은 선생님이 제공하는 월드를 이용할 수 있다. 학생은 개인정보수정 버튼을 클릭한 후, 자신의 학번 정보를 입력할 수 있다. 14

1.3 플레이봇 화면구성 가. 플레이봇의 영역별 화면 코드영역 : 플레이봇이 동작하도록 프로그램 코드를 작성하는 영역이다. 1 function, if, if~else...등의 구문 블록 버튼을 클릭하면 해당 명령어가 코드 영역에 삽입되어 문법 오류를 줄일 수 있다. 2 // 새로운 명령어를 만드는 공간 : 프로그램 작성자가 필요한 함수를 직접 만들 수 사용할 수 있는 사용자 지정함수 영역이다. 3 // 명령어를 실행하는 공간 : 플레이봇에서 제공하는 내장함수와 사용자 정의 함수, 다양한 구문 등을 활용하여 프로그램을 작성하는 영역이다. 월드영역 : 코드영역에 입력된 코드를 따라 플레이봇이 움직이는 영역이다. x, y좌표로 구성된다. A A A영역 : 플레이봇에서 제공하는 기본 명령어를 마우스 클릭만으로 사용할 수 있어 문법 오류를 줄일 수 있다. 15

B B B영역 : 제공되는 월드에 스토리를 부여해서 학습자가 문제 상황을 보다 쉽고 재미있게 이해할 수 있도록 유도한다. 출력영역 : 코드영역에 입력된 명령어의 결과를 출력하는 영역이다. 16

나. 플레이봇의 메뉴 구성 1 2 프로그램 코드 불러오기 3 1 코드가 저장된 날짜를 선택한다 2 불러올 코드의 제목을 선택한다. 3 열기, 삭제, 취소 중 하나를 선택한다. 코드 1 2 프로그램 코드 저장하기 3 1 저장할 코드의 제목을 입력한다. 2 확인을 선택한다. 3 코드 저장을 알리는 확인메세지가 뜬다. 17

1 실행 버튼을 클릭하면 입력된 코드에 의해 플레이봇이 움직인다. 2 정지 버튼을 클릭하면 플레이봇이 멈춘다. 코드 프로그램 코드 실행 / 정지 3 다시 실행 버튼을 클릭하면 코드를 처음부터 다시 실행한다. 로봇의 이동 속도 조절 숫자가 커질수록 로봇의 움직임이 빨라진다. (로봇의 움직임 속도는 1~10) 1 2 월드 월드 불러오기 3 1 불러올 월드의 종류를 선택한다. 2 불러올 월드의 제목을 선택한다. 3 열기, 삭제, 취소 중 하나를 선택한다. 18

1 새로 만든 월드를 저장한다. 월드스토리에는 문제 상황에 대한 설명을 입력한다. 입력한 내용은 월드에 다음과 같이 보여진다. 월드 저장하기 월드 2 기존 월드를 열어 수정한 후 다시 저장할 수 있다. 기존 월드를 다시 저장할 때는 아래와 같은 내용에 메시지가 보인다. 1 화면에 있는 코드 및 월드의 내용이 전부 지워져 초기화 된다. 2 확인을 선택하면 초기화면으로 돌아간다. 코드, 월드, 로봇의 모든 설정을 초기화하기 19

월드영역과 출력영역을 초기화하기 월드영역 편집하기 월드 1 월드 크기 조절하기 2 3 1 y축의 크기를 조절점을 이용해 선택한다. (최대 20까지 가능) 2 x축의 크기를 조절점을 이용해 선택한다.(최대30까지 가능) 3 확인을 선택한다. 버퍼 또는 물건 부여하기 로봇이 처음부터 가지고 시작하는 비퍼나 물건을 부여한다. 20

1 새로운 로봇을 추가할 때는 로봇 추가 버튼을 클릭한 후 로봇의 이름과 위치를 선택한다. 로봇 추가 / 위치 변경하기 2 기존 로봇의 위치를 변경할 때는 위치 변경 버튼을 클릭한 후 변경하려는 로봇의 이름과 좌표를 선택한다. 월드 코드영역 숨기기 / 보이기 필요에 따라 코드 영역을 보이거나 감춘다. 21

다. 플레이봇의 월드 편집 월드란 문제 해결을 위한 상황 설정 혹은 배경 등의 필요 요소를 의미한다. 월드 편집은 메뉴를 클릭한 후 편집을 시작하고 종료할 수 있다. 월드의 셀과 셀사이를 클릭하여 영역을 구분할 수 있으며, 문제 상황에 필요한 벽, 문, 비퍼, 색상 등을 설정할 수 있다. 1 비퍼 설정 : 비퍼를 놓을 때는 셀을 더블 클릭하고 숫자를 선택한다. 비퍼를 놓으려는 셀을 더블 클릭하면 월드 편집 메뉴가 나온다. 해당 셀을 클릭하고 숫자 5를 클릭한다. 클릭한 위치에 비퍼 5개가 삽입되었다. 입력된 비퍼를 지울 때는 월드 편집 메뉴의 클릭한다. 아이콘을 22

2 색상 설정 : 셀에 색을 넣을 때는 연두색 아이콘을 이용한다. 색을 칠하려는 셀을 더블 클릭하면 월드 편집 메뉴가 나온다. 색상을 선택할 수 있는 을 클릭한다. 아이콘 색상선택기가 나타나면 원하는 색을 선택한다. 선택한 색이 셀에 칠해진다. 색을 칠한 후 다른 셀을 마우스 오른쪽 버튼으로 클릭하면 똑같은 색을 반복해서 칠할 수 있다. 입력된 색상을 지울 때는 월드 편집 메뉴의 클릭한다. 아이콘을 23

3 벽/문 설정 : 벽은 마우스 왼쪽 버튼, 문은 마우스 오른쪽 버튼을 이용한다. 셀과 셀 사이의 점선을 마우스 왼쪽 버튼으로 클릭하면 벽이 생긴다. 벽은 플레이봇이 피해 다녀야 하는 장애물이다. 그려진 벽을 다시 클릭하면 벽이 지워진다. 셀과 셀 사이의 점선을 마우스 오른쪽 버튼으로 클릭하면 문이 생긴다. 문은 장애물이지만 플레이봇이 문을 열고 지나갈 수 있다. 그려진 문을 다시 클릭하면 문이 지워진다. 4 물건 설정: 월드에 물건을 선택하여 넣을 때 사용한다. 물건을 놓으려는 셀을 더블 클릭하면 월드 편집 메뉴가 나온다. 물건 아이콘 를 클릭한다. 24

원하는 물건을 더블 클릭한다. 스크롤바를 이용해서 물건의 개수를 선택한다. 선택한 물건의 개수가 놓여진 것을 확인할 수 있다. 물건을 지울 때는 월드 편집 메뉴의 클릭한다. 아이콘을 25

5 글자 입력 : 월드에 글자를 입력하고 색상을 지정할 경우 사용된다. 글자를 입력하려는 셀을 더블 클릭하면 월드 편집 메뉴가 나온다. 글자를 입력하는 아이콘을 클릭한다. 입력하려는 글자를 입력한다. 여러 글자를 입력해도 된다. A A를 클릭해서 원하는 글자색을 선택한 후 넣기를 선택한다. 26

입력한 글자가 선택된 색으로 셀에 입력된다. 입력된 글자를 지울 때는 월드 편집 메뉴의 클릭한다. 아이콘을 6 배경 이미지 선택 : 월드에 사용할 배경 이미지를 선택한다. 월드의 셀 중에서 하나를 더블 클릭하면 월드 편집 메뉴가 나온다. 아이콘을 클릭한다. 원하는 배경을 더블 클릭한다. 배경 그림을 사용할 때 벽과 문을 보여줄지를 묻는 메시지가 나온다. 원하는 상태를 선택한다. 27

선택한 배경이 월드에 삽입된다. 배경을 지우고 싶을 때는 아이콘을 클릭한다. 라. 플레이봇에 비퍼, 물건 주기 플레이봇이 시작할 때부터 물건이나 비퍼를 가지고 있어야 하는 경우 아이콘을 클릭한다. 비퍼 주기 와 물건 주기 중에서 원하는 버튼을 클릭한다. 1 비퍼 주기 : 비퍼를 부여하려는 로봇과 비퍼의 개수를 선택한다. A B A로봇을 선택한 후 B비퍼의 개수를 선택한다. 28

로봇이 비퍼를 가지고 있다는 내용이 보인다. 2 물건 주기 : 로봇에게 줄 물건을 더블 클릭한 후 개수를 선택한다. 로봇에게 줄 물건을 더블 클릭한다. A B A물건의 개수를 선택한 후 B로봇을 선택한다. 로봇이 물건을 가지고 있다는 내용이 보인다. 29

물건과 비퍼를 주면 월드 하단에 플레이봇이 가지고 있는 물건과 비퍼의 개수가 표시된다. 물건 또는 비퍼의 파란색 버튼을 클릭하면 플레이봇의 가방에 들어있는 물건과 비퍼의 개수를 확인할 수 있다. 마. 로봇 추가하기, 로봇 위치 변경하기 1 로봇 추가하기 : 플레이봇의 첫 번째 로봇은 r1 이라는 이름을 갖고 있으며, 좌표(1,1)에서 시작한다. 추가 로봇이 필요한 경우에는 을 클릭하면 아래의 화면이 나온다. 로봇 추가 버튼을 클릭한다. 로봇 이름을 입력한다. 이름은 영문자로 시작해야 하며, 영문자와 숫자를 조합하여 만들 수 있다. 추가되는 로봇의 이름을 입력한 후, 로봇의 시작 위치와 방향을 선택한다. 로봇은 r1을 포함하여 최대 3대까지 가능하다. 30

[참고] 플레이봇의 방향 오른쪽(동) 위쪽(북) 왼쪽(서) 아래쪽(남) 2 로봇 위치 변경하기 : 첫 번째 로봇 r1이나 추가된 로봇의 위치를 변경할 때 사용한다. 위치를 변경하려는 로봇을 선택한다. 로봇의 새로운 x좌표, y좌표, 방향을 선택한다. 31

2 움직이는 플레이봇 2.1 좌표 개념 (1) 좌표란 무엇인가요? 플레이봇의 월드에서 가로줄(x축)과 세로줄(y축)이 만나는 지점을 숫자로 표현한 것이다. (2) 좌표는 어떻게 읽나요? 좌표는 가로줄(x축)을 먼저 쓰고,로 구분한 뒤 세로줄(y축)을 쓴다. 예) (7,3) 세로(y)축 가로(x)축 : 현재 위치의 x축의 숫자를 읽음 x축 : 7 세로(y)축 : 현재 위치의 y축의 숫자를 읽음 y축 : 3 따라서 현재의 위치는 (7,3) 가로(x)축 32

이해학습 문제 1 색이 칠해진 셀의 좌표를 적어보세요. ( ) 세로(y)축 ( ) 가로(x)축 문제 2 다음 좌표 순서대로 색을 칠해 보세요. 어떤 모양의 알파벳이 보이나요? (2,1) (3,1) (4,1) (5,1) (5,2) (1,2) (1,3) (5,3) (5,4) (4,4) (3,4) (2,4) (5,5) (4,6) (3,6) (2,6) 세로(y)축 ( ) 가로(x)축 33

2.2 플레이봇 이동/회전 1 함수 플레이봇을 앞으로 한 칸 이동시킬 때 사용하는 명령어이다. 플레이봇의 시작 위치가 (1,1)이므로 를 6번 실행할 경우 플레이봇은 (7,1)에 도착한다. [프로그램] 로봇의 앞에 벽이 있으면 를 실행할 수 없다. 앞에 벽이 있는 경우에 명령어를 사용하면 로봇이 벽에 부딪혀 다음과 같은 메시지가 발생한다. 34

이해학습 문제 1 아래 그림과 같이 이동하기 위해서는 명령어를 몇 번 사용해야 할까요? ( ) 35

2 turn_left() 함수 플레이봇은 바라보는 방향으로만 이동할 수 있다. 따라서 그림1에서 동쪽을 바라보고 있는 플레이봇이 그림3과 같이 북쪽으로 한 칸 이동하기 위해서는 왼쪽으로 90도 회전한 후에 를 해야 한다. turn_left()는 이동 방향을 왼쪽으로 90도 회전하는 명령어이다. 1 2 3 왼쪽으로 90도 회전 turn_left() 한층 올라가기 도와주세요!! 플레이봇이 북쪽으로 한 칸 이동했더니 플레이봇의 뒷모습만 보여요. 얼굴을 볼려면 어떻게 해야 하나요? turn_left()는 한번에 90도씩 왼쪽으로 회전하는 명령어이다. 따라서 그림3번의 상태에서 turn_left()를 한 번 더하면 그림 4와 같이 서쪽을 바라보게 되고, 한 번 더하면 그림5처럼 남쪽, 한 번 더하면 그림6과 같이 동쪽을 바라보게 된다. 4 5 6 turn_left() turn_left() 36

이해학습 문제 1 플레이봇의 명령어 와 turn_left()를 활용하여 플레이봇을 다음과 같이 이동시켜 주세요. 문제 2 다음과 같이 명령어를 실행했을 플레이봇이 먹을 수 있는 과일은 무엇일까요? ( ) 3 turn_off() 함수 임무를 마친 로봇의 전원을 끄는 명령어이다. 이 명령어가 실행된 이후로는 플레이봇이 더 이상 움직이지 않는다. 37

3 내장 함수 함수(Function)는 반복되는 특정 작업을 한곳에 정의한 후, 필요할 때마다 호출해서 사용하는 프로그램 내의 독립된 단위 프로그램이다. 이러한 함수들이 이미 준비되어 프로그램에 내장되어 있을 때, 이를 내장 함수라 한다. 플레이봇의 내장 함수에는 로봇을 움직이는 동작 함수와 로봇이 주변을 인식하는 센서 함수가 있다. * 동작 함수 :, turn_left() 등 * 센서 함수 : count_beeper(), front_is_door() 등 3.1 document.write 함수 document.write()는 괄호 안에 있는 내용을 화면 하단에 출력한다. 출력하는 내용이 문자열인 경우 문자열 좌우에 를 사용해야 한다. 38

이해학습 문제 1 산의 정상에 오른 플레이봇이 A 위치에서 만세!! 를 외칠 수 있게 코딩해 보세요. A 39

3.2 show_message 함수 show_message()는 괄호 안에 있는 내용을 화면 중앙에 팝업창으로 출력한다. 이해학습 문제 1 산의 정상에 오른 노인 플레이봇이 A 위치에서 야호~~ 정상이다. 를 외칠 때 다음과 같이 팝업창으로 출력할 수 있게 코딩해 보세요. A 40

3.3 say 함수 플레이봇이 말풍선을 이용해서 결과를 출력할 때 사용하는 함수이다. 3.4 repeat 함수 반복되는 명령어를 지정된 횟수만큼 실행한다. 예를 들어 repeat(, 3)을 실행하면 를 3번 실행한 결과와 같다. 예를 들어, 오른쪽 그림과 같이 좌표(1,1)에서 출발한 플레이봇이 (7,1)까지 이동하기 위해서는 그림a처럼 6번의 를 코딩해야 하는데, repeat()를 이용할 경우 그림b와 같이 한 줄로 표현할 수 있다. a = b 41

프로그램 실행결과 설명 repeat(, 5) 를 5번 실행할 때 repeat( turn_left(), 3) turn_left()를 3번 실행할 때 repeat( r1., 7) r1로봇을 앞으로 7칸 이동시킬 때 r2. r2. r2. repeat( r2.pick_object(), 10) r2로봇이 물건을 10개 주울 때 repeat( put_object( 토마토 ), 10) 토마토를 10개 내려 놓을 때 r2. r2. repeat( r2.put_object( 호박 ), 5) r2. r2로봇이 호박을 5개 내려놓을 때 42

이해학습 문제 1 다음에서 a와 b에 반복되고 있는 turn_left()함수를 repeat()함수로 변경하여 작성해 보세요. a b 문제 2 다음 코드를 실행했을 때 플레이봇의 최종 위치를 좌표로 표현해 보세요. 43

3.5 get_random 함수 작은수와 큰수 사이의 숫자 중에서 임의로 하나를 골라주는 명령어이다. 이것을 랜덤(random)이라 부르고, 제비뽑기와 같은 원리이다. get_random함수는 (작은수, 큰수)의 형태를 갖는다. 예를 들어, get_random(1,4)일 경우 골라지는 숫자의 범위는 1부터 4이고, 이 숫자는 프로그램을 실행할 때마다 다른 값이 나오게 된다. [실행 전] [실행 후] [프로그램 코드] 플레이봇! 임의의 숫자 하나를 구한 후에 그 숫자만큼 앞으로 이동해라. 플레이봇! 임의의 숫자 하나를 구한 후에 그 숫자만큼 앞으로 이동해라. a = get_random(1,4) document.write( 임의의 숫자는 + a) repeat(,a) 이해학습 문제 1 플레이봇이 1~3까지의 숫자중 하나를 뽑은 결과에 따라 1이면 가위, 2이면 바위, 3이면 보라고 가정하였다. 다음과 같은 결과가 나올 수 있도록 지금까지 학습한 함수를 활용하여 프로그램을 코딩해 보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇! 1~3까지의 숫자 중에서 하나를 제비뽑기 한 후에 그 숫자가 1이면 가위 2이면 바위 3이면 보 라고 보고하라. a = get_random(1,3) document.write( 제비뽑은 숫자는 + a) if (a==1) { b = 가위 else if (a==2) { b = 바위 else { b = 보 document.write( 결과는 + b) 44

3.6 물건(object)함수 물건 관련 함수는 물건의 위치, 개수, 이름 등을 알아내는 함수로 다음과 같이 정리할 수 있다. 물건(object) 함수 종류 내용 on_object() 로봇이 위치한 셀에 물건이 있는지 없는지 알아내는 명령어이다. 물건이 있으면 true, 없으면 false를 얻는다. what_object() 로봇이 위치한 셀에 있는 물건의 이름을 알아내는 명령어이다. 물건이 있으면 물건의 이름을 얻고, 물건이 없으면 아무 것도 얻지 못한다. count_object() 로봇이 위치한 칸에 있는 물건이 몇 개인지 알아내는 명령어이다. 물건이 있으면 물건의 개수를 얻고, 물건이 없으면 0을 얻는다. pick_object() 로봇이 위치한 셀에 놓여있는 물건을 주울 때 사용하는 명령어로, 한 번에 한 개의 물건을 줍는다. 바닥에 물건이 없는데 이 명령어를 사용하면 오류가 발생한다. put_object() 로봇이 위치한 셀에 물건을 내려놓을 때 사용하는 명령어로, 한 번에 한 개의 물건을 내려놓는다. 이름 에 해당하는 물건을 가지고 있지 않거나, 내려놓는 물건이 바닥에 있는 물건과 다르면 오류가 발생한다. have_object( 이름 ) 로봇이 이름 에 해당하는 물건을 가지고 있는지 없는지 알아내는 명령어이다. 물건을 가지고 있으면 true, 가지고 있지 않으면 false를 얻는다. own_object( 이름 ) 로봇이 이름 에 해당하는 물건을 몇 개 가지고 있는지 알아내는 명령어이다. 물건을 가지고 있으면 물건의 개수를 얻고, 가지고 있지 않으면 0을 얻는다. 45

[실행 전] [실행 후] [프로그램 코드] 플레이봇! 토마토를 옮겨라. 플레이봇! 토마토를 옮겨라. pick_object() put_object( 토마토 ) [실행 전] [실행 후] [프로그램 코드] 플레이봇! 농구공을 모두 옮겨라. 플레이봇! 농구공을 모두 옮겨라. pick_object() pick_object() pick_object() put_object( 농구공 ) put_object( 농구공 ) put_object( 농구공 ) [실행 전] [실행 후] [프로그램 코드] 플레이봇! 2번 칸에 있는 물건의 이름은 무엇이고, 몇 개 있는지 알아내라. 플레이봇! 2번 칸에 있는 물건의 이름은 무엇이고, 몇 개 있는지 알아내라. a=what_object() b=count_object() document.write(a) document.write(b) [실행 전] [실행 후] [프로그램 코드] 플레이봇! 꽃이 전부 몇 송이인지 계산해서 보고해라. 플레이봇! 꽃이 전부 몇 송이인지 계산해서 보고해라. a=count_object() b=count_object() c=a+b document.write(c) 46

3.7 비퍼(beeper)함수 비퍼 관련 함수에는 비퍼의 개수를 세는 count_beeper() 함수와 비퍼를 줍는 pick_beeper() 함수, 로봇이 가지고 있는 비퍼를 내려놓는 put_beeper() 함수가 있다. 이해학습 문제 1 a의 상태에서 플레이봇이 오른쪽으로 이동하고 있다. 비퍼가 6개 놓인 곳에서 1개를 주워 c와 같이 다른 위치(6,1) 에 옮겨 놓도록 b영역에 프로그램을 코딩해 보세요. a b c 문제 2 a에 count_beeper() 명령어를 쓸 경우와 pick_beeper() 명령어를 쓸 경우 로봇이 가지고 있는 비퍼의 개수를 각각 적어보세요. a 47

3.8 front_is_clear 함수 로봇의 앞쪽에 장애물(벽 또는 문)이 있는지 없는지 알아내는 명령어이다. 장애물이 없으면 true 를 돌려주고, 있으면 false 를 돌려준다. 방향에 따라 left_is_clear(), right_is_clear(), back_is_ clear()를 사용할 수 있다. 실행전 실행후 프로그램 코드 a = front_is_clear() document.write(a) a = back_is_clear() document.write(a) a = front_is_clear() document.write(a) a = back_is_clear() document.write(a) a=right_is_clear() document.write(a) a=left_is_clear() document.write(a) 48

이해학습 문제 1 플레이봇이 그림과 같이 (3,2)의 위치에서 남쪽을 바라보고 있고, 로봇의 앞과 뒤, 왼쪽은 벽으로 둘려싸여 있다. 실행전과 같은 상황에서 플레이봇이 앞쪽으로 탈출이 가능하면 앞쪽 탈출 가능 불가능하면 앞쪽 탈출 불가능 이라고 출력하는 프로그램 코드를 작성해 보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇! 현재 위치에서 앞쪽으로 탈출이 가능한지 알아내서 즉시 보고하라. 오바. a = front_is_clear() if (a == true) { b = 앞쪽 탈출 가능 else { b = 앞쪽 탈출 불가능 document.write(b) 문제 2 위의 코딩 결과 앞쪽 탈출 불가능 이라고 출력됐다. 현재의 상태에서 앞쪽 탈출 가능 이라고 출력되려면 어떻게 해야 하는지 프로그램 코드를 고쳐보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇! 현재 위치에서 앞쪽 탈출이 가능하게 움직 여라. 오바. turn_left() turn_left() turn_left() a = front_is_clear() if (a == true) { b = 앞쪽 탈출 가능 else { b = 앞쪽 탈출 불가능 document.write(b) 49

3.9 front_is_door 함수 front_is_door() 함수는 로봇 앞쪽의 장애물이 문인지 벽인지 알아내는 명령어이다. 앞쪽 장애물이 문이면 true 를 돌려주고, 아니면 false 를 돌려준다. 방향에 따라 왼쪽, 오른쪽, 뒷쪽일 경우 각각, left_is_door(), right_is_door(), back_ is_door()를 사용할 수 있다. 실행전 실행후 프로그램 코드 a = front_is_door() document.write(a) a = left_is_door() document.write(a) a = right_is_door() document.write(a) a = back_is_door() document.write(a) a = front_is_door() document.write(a) a = left_is_door() document.write(a) a = right_is_door() document.write(a) a = back_is_door() document.write(a) 50

3.10 open_front_door() 함수 open_front_door함수는 플레이봇의 앞에 있는 문을 열 때 사용하는 명령어이다. 문이 플레이봇의 앞쪽에 있을 때만 열 수 있다. 반대로 close_front_door함수는 플레이봇의 앞에 있는 문을 닫을 때 사용하는 명령어이다. 마찬가지로 문이 플레이봇의 앞쪽에 있을 때만 닫을 수 있다. 실행전 실행후 프로그램 코드 open_front_door() turn_left() turn_left() open_front_door() 이해학습 문제 1 실행전과 같이 로봇이 남쪽을 향해 서있을 때, 로봇의 앞, 뒤, 왼쪽은 벽으로 막혀 있고, 오른쪽에는 문이 있다. 로봇이 오른쪽의 문을 열고 탈출할 수 있게 코드를 작성해 보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇! 너는 지금 사방에 막힌 공간에 갇혀있다. 주위를 둘러보고 문을 찾아서 탈출하라. 오바 플레이봇! 너는 지금 사방에 막힌 공간에 갇혀있다. 주위를 둘러보고 문을 찾아서 탈출하라. 오바 function find_door() { a = front_is_door() if (a!= true) { turn_left() else { open_front_door() repeat( find_door(), 4) 51

3.11 set_color 함수 set_color() 함수는 셀을 색칠할 때 사용하는 명령어이다. set_color(x, y, 색상)과 같이 x, y 좌표가 주어지면 해당 셀에 색을 칠하고, set_color(색상)과 같이 좌표가 주어지지 않으면 로봇이 위치한 셀을 색칠한다. 3.12 get_color 함수 get_color() 함수는 셀에 칠해진 색을 알아낼 때 사용하는 명령어이다. get_color(x, y)과 같이 x, y 좌표가 주어지면 해당 셀의 색을 알아내고, get_color()과 같이 좌표가 주어지지 않으면 로봇이 위치한 셀의 색을 알아낸다. 3.13 get_x, get_y 함수 플레이봇이 위치한 셀의 x좌표와 y좌표를 알아내는 명령이다. 월드의 최소 좌표값이 1이므로 항상 1이상의 숫자를 돌려준다. [실행 전] [실행 후] [프로그램 코드] 플레이봇이 과일가게에서 토마토를 사려고 합 니다. 토마토를 팔고 있는 가게의 위치에 x좌 표와 y좌표로 출력하고 토마토 주세요를 출력 해 보세요 플레이봇이 과일가게에서 토마토를 사려고 합 니다. 토마토를 팔고 있는 가게의 위치에 x좌 표와 y좌표로 출력하고 토마토 주세요를 출력 해 보세요 turn_left() turn_left() turn_left() turn_left() x=get_x() y=get_y() name=what_object() document.write( 로봇의 x 좌표는 +x) document.write( 로봇의 y 좌표는 +y) document.write(name+ 주세요 ) 3.14 get_max_x, get_max_y 함수 현재 월드의 x좌표와 y좌표의 최대 크기를 알려준다. 52

3.15 get_direction 함수 플레이봇이 어느 방향을 바라보고 있는지 알아내는 명령어이다. 플레이봇이 바라보는 방향에 따라 0, 1, 2, 3을 돌려준다. 오른쪽(동) 위쪽(북) 왼쪽(서) 아래쪽(남) 로봇의 방향 돌려주는 결과 0 1 2 3 [실행 전] [실행 후] 플레이봇이 (1,1)에서 출발하여 (4,1), (4,2), (1,2)위치를 차례로 방문할 때, 각각의 위치에서 어느 방향을 바라보고 있는지 확인한 값 을 출력해 보세요. 플레이봇이 (1,1)에서 출발하여 (4,1), (4,2), (1,2)위치를 차례로 방문할 때, 각각의 위치에서 어느 방향을 바라보고 있는지 확인한 값을 출력해 보세요. [프로그램 코드] b1=get_direction() turn_left() b2=get_direction() turn_left() b3=get_direction() turn_left() b4=get_direction() document.write( 방향 확인 값 = + b1) document.write( 방향 확인 값 = + b2) document.write( 방향 확인 값 = + b3) document.write( 방향 확인 값 = + b4) 53

이해학습 문제 1 그림과 같이 플레이봇이 강아지에게 먹이를 주러 강아지 집까지 가려고 합니다. 강아지 집에 도착했을 때 플레이봇의 x좌표와 y좌표를 출력하고, 이때 플레이봇이 향하고 있는 방향을 출력해 보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇이 강아지 집에 먹이를 주러 가려 고 합니다. 강아지 집에 도착했을 때 플레이 봇의 x좌표와 y좌표를 출력하고 이때 플레 이봇이 향하고 있는 방향을 알아보세요. 플레이봇이 강아지 집에 먹이를 주러 가려 고 합니다. 강아지 집에 도착했을 때 플레이 봇의 x좌표와 y좌표를 출력하고 이때 플레 이봇이 향하고 있는 방향을 알아보세요. turn_left() x = get_x() y = get_y() d = get_direction() if (d==0) { z= 동쪽 else if (d==1) { z= 북쪽 else if (d==2) { z= 서쪽 else { z= 남쪽 document.write( X의 좌표는 +x) document.write( Y의 좌표는 +y) document.write( 방향은 + z) 54

3.16 direction_is_east/north/south/west 함수 플레이봇이 동쪽, 북쪽, 서쪽, 남쪽 방향 중 어느 방향을 향하고 있는지 확인하는 함수이다. [실행 전] [실행 후] [프로그램 코드] 플레이봇이 다음의 같은 방향으로 길을 가고 있 다. 이때 direction함수가 동, 북, 서, 남의 방향 에 따라 돌려주는 확인값을 출력해 보세요. 플레이봇이 다음의 같은 방향으로 길을 가고 있 다. 이때 direction함수가 동, 북, 서, 남의 방향 에 따라 돌려주는 확인값을 출력해 보세요. b1=direction_is_east() b2=direction_is_north() b3=direction_is_south() b4=direction_is_west() document.write( 동쪽방향 확인 값 = + b1) document.write( 북쪽방향 확인 값 = + b2) document.write( 서쪽방향 확인 값 = + b3) document.write( 남쪽방향 확인 값 = + b4) 55

4 사용자 정의 함수 4.1 사용자 정의 함수의 필요성 플레이봇에서 기본적으로 제공하고 있는 함수 이외에 프로그램을 작성하다 보면 사용자가 반복적으로 자주 쓰는 명령어가 생기게 마련이다. 이와 같이 프로그램 안에서 반복적으로 자주 사용하게 되는 함수를 모아 하나의 새로운 함수로 정의한 후 사용할 수 있는데 이를 사용자 정의 함수라고 한다. 사용자 정의 함수를 만들기 위해서는 우선은 프로그램 안에서 반복적으로 사용되는 규칙성을 찾아야 하고, 새로 지정할 함수의 이름을 정해야 한다. 그 후 프로그램 안에서는 새로 지정된 함수를 마치 내장함수처럼 이름만 불러서 사용할 수 있다. 내장 함수 사용자 정의 함수 설명 프로그래밍 언어에 이미 만들어져 있는 함수 특별한 준비 없이 바로 사용할 수 있음 이름이 고정되어 바꿀 수 없음 사용자가 필요할 때 직접 만들어 사용하는 함수 만들기 전에는 사용할 수 없음 이름을 마음대로 정해서 사용할 수 있음 예 turn_off() repeat() turn_left() turn_right() 4.2 사용자 정의 함수 만들기 1 turn_right 함수 만들기 [필요성] 플레이봇에게는 왼쪽으로 90도 회전 하는 명령어는 있지만, 오른쪽으로 90도 회전 하는 명령어는 없다. 그래서 다음과 같이 오른쪽으로 회전을 하기 위해서는 turn_left()를 반복해서 사용해야 한다. [실행 전] [실행 후] [프로그램 코드] turn_left() turn_left() turn_left() turn_left() 이때 사용자 정의 함수로 turn_right()를 만들어 사용하면 turn_left()를 여러 번 사용하는 불편함을 개선할 수 있다. 56

[만들기] turn_left()를 3번하는 수고를 덜기 위해 turn_right() 함수를 다음과 같이 만들 수 있다. [turn_right()만들기] [프로그램 코드] [실행 후] 2 turn_around 함수 만들기 [필요성] 플레이봇이 뒤로 돌아서게 하려면 왼쪽으로 90도 회전 하는 명령어를 2번 사용해야 한다. 아래 그림에서 보는 것처럼 플레이봇의 등 뒤에 문이 있을 경우, 플레이봇 내장함수만을 이용해 코딩을 하면 turn_left()명령을 2번 실행한 후에 문을 열고 나와야 한다. [실행 전] [실행 후] [프로그램 코드] turn_left() turn_left() open_front_door() 이러한 불편함을 개선하기 위해 오른쪽으로 90도 회전하는 turn_right()처럼 뒤로 돌아서는 turn_around() 함수를 만들어 사용해야 한다. [만들기] 플레이봇이 현재의 방향에서 반대방향으로 뒤돌아서는 명령어를 만든다. [turn_around()만들기] [프로그램 코드] [실행 후] 57

5 조건문 5.1 조건문이란 if문은 영어에서 만약~라면 이라는 말이다. if 문은 조건에 따라 처리를 다르게 할 때 사용한다. 조건에는 비교연산자와 논리연산자를 사용한 조건식을 지정한다. 하나의 조건에 근거하여 다음에 실행할 처리를 결정하는 수행문으로 조건문 (statement)에 의해 하나의 조건이 참(true)인지 거짓(false)인지를 판정하고, 그것에 따라서 다음 처리를 결정한다. 조건문에 들어있는 조건식의 결과는 두 가지로 구분할 수 있으며 그 결과를 흔히 예 or 아니오, 맞음 or 틀림, 참 or 거짓, 0과 1 등과 같은 표현으로 사용한다. 다음은 조건식의 결과에 따른 의미를 표현한 예이다. 숫자 표현 Boolean 표현 의미 1 true 참, 맞음 0 false 거짓, 틀림 if (조건식) { 결과가 true일 때 C실행되는 부분 (조건식)의 결과가 true일 때 C를 실행 (조건식)의 결과가 false일 때 다음 문장을 실행 if (조건식) { 결과가 true일 때 A실행되는 부분 else { 결과가 false일 때 B실행되는 부분 (조건식)의 결과가 true일 때 else 위쪽 A를 실행 (조건식)의 결과가 false일 때 else 아래쪽 B를 실행 58

5.2 if 조건문의 종류 if 문 if...else 문 if(조건식) if(조건식) true false true false 처리1 처리1 else 처리2 if 문 조건이 만족하면 처리1을 수행(true:파란선)하고 만족하지 않으면 다음문장을 수행(false:빨간선)한다. if...else...문 조건이 만족하면 처리 1을 수행(true:파란선)하고, 만족하지 않을 때는 처리 2를 수행(false:빨간선)한다. if...else if... 문 다중 if 문 if(조건식1) if(조건식1) true false true false 처리1 IF (조건식2) else if (조건식2) true 처리 1-1 else 처리 1-2 처리2 else else 처리2 처리3 if..else if...문 조건식1을 만족하면 처리1을, 만족하지 않으면 조건식2를 확인한다. 조건2를 만족하면 처리2를 수행(true:파란선)하고, 만족하지 않으면 처리3을 수행(false:빨간선)한다. 다중 if문 if문 안에 다른 if문을 포함하고 있는 경우로 조건식1을 만족하면 네스트 if문을 수행하고, 조건식1을 만족하지 않으면 처리2를 수행한다. 59

[실행 전] [실행 후] [프로그램 코드] 플레이봇! 현재 위치에서 앞쪽으로 탈출이 가능한지 알아내서 즉시 보고하라. 오바. a = front_is_clear() if (a == true) { b = 앞쪽 탈출 가능 else { b = 앞쪽 탈출 불가능 document.write(b) [실행 전] [실행 후] [프로그램 코드] 플레이봇 현재 너의 앞에 놓여있는 3개의 숫자 중 5보다 크거나 같은 숫자를 모두 주워와라 플레이봇 현재 너의 앞에 놓여있는 3개의 숫자 중 5보다 크거나 같은 숫자를 모두 주워와라 function get_number() { a = count_beeper() if (a >= 5) { repeat( pick_beeper(), a) repeat( get_number(), 3) 60

6 변수와 연산자 6.1 변수란? 변수란 숫자와 문자를 담아두는 상자와 같은 것으로, 변수의 이름을 정하는 규칙은 다음과 같다. 변수 이름에는 영문자, 숫자, 밑줄(_), 한글만 사용 가능함 특수문자를 사용할 수 없음 (예,!%^&* 등) 대소문자를 구별하고 첫 번째 문자에 숫자를 사용할 수 없음 플레이봇에서 이미 사용 중인 예약어는 변수로 사용할 수 없음 (예, if, for, function 등) 50과 20을 각각 a와 b의 변수에 담아 합계를 구한 값을 c에 넣는 과정을 그림으로 표현하면 다음과 같다. a=50 a에 50이 담긴다. b=20 b에 20이 담긴다. c=a+b c는 20과 50을 더한 70이 담긴다. 이것을 프로그램으로 표현해 보면 다음과 같이 나타낼 수 있다. [프로그램] a=50 b=20 c=a+b document.write(c) 변수 a에 50을 넣어라. 변수 b에 20을 넣어라. 변수 c에 a+b의 값을 넣어라. 변수 c의 값을 화면에 출력해라. [출력결과] 61

6.2 연산자란 연산자는 계산에 사용되는 +, - 같은 기호를 말한다. 연산자는 산술연산자뿐만 아니라 값을 비교할 수 있는 비교연산자, 조건을 판단할 수 있는 논리연산자 등이 있다. 1 산술연산자 숫자 계산에 사용되는 +, -, *, /, %, 등을 산술연산자라고 한다. 연산자 기능 사용법 의미 + 더하기 c=a+b a와 b를 더한 값을 c에 대입한다. - 빼기 c=a-b a에서 b를 뺀 값을 c에 대입한다. * 곱하기 c=a*b a와 b를 곱한 값을 c에 대입한다. / 나누기 c=a/b a를 b로 나눈 값을 c에 대입한다. % 나머지 c=a%b a를 b로 나눈 후 나머지 값을 c에 대입한다. 그밖의 산술연산자로 값을 1씩 증가하는 증가 연산자와 1씩 감소하는 감소연산자가 있다. 명칭 연산자 기능 사용법 의미 증가연산자 ++ 변수의 값을 1증가 a++ 또는 ++a a의 값을 1증가 감소연산자 -- 변수의 값을 1감소 a-- 또는 --a a의 값을 1감소 62

a++와 ++a의 차이 b=a++ : 변수 a의 값을 변수 b에 대입한 후, a를 1 증가시킴 b=++a : 변수 a의 값을 1 증가시킨 후, 변수 b에 a의 값을 대입 a++ ++a a=5 b=a++ document.write(a) document.write(b) [출력결과] a=5 b=++a document.write(a) document.write(b) [출력결과] 이해학습 문제 1 플레이봇 앞쪽에 두 개의 숫자가 놓여있다. 두 숫자를 변수에 저장한 후 홀수인지 짝수인지 판단하여 그 결과를 출력하시오. [실행 전] [실행 후] [프로그램 코드] 플레이봇 현재 너의 앞에 두개의 숫자가 놓여있다. 그 숫자가 홀수인지, 짝수인지 구별해 보아라 플레이봇 현재 너의 앞에 두개의 숫자가 놓여있다. 그 숫자가 홀수인지, 짝수인지 구별해 보아라 function check_number() { a = count_beeper() b = a % 2 if (b == 0) { c = a + 은 짝수이다. else { c = a + 은 홀수이다. document.write(c) check_number() check_number() 63

2 비교연산자 변수나 숫자 등의 값을 비교하여 조건식을 만들고 그 결과에 따라 처리를 변경할 수 있다. 이때 사용하는 연산자를 비교연산자라고 한다. 조건이 성립하는 경우는 true, 성립하지 않을 경우에는 false를 반환한다. 연산자 기능 사용법 의미 == 같다 a==b a와 b는 같다.!= 같지 않다. a!=b a는 b는 같지 않다. > 크다 a>b a는 b보다 크다. < 작다 a<b a는 b보다 작다. >= 크거나 같다 a>=b a는 b보다 크거나 같다. <= 작거나 같다 a<=b a는 b보다 작거나 같다. 조건식은 그 자체가 값을 갖고 있다. 다음 그림에서 보는 것처럼 조건식이 false일 때는 0, true일 때는 1의 값을 갖는다. 64

이해학습 문제 1 플레이봇 앞쪽에 놓여있는 3개의 숫자가 얼마인지 알아내서 5보다 작은 숫자를 모두 주워 오는 프로그램을 만들어 주세요. [실행 전] 플레이봇! [실행 후] 플레이봇! [프로그램 코드] 현재 너의 앞쪽에 3개의 숫자가 놓여 있다. 그 중 5보다 작은 숫자의 비퍼를 모두 주워와라 현재 너의 앞쪽에 3개의 숫자가 놓여 있다. 그 중 5보다 작은 숫자의 비퍼를 모두 주워와라 function get_number() { a = count_beeper() if (a < 5) { repeat( pick_beeper(), a) repeat( get_number(), 3) [문제 해결 전략] 1 앞으로 한 칸 이동해서 비퍼의 개수를 알아낸다. 2 비퍼의 개수가 5보다 작은지 판단한다. 3 5보다 작으면 비퍼를 모두 줍고, 5이상이면 아무 것도 하지 않는다. 65

3 논리연산자 여러 개의 조건을 조합하여 보다 복잡한 조건을 나타낼 때 사용하는 것이 논리 연산자이다. 연산자 기능 사용법 의미 && 그리고 (a>=5)&&(a<10) 또는 (a==5) (a==10)! 부정!(a==5) (a는 5보다 크거나 같다) 그리고 (a는 10보다 작다) 따라서 a는5보다 크거나 같고 10보다 작은 수 (a는 5와 같다) 또는 (a는 10과 같다) 따라서 a의 값은 5 또는 10 (a는 5와 같다)가 아니다 따라서 a는 5가 아니다 논리연산자의 표현 a와 b를 모두 만족한다. a또는 b 중 어느 한쪽만 만족한다. a가 아니다. 66

이해학습 문제 1 플레이봇이 길을 가다가 장애물을 만났다. 장애물이 문일 경우 문을 열고 통과 할 수 있도록 프로그램을 작성하세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇이 길을 가다가 장애물을 만났다. 장애 물이 문일 경우 문을 열고 통과할 수 있도록 프로 그램을 작성하세요. 플레이봇이 길을 가다가 장애물을 만났다. 장애 물이 문일 경우 문을 열고 통과할 수 있도록 프로 그램을 작성하세요. a = front_is_clear() b = front_is_door() if (a==false && b==true) { open_front_door() else{ 67

7 반복문 7.1 반복문이란 같은 모양이나 색이 반복된다면 그것을 규칙적이라고 한다. 반복되는 규칙은 우리 생활에서도 많이 발견할 수 있다. 다음의 진영이와 민수가 체조하는 모습을 잘 살펴보자. 진영이는 두 동작을 반복해서 하고 있고, 민수는 세 동작을 반복해서 하고 있다. 진영 민수 우리는 반복되는 부분을 통해 그다음에 어떤 것이 나올지 예측할 수 있으며, 바꿔 생각하면 규칙을 찾는다는 것은 바로 알 수 없는 일을 미리 예측해 보기 위한 사고 활동 중 하나이다. 프로그램도 마찬가지이다. 프로그램에서의 반복되는 규칙이란 진영과 민수의 동작 반복과 같이 특정한 부분을 반복해서 실행하는 구조를 말한다. 예를 들면 학생들의 학번, 건물의 층, 버스의 좌석표 등과 같이 숫자가 일정한 간격으로 증가 또는 감소하는 경우에서 많이 볼 수 있다. 개수 시작... 끝 시작 조건 증감 (반복횟수) 0 1 2 3 4 5 6 7 8 9 0 숫자<=9 +1 10 721 722 723 724 725 726 727 728 750 721 숫자<=750 +1 30 7 6 5 4 3 2 1 7 숫자>=1-1 7 0 2 4 6 8 10 12 14 20 0 숫자<=20 +2 11 68

7.2 for문 for문은 반복처리를 효율적으로 수행하기 위한 제어문이다. 일반적으로 초기값, 반복을 계속하기 위한 조건, 증가방법을 차례로 표기하며 이 세 가지 요소에 의해 반복횟수를 결정된다. for문의 구조는 다음과 같다. 초기값 반복을 계속하기 위한 조건 증가방법 지정 for ( i=0 ; i<=9 ; i++) { 해야 할 일 i=0 : i라는 변수의 값을 0으로 시작 해서 i<=9 : i의 값이 9보다 작거나 같은 동안 i++ : i를 1씩 증가 시키면서 { 해야 할 일 을 반복합니다. ( 0부터 9까지 총 10번) 그럼 중국집에서 짜장면 다섯 그릇을 만드는 일을 반복문으로 표현해 보자. 우선 첫 번째 그릇부터 만들기 시작하고, 두 번째 그릇, 세 번째 그릇... 이렇게 한 그릇씩 증가하면서 반복을 하다가 다섯 그릇이 다 만들어지면 만들기를 멈춘다. 이 과정을 for문으로 표현하면 다음과 같다. 중국집이죠? 짜장면 5그릇 배달해 주세요. 자.. 지금부터 1그릇씩 만들어 볼까? [반복 작업 발생] 해야할일 짜장면 만들기라는 반복된 작업 초기값 1그릇부터 만들기 시작 [for문 적용] for ( i=1 ; i<=5 ; i++ ) { 짜장면 만들기 조건 5그릇보다 작거나 같은 동안 만들기 증가방법 1그릇씩 증가 69

for문은 한 개를 사용하는 형태와 for문 안에 for문을 사용하는 형태가 있다. for문 안에 for문을 사용하는 형태를 다중 for 문이라고 하며 다음과 같은 형태를 갖는다. for 문 for(초기값, 조건, 증가) 처리 [프로그램 코드] for (i=0 ; i<=5 ; i++) { document.write(i) i=0일 때 출력 0 i=1일 때 출력 1 i=2일 때 출력 2 i=3일 때 출력 3 i=4일 때 출력 4 i=5일 때 출력 5 [출력결과] 다중 for 문 for(초기값, 조건, 증가) for(초기값, 조건, 증가) 처리 [프로그램 코드] for (i=1; i<=2; i++) { for (j=1; j<=3; j++) { document.write(i+j) i=1, j=1 일 때 출력 2 i=1, j=2 일 때 출력 3 i=1, j=3 일 때 출력 4 i=2, j=1 일 때 출력 3 i=2, j=2 일 때 출력 4 i=2, j=3 일 때 출력 5 [출력결과] 70

[실행 전] 플레이봇 유치원 어린이들~! 0부터 9까지 숫자를 세어볼까요~? 시작 : 0 조건 : 9보다 작거나 같은 동안 증감 : 1씩 증가 [실행 후] [프로그램 코드] for (i=0 ; i<=9 ; i++) { document.write(i) [실행 전] 플레이봇 유치원 어린이들~! 이번에는 1부터 100까지 숫자를 세면서 그 숫자들을 모두 더해볼까요~? 결과는 얼마인가요~? 시작 : 1 조건 : 100보다 작거나 같은 동안 증감 : 1씩 증가 [실행 후] [프로그램 코드] a=0 for (i=1 ; i<=100 ; i++) { a=a+i b= 1~100 숫자를 모두 더하면 +a document.write(b) [실행 전] 플레이봇! 운동회를 맞이하여 육상 경기장에 레인을 표시해 야 한다. 4명이 달릴 수 있도록 1~4까지 레인 번호 를 표시해라. 오바. [실행 후] 플레이봇! 운동회를 맞이하여 육상 경기장에 레인을 표시해 야 한다. 4명이 달릴 수 있도록 1~4까지 레인 번호 를 표시해라. 오바. [프로그램 코드] for (i=1 ; i<=4 ; i++) { repeat( put_beeper(), i) [반복하는 행동 찾기] 1 한 칸 앞으로 이동하는 행동 2 레인 번호를 표시하는 행동 71

[실행 전] 플레이봇 유치원 어린이들~! 바닥 칸에 하늘색을 칠해볼까요~? [반복하는 행동 찾기] 1 한 칸 앞으로 이동하는 행동 2 하늘색을 칠하는 행동 [실행 후] 플레이봇 유치원 어린이들~! 바닥 칸에 하늘색을 칠해볼까요~? [프로그램 코드] function fillcolor() { mx = get_max_x() mx = mx - 1 for (i=1 ; i<=mx ; i++) { set_color( skyblue ) fillcolor() [실행 전] 플레이봇 유치원 어린이들~! 바닥에 칠해진 색이 무엇인지 말해볼까요? [반복하는 행동 찾기] 1 한 칸 앞으로 이동하는 행동 2 바닥의 색을 알아내는 행동 3 알아낸 색을 말하는 행동 [실행 후] 플레이봇 유치원 어린이들~! 바닥에 칠해진 색이 무엇인지 말해볼까요? [프로그램 코드] function whatcolor() { mx=get_max_x() mx = mx - 1 for (i=1 ; i<=mx ; i++) { a=get_color() document.write(a) whatcolor() 72

7.3 while문 while문은 어떤 조건이 성립하는 동안만 반복을 수행하는 제어문이다. for문과 다른 점은 증가하는 숫자가 없다는 것이다. 주로 키보드로부터 입력을 받는 중 반복 횟수를 알 수 없을 때 사용한다. 즉, while문은 반복을 수행하는 횟수가 미리 정해져 있지 않을 때 사용한다. while 문 while (조건) 처리 [프로그램 코드] i=0 s=0 while (i<5) { s=s+i i++ document.write( 1부터 4까지의 합 = +s) [출력결과] do~while 문 do 처리 while (조건) [프로그램 코드] i=0 s=0 do{ i++ s=s+i while(i<4) [출력결과] document.write( 1부터 4까지의 합 = +s) 73

7.4 switch문 switch문은 여러 개의 case라는 선택의 가지에서 조건식의 값과 일치하는 것을 골라 해당되는 처리를 실행한다. 조건식의 값은 숫자와 문자 모두 가능하며, 어떤 case와도 맞지 않을 경우는 default로 넘어간다. 각 case의 마지막에는 break 문을 써서 조건식의 값과 일치하는 선택만 처리할 수 있도록 한다. switch 문 switch(조건식) case 값1 : 처리1 break; case 값2 : 처리2 break;... case 값2 : 처리 다음 명령어 처리 [프로그램 코드] a=get_random(0,4) switch (a) { case(1): b= 도 c=1 break case(2): b= 개 c=2 break case(3): b= 걸 c=3 break case(4): b= 윷 c=4 break default: b= 모 c=5 d= 뒤집힌 막대수는 +a document.write(d) document.write(b) [출력결과]... 74

8 배열 8.1 배열이란 동일한 특성을 가지며 일정한 규칙에 따라 몇몇 요소가 나열되어 있는 데이터 집합을 묶어서 배열이라고 한다. 배열은 복수의 동일한 형의 변수를 하나로 묶은 것으로 대량의 데이터를 취급할 때나 여러 데이터를 차례로 자동적으로 입출력해야 할 때 사용하면 편리하다. 배열은 하나의 공간을 여러 개의 셀로 나누고, 셀마다 데이터를 저장한다. 아래의 그림을 예로 설명하면 a라는 배열은 4개의 셀(a[0], a[1], a[2], a[3])로 나눠져 있다. 그리고 a[0]= 야구공, a[1]= 배구공, a[2]= 농구공, a[3]= 축구공 이 각각 들어 있다. 75

8.2 배열의 종류 배열은 요소의 수에 따라 x축으로 늘어나는 것을 1차원 배열, x축과 y축으로 늘어나는 것을 2차원 배열이라고 한다. [프로그램 코드] [출력결과] a=new Array() a[0]= 유재석 a[1]= 강호동 a[2]= 신동엽 a[3]= 김연아 a[4]= 손연재 b=a.length document.write( 상자의 개수는 + b) for (i=0 ; i<=b-1 ; i++) { document.write(a[i]) [프로그램 코드] [출력결과] a=new Array() a[0]=new Array( 현아, 신우, 태우, 보영 ) a[1]=new Array( 민아, 산들, 호영, 영수 ) b=a.length document.write( 줄의 개수는 + b) for (i=0 ; i<=b-1 ; i++) { p= a[ +i+ ] for(j=0; j<=b+1 ;j++){ q= [ +j+ ] = document.write(p+q+a[i] [j]) 76

이해학습 문제 1 플레이봇이 토마토 과일 가게를 방문해서 토마토를 사려고 합니다. 다음과 같이 나열되어져 있는 과일 가게를 차례로 방문하여 토마토 가게에 도착하였을 때의 토마토 가게의 위치를 (x좌표, y좌표)의 형태로 출력하고 토마토 주세요. 를 출력해 보세요. [실행 전] [실행 후] [프로그램 코드] 플레이봇이 과일가게에서 토마토를 사려고 합 니다. 토마토를 팔고 있는 가게의 위치에 (x좌 표, y좌표)로 출력하고 토마토 주세요를 출력 해 보세요 플레이봇이 과일가게에서 토마토를 사려고 합 니다. 토마토를 팔고 있는 가게의 위치에 (x좌 표, y좌표)로 출력하고 토마토 주세요를 출력 해 보세요 function turn_right() { turn_left() turn_left() turn_left() fruit=new Array() fruit[0]= 딸기 fruit[1]= 토마토 fruit[2]= 포토 fruit[3]= 수박 turn_left() turn_right() do{ b=what_object() while(b!== 토마토 ) x=get_x() y=get_y() d= 가게의 위치는 ( +x e=y+ ) document.write(d+, +e) document.write(b+ 주세요 ) 77

실전편 실 전 편 움직이는 플레이봇 움직이는 플레이봇 78

1. 패턴 디자인하기 난이도 1. 수업안내 학습목표 플레이봇 기본 명령어를 사용해서 로봇을 움직일 수 있다. 플레이봇 기본 명령어를 활용하여 규칙적인 무늬를 디자인 할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 주 학습 내용 참고 34쪽 turn_left() set_color() 36쪽 52쪽 set_text() 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 월드와 코드를 각각 저장해야 한다. 색깔 영어 단어 표현을 미리 알려준다. 미리 제시된 패턴을 따라하지 않고 자신만의 디자인으로 표현할 수 있도록 지도한다. 핵심사고 평가기준 플레이봇의 기본 명령어를 활용하여 플레이봇을 움직일 수 있는가? 플레이봇 기본 명령어를 활용하여 규칙적인 무늬를 디자인 할 수 있는가? 79

2. 수업 전개 상황을 통한 동기유발 우리 주위에 가구, 의류 등의 디자인으로 많이 활용되는 패턴디자인이다. 내 방안의 가구에 패턴 디자인을 입혀서 방안 분위기를 바꿔보자. 학습할 문제 확인하기 문제 제시 평소 디자이너가 되고 싶었던 플레이봇은 여러 방면에 널리 활용되는 패턴디자인에 부쩍 관심이 많아 졌습니다. 색깔을 이용해서 멋진 패턴을 만들어 주세요. 학습 안내 - 첫 번째 문제 상황 확인하기 - 첫 번째 문제 해결 과정 스스로 생각하기 - 두 번째 문제 상황 확인하기 - 두 번째 문제 해결 과정 스스로 생각하기 - 코딩 [활동 1] 첫 번째 문제 상황 확인하기 초기상태 목표상태 한 개의 명령어는 한 동작만 실행한다. 규칙적인 색의 배열로 패턴이 이루어져있다. 80

[활동 2] 첫 번째 문제 해결 과정 스스로 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 플레이봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 앞으로 한 칸 이동한다. 월드의 한 칸에 원하는 색을 칠한다. 왼쪽 또는 오른쪽으로 회전한다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 플레이봇이 앞으로 한 칸 이동한다. 2 플레이봇이 위치한 현재 칸의 색을 칠한다. 3 1~2를 5번 반복한다. 4 왼쪽으로 회전한 후, 앞으로 한 칸 이동하고, 색을 칠한다. 5 왼쪽으로 회전한 후, 1~2를 5번 반복한다. 6 오른쪽으로 회전한 후, 앞으로 한 칸 이동하고, 색을 칠한다. 7 오른쪽으로 회전한 후, 1~2를 5번 반복한다. 8 왼쪽으로 회전한 후, 앞으로 한 칸 이동하고, 색을 칠한다. 9 왼쪽으로 회전한 후, 1~2를 5번 반복한다. 활동 tip 학생들이 스스로 문제 해결하는 단계를 자세히 적을 수 있도록 지도한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() 로봇이 이동하는데 사용 34쪽 36쪽 set_color() 로봇이 위치한 칸을 색칠하는데 사용 52쪽 set_text() 로봇이 위치한 칸에 글을 쓰는데 사용 81

[작은 활동 1] 초기상태 목표상태 코딩 set_color( blue ) set_color( red ) 활동 tip 색깔에 대한 영어 단어 표현을 미리 알려준다. [활동 3] 두 번째 문제 상황 확인 하기 문제 제시 방안 벽지에 넣을 패턴을 디자인하려고 합니다. 플레이봇의 이름을 넣어서 벽지 디자인을 완성해 보세요. 초기상태 목표상태 4가지 색깔이 일정한 패턴으로 표현되었다. 2,3번째 행에 글씨가 쓰여진다. 활동 tip 패턴에 사용되는 색깔은 학생이 자유롭게 선택할 수 있도록 한다. 82

[활동 4] 두 번째 문제 해결 과정 스스로 생각하기 문제를 분석해 봅시다. 이 문제를 해결하기 위해 플레이봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 앞으로 한 칸 이동한다. 월드의 한 칸에 원하는 색을 칠한다. 월드의 한 칸에 원하는 글자를 쓸 수 있다. 문제 해결 절차를 순서대로 표현해 봅시다. 1 플레이봇이 한 칸 앞으로 움직인다. 2 현재 칸에서 색을 칠한다. 3 1~2를 5번 반복한다. 4 왼쪽으로 회전한 후, 앞으로 한 칸 움직이고, 색을 칠한다. 5 왼쪽으로 회전한 후, 1~2를 2번 반복한다. 6 앞으로 한 칸 이동한 후, 봇 이라는 글씨를 쓰고, 앞으로 한 칸 이동한 후, 이 라는 글씨를 쓴다. 7 앞으로 한 칸 움직인 후, 색을 칠한다. 8 오른쪽으로 회전한 후, 앞으로 한 칸 움직이고, 색을 칠한다. 9 오른쪽으로 회전, 앞으로 한 칸 이동한 후, 플 이라는 글씨를 쓰고, 앞으로 한 칸 이동한 후 레 라는 글씨를 쓴다. 10 1~2를 3번 반복한다. 11 왼쪽으로 회전한 후, 앞으로 한 칸 움직이고, 색을 칠한다. 12 왼쪽으로 회전한 후, 1~2를 5번 반복한다. 생각 뛰어넘기 봉사활동으로 어린이집에 간 플레이봇은 어린이집 벽화 그리기 미션을 맡았습니다. 플레이봇이 미션을 수행 할 수 있도록 프로그램을 작성해 봅시다. 83

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 플레이봇이 한 칸 앞으로 움직이게 하는 명령어는 무엇인가요? <A> <Q> 월드 한 칸에 색을 칠하는데 사용하는 명령어는 무엇인가요? <A> set_color() <Q> 월드 한 칸에 글씨를 쓰는데 사용하는 명령어는 무엇인가요? <A> set_text() 84

2. 심부름 하는 플레이봇 난이도 1. 수업안내 학습목표 물건 함수를 이해하고, 사용할 수 있다. document.write() 함수를 이해하고 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 앞으로 움직이는 명령어 를 학습했습니까? 왼쪽으로 회전하는 명령어 turn_left()를 학습했습니까? 34쪽 36쪽 주 학습 내용 참고 pick_object() 45쪽 put_object() what_object() open_front_door() 45쪽 45쪽 51쪽 document.write() 38쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 플레이봇을 움직일 수 있는 동작 함수에 대해 설명한다. 물건의 이름을 쓸 때는 따옴표를 사용한다. 핵심사고 평가기준 플레이봇 물건 함수를 활용하여 프로그램을 작성할 수 있는가? 문제 상황에 필요한 내용을 출력할 수 있는가? 85

2. 수업 전개 상황을 통한 동기유발 심부름 가는 길에 는 주인공 키코가 할머니 댁에 케이크를 갖다 드리는 길에 길을 잃어버리면서 펼쳐지는 즐거운 모험을 담은 그림책이다. 우리의 플레이봇도 엄마의 심부름으로 친구네 집에 가보자. 문제 제시 학습할 문제 확인하기 엄마 심부름으로 포도, 버섯, 호박을 친구네 집으로 가져가려고 합니다. 친구네 집에 도착한 후 문을 열고 포도, 버 섯, 호박을 놓는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 첫 번째 문제 상황 확인하기 초기상태 목표상태 플레이봇이 물건을 줍는 동작과 놓는 동작을 해결할 수 있는 명령어가 필요하다. 플레이봇이 문을 열고 들어갈 수 있는 동작에 대한 명령어가 필요하다. 86

[활동 2] 첫 번째 문제 해결 과정 스스로 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 플레이봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 물건을 줍고, 놓는 기능 문을 여는 기능 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 플레이봇이 앞으로 한 칸 이동한 후, 문을 연다. 2 앞으로 한 칸씩 이동하면서 포도, 버섯, 호박을 줍는다. 3 문을 열고, 앞으로 한 칸 움직인다. 4 친구네 집 문을 연다. 5 앞으로 한 칸씩 이동하면서 포도, 버섯, 호박을 놓는다. 6 앞으로 한 칸 이동 후 친구 엄마에게 가지고 온 물건에 대해 이야기한다. 활동 tip 학생들이 스스로 문제를 해결하는 단계를 자세히 적어볼 수 있도록 유도한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() 로봇이 이동하는데 사용 34쪽 36쪽 pick_object() 로봇이 물건을 줍는 데 사용 45쪽 put_object() 로봇이 물건을 놓는 데 사용 45쪽 open_front_door() 로봇이 문을 여는 동작에 사용 51쪽 document.write() 화면 하단에 내용 출력할 때 사용 38쪽 87

[활동 3] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 open_front_door() pick_object() pick_object() pick_object() open_front_door() open_front_door() put_object( 포도 ) put_object( 버섯 ) put_object( 호박 ) document.write( 아줌마 포도, 버섯, 호박 가지고 왔어요 ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [활동 4] 두 번째 문제 상황 확인하기 문제 제시 과일에 대한 답례로 친구 엄마가 직접 재배한 콩을 주셨다. 콩을 가지고 집에 가서 엄마에게 전달하는 내용을 보여 주는 프로그램을 만들어 보세요. 초기상태 목표상태 88

[활동 5] 두 번째 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 플레이봇이 한 칸 앞으로 움직인 후, 콩을 잡는다. 2 앞으로 한 칸 이동한 후, 문을 열고, 앞으로 두 칸 움직인다. 3 왼쪽으로 회전한 후, 앞으로 한 칸 움직이고, 오른쪽으로 회전한다. 4 문을 열고, 앞으로 한 칸 이동한 후, 콩을 놓는다. 5 엄마! 콩 가지고 왔어요 라고 말한다. [활동 6] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 a=what_object() pick_object() open_front_door() turn_left() turn_left() turn_left() turn_left() open_front_door() put_object(a) document.write( 엄마! 콩 가지고 왔어요 ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 89

생각 뛰어넘기 플레이봇이 할머니 댁에 케이크를 가져다 드리는 심부름을 하려고 합니다. 길을 잃어버리지 않고 케이크를 전달할 수 있도록 프로그램을 만들어 주세요. 초기상태 목표상태 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 플레이봇이 물건을 잡을 때 사용하는 명령어는 무엇인가요? <A> pick_object() <Q> 플레이봇이 물건을 놓을 때 사용하는 명령어는 무엇인가요? <A> put_object() <Q> 현재 칸에 있는 물건의 이름을 알아낼 때 사용하는 명령어는 무엇인가요? <A> what_object() <Q> 플레이봇이 문을 열 때 사용하는 명령어는 무엇인가요? <A> open_front_door() 90

3. 징검다리 건너기 난이도 1. 수업안내 학습목표 오른쪽으로 회전하는 사용자 정의 함수를 만들 수 있다. 문제 상황을 분석하고, 문제를 해결하기 위한 규칙성을 찾을 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 앞으로 움직이는 명령어 를 학습했습니까? 왼쪽으로 움직이는 명령어 turn_left()를 학습했습니까? 물건을 줍는 명령어 pick_object()를 학습했습니까? 34쪽 36쪽 45쪽 주 학습 내용 참고 사용자 정의 함수 56쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해 볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 플레이봇을 움직일 수 있는 동작 명령어에 대해 설명한다. 와 turn_left()의 무의미한 반복보다는 규칙성을 발견할 수 있도록 지도한다. 사용자 정의 함수를 이용하면 오른쪽으로 회전하기 명령어를 만들 수 있다. 새로운 명령어를 만드는 공간과 명령어를 실행하는 공간의 차이점을 이해할 수 있도록 설명한다. 핵심사고 문제분해 문제분해 평가기준 오른쪽으로 회전하는 명령어를 만들 수 있는가? 문제상황에서 반복되는 규칙성을 찾을 수 있는가? 91

2. 수업 전개 상황을 통한 동기유발 강원도 홍천강의 징검다리이다. 자연 그대로의 모양을 간직한 커다란 자연석 너레바위 157개가 맑은 물줄기를 따라 자연친화형으로 배치되었다. 이 징검다리를 이용하면 도시산림공원까지 이동할 수 있다. 추억의 징검다리를 재연해 놓은 곳은 서울의 청계천, 양재천 등 여러 곳이 있다. 학습할 문제 확인하기 문제 제시 플레이봇은 강원도 홍천에서 개최하는 나라꽃 무궁화축제에 참가하려고 합니다. 교통 혼잡을 피해 빨리 행사 장소로 이동하려고 홍천강 징검다리를 건너고자 합니다. 플레이봇이 강물에 빠지지 않고, 징검다리를 건널 수 있도록 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 물에 빠지지 않고, 징검다리를 건너야 한다. 총 3개의 징검다리를 건넌다. 징검다리 건너는 동작이 3번 반복된다. 92

[활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 왼쪽으로 회전하고, 한 칸 앞으로 간다. 2 오른쪽으로 회전하고, 두 칸 앞으로 간다. 3 오른쪽으로 회전하고, 한 칸 앞으로 간 후, 왼쪽으로 회전 한다. 4 1~3을 사용자 정의 함수를 활용하여 jump()라는 명령어로 만든 후, 3번 반복한다. 활동 tip 학생 스스로 로봇 동작의 규칙성을 발견할 수 있도록 도와준다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() 로봇이 이동하는데 사용 34쪽 36쪽 function 사용자 정의 함수를 만드는데 사용 56쪽 93

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 새로운 명령어 만들기 오른쪽으로 회전하기 - 왼쪽으로 회전하는 동작이 3번 반복된다. 초기상태 목표상태 코딩 turn_left() turn_right() function 함수이름( ) { function turn_right() { turn_left() turn_left() turn_left() [작은 활동 2] 새로운 명령어 - 징검다리 하나 건너는 동작 만들기 초기상태 목표상태 코딩 jump() function 함수이름( ) { function jump() { turn_left() turn_right() turn_right() turn_left() 94

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 징검다리를 건너는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function jump() { turn_left() turn_right() turn_right() turn_left() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 // 명령어를 실행하는 공간 jump() jump() jump() 활동 tip 사용자 정의 함수의 이름을 정하는 방법에 대해 설명한다. 생각 뛰어넘기 플레이봇이 징검다리 위에 있는 강아지를 구출해서, 집안으로 들어가는 프로그램을 만들어 보세요. 초기상태 목표상태 활동 tip 플레이봇이 물에 빠지지 않고, 징검다리를 건널 수 있도록 한다. 95

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 새로운 명령어는 왜 만들어서 사용하나요? <A> 규칙적으로 반복되는 명령어를 하나로 묶어서 사용하면 코딩을 간결하게 표현하는 것이 가능 <Q> 새로운 명령어 만들 때 사용하는 명령어는 무엇인가요? <A> function 함수이름(){ 96

4. 과일 배달하기 난이도 1. 수업안내 학습목표 변수와 연산자를 이해할 수 있다. 변수를 활용하여 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고, turn_left()를 학습했습니까? pick_object(), put_object()를 학습했습니까? 사용자 정의 함수를 학습했습니까? open_front_door()를 학습했습니까? 34쪽, 36쪽 45쪽 56쪽 51쪽 주 학습 내용 참고 변수 61쪽 산술연산자 62쪽 count_object() 45쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수에 대한 복습 및 학습이 이루어지도록 한다. 변수를 사용해야 하는 이유에 대해 설명한다. 수학에서의 = 와 대입연산자로서의 = 의 차이점에 대해 설명한다. 핵심사고 추상화 변수와 연산자의 의미를 설명할 수 있는가? 평가기준 변수와 연산자를 활용한 프로그램을 작성할 수 있는가? 97

2. 수업 전개 상황을 통한 동기유발 과일 주문이 들어오면 과일가게에서는 주문 수량만큼 종류별로 바구니(변수)에 과일을 담는다. 배달 바구니(변수-과일의 총합을 나타냄)에 미리 선별해 놓은 과일을 모두 담아서 배달한다. 문제 제시 학습할 문제 확인하기 플레이봇은 수박 2개, 딸기 1개, 포도 3개를 주문 받았습니다. 주문받은 과일을 하늘색 집에 배달하고, 배달한 과 일의 총합을 구하는 프로그램을 만들어 보세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 배달해야 할 과일의 종류는 총 3가지이다. 각 과일의 개수를 저장하는 변수와 과일의 총합을 구하는 변수가 필요하다. 플레이봇은 왼쪽, 오른쪽으로 회전한다. 배달할 장소에 도착하면 문을 열고 들어간다. 98

[활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 두 칸 이동 후, 수박의 개수를 세어 변수에 넣고, 수박을 줍는다. 2 앞으로 한 칸 이동 후, 딸기의 개수를 세어 변수에 넣고, 딸기는 줍는다. 3 앞으로 한 칸 이동 후, 포도의 개수를 세어 변수에 넣고, 포도를 줍는다. 4 문을 열고 나간 후, 왼쪽으로 회전한다. 5 앞으로 세 칸 이동한 후, 오른쪽으로 회전한다. 6 문을 열고 들어가서, 수박, 딸기, 포도를 주운 개수만큼 놓는다. 7 수박, 딸기, 포도 과일의 총합을 화면에 보여준다. 활동 tip 여러 개의 변수를 사용하는 이유에 대해 설명한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() 로봇이 이동하는데 사용 34쪽 36쪽 function 사용자 정의 함수를 만드는데 사용 56쪽 pick_object(), put_object() 물건을 줍거나, 놓는데 사용 45쪽 count_object() 현재 위치의 물건 개수를 세는데 사용 45쪽 document.write() 화면에 내용을 표시하는데 사용 38쪽 99

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 오른쪽으로 회전하는 명령어 만들기 - 왼쪽으로 회전하는 동작이 3번 반복된다. function turn_right() { turn_left() turn_left() turn_left() [작은 활동 2] 보석의 개수를 세는 방법 - count_object()를 이용하여 보석의 개수를 세고, 그 값을 변수 a에 저장한다. 초기상태 목표상태 코딩 a=count_object() document.write(a) <Q> 변수 이름을 사용할 때 규칙이 있나요? <A> 변수 이름에는 영문자, 숫자, 밑줄(_), 한글만 사용 가능함 특수문자를 사용할 수 없음 (예,!%^&* 등) 대소문자를 구별하고 첫 번째 문자에 숫자를 사용할 수 없음 플레이봇에서 이미 사용 중인 이름(예약어)은 사용할 수 없음 (예, if, for, function 등) <Q> a=1과 a==5의 차이점에 대해 설명하시오. <A> a=1은 a에 1을 저장한다. a==5는 a는 5와 같다. 활동 tip 산술연산자와 대입연산자의 설명은 이 프로그램 작성에 필요한 부분만 설명한다. 100

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 배달한 과일의 총합을 구하는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() // 명령어를 실행하는 공간 a=count_object() pick_object() pick_object() b=count_object() pick_object() c=count_object() pick_object() pick_object() pick_object() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 open_front_door() turn_left() turn_right() open_front_door() put_object( 수박 ) put_object( 수박 ) put_object( 딸기 ) put_object( 포도 ) put_object( 포도 ) put_object( 포도 ) d=a+b+c document.write( 배달한 과일은 +d+ 개 입니다. ) 101

생각 뛰어넘기 플레이봇이 과일가게에 토마토를 배달하려고 합니다. 앞에 있는 가게부터 2개, 3개, 3개, 2개의 토마토를 차례대로 배달하고, 배달한 토마토의 총 개수가 몇 개인지 알려주는 프로그램을 만들어 보세요. 초기상태 목표상태 활동 tip 로봇에게 미리 토마토 10개를 준 다음 명령을 실행할 수 있도록 설명한다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 변수의 의미는 무엇인가요? <A> 프로그램이 실행되는 동안 자료를 저장하는 공간 <Q> 과일배달하기에서 변수의 사용 용도는 무엇인가요? <A> 각각의 과일의 개수를 저장하는 것과 전체 과일의 개수의 합을 구하는 용도로 사용 102

5. 꽃 진열하기 난이도 1. 수업안내 학습목표 매개 변수를 이해하고 사용할 수 있다. 숫자와 문자 변수를 구분하여 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한, turn_left()를 학습했습니까? 플레이봇에게 같은 명령을 여러 번 주기 위한 repeat()를 학습했습니까? 바닥 색을 바꾸는 set_color()을 학습했습니까? 물건을 확인하는 what_object()을 학습했습니까? 물건을 세는 count_object()을 학습했습니까? 물건을 놓거나(put_object()) 집는(pick_object()) 명령어를 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? 34쪽, 36쪽 41쪽 52쪽 45쪽 45쪽 45쪽 56쪽 학습 내용 참고 변수 활용 61쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수에 대한 복습 및 학습이 이루어지도록 한다. 진열하는 동작의 규칙성을 파악하여 사용자 정의 함수를 만들 수 있도록 유도한다. 구체적인 숫자나 문자를 대입하여 프로그램을 이해할 수 있도록 한 후, 매개 변수 사용의 필요성 및 유용성을 깨달을 수 있도록 한다. 핵심사고 자료 분석 평가기준 숫자변수와 문자변수의 차이를 정확히 알고 사용할 수 있습니까? 103

2. 수업 전개 상황을 통한 동기유발 영상을 보고 플레이봇의 활동에 관심을 가질 수 있도록 한다. - 잡초 뽑는 기계 뉴스 영상 (YTN, 14.6.26., https://youtu.be/u4fbogcimbk) - 정원을 가꾸는 모습 사진 꽃을 심어주는 로봇이 있다면 어떤 점이 좋을지 이야기해 본다. 학습할 문제 확인하기 문제 제시 플레이봇이 꽃을 진열하려고 합니다. 각각의 꽃이 놓인 수만큼 꽃과 포장지를 놓을 수 있도록 도와주세요! 단, 꽃은 놓인 위치를 기준으로 같은 꽃이 하나의 세로줄에 있어야 하며, 꽃 색깔과 어울리는 바닥색을 칠해주세요. 플레이봇이 꽃을 진열하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 생각하기 - 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇 앞에 놓여진 꽃의 개수를 센다. 꽃의 개수만큼 꽃을 심어야 한다. 꽃을 한 줄로 심어야 한다. 꽃을 심을 때 바닥 색도 바꾸어야 한다. 104

[활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 꽃의 개수를 세는 기능 바닥 색을 바꾸는 기능 꽃을 내려놓는 기능 이 문제를 해결하기 위해 저장해야 하는 내용은 무엇이 있을까요? 꽃의 개수를 저장해야 합니다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 한 칸 이동한다. 2 해당 자리의 물건을 확인한다. 3 물건의 개수를 센다. 4 물건의 개수만큼 줍기 반복한다. 5 왼쪽으로 회전한다. 6 물건을 놓는다. 7 바닥 색을 변경한다. 8 이동한다. 9 물건의 개수만큼 6~8을 반복한다. 10 물건을 다 놓으면 프로그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. ( 물건 놓기 와 바닥 색 변경 명령어는 순서가 바뀌어도 제대로 동작한다. 이러한 상황을 인식할 수 있도록 유도한다.) 105

[활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 turn_left() 로봇이 왼쪽으로 회전하는데 사용 36쪽 변수 물건 개수와 물건 내용을 저장 61쪽 count_object() 물건의 개수를 세기 위해 사용 45쪽 pick_object() 물건을 줍기 위해 사용 45쪽 put_object() 물건을 놓기 위해 사용 45쪽 set_color() 바닥 색을 바꾸기 위해 사용 52쪽 repeat() 동일한 명령어를 반복 41쪽 활동 tip 규칙적으로 반복되는 플레이봇의 움직임을 사용자 정의 함수로 지정할 수 있도록 한다. [작은 활동 1] 규칙성 찾기 사용자 정의 함수로 지정할만한 내용을 생각해본다.(규칙성 찾기) - 작성한 문제 해결 절차를 보며 규칙적으로 반복되는 내용을 생각하게 한다. <Q> 플레이봇의 행동 중 규칙적으로 반복되는 것이 있나요? <A> 플레이봇이 이동하여 꽃 개수만큼 꽃을 줍습니다. <A> 꽃 개수만큼 꽃을 진열합니다. <A> 꽃을 놓고 바닥 색을 바꾸고 이동합니다. <Q> 좀 더 간단하게 프로그래밍 할 수 있는 방법은 무엇일까요? <A> 반복되는 행동을 사용자 정의 함수를 이용하여 하나의 기능으로 지정합니다. 106

[작은 활동 2] 변수 개념 익히기 문제 해결 절차 구현을 위한 저장 공간은 어떤 것이 필요한지 생각해본다. - 물건 내용과 물건 개수를 저장할 변수가 필요 <Q> 물건을 확인하고 그 정보를 저장하는 저장 공간이 필요하다. 저장 공간에 저장되는 정보는 어떤 형태일까요? <A> 물건 내용은 문자, 물건 개수는 숫자입니다. 문자 변수와 숫자 변수를 명확히 구별하기 위하여 출력을 해본다. <Q> 물건 내용을 저장한 문자 변수를 a, 물건 개수를 저장한 숫자 변수를 b라고 했을 때 document.write(a) 라고 하면 무엇이 출력될까요? <A> 물건 내용이 출력됩니다. 예) 보석 <Q> document.wirte(b) 라고 하면 무엇이 출력될까요? <A> 물건 개수가 출력됩니다. 예) 2 <Q> document.write(a+b) 라고 하면 무엇이 출력될까요? <A> 물건 내용과 물건 개수가 출력됩니다. 예)보석2 문자 변수와 숫자 변수를 명확히 구별하기 위하여 숫자를 더하여 출력 해본다. - 문자 변수와 숫자 변수 또는 문자 변수와 문자 변수를 +로 연결하면 단순히 문자가 이어져 출력된다. - 숫자 변수와 숫자 변수를 +로 연결하면 두 수가 더해진 결과 값이 출력된다. <Q> 물건 내용을 저장한 문자 변수를 a, 물건 개수를 저장한 숫자 변수를 b라고 했을 때 document.write(a+1) 라고 하면 무엇이 출력될까요? <A> 물건 내용과 숫자 1이 출력됩니다. 예) 보석1 <Q> document.wirte(b+1) 라고 하면 무엇이 출력될까요? <A> 물건 개수에 숫자 1이 더해진 수가 출력됩니다. 예) 3 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용은 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 맞춰서 질문을 선택하고 추가하여 수업을 진행한다. 107

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]를 참고해서 플레이봇이 앞으로 이동하며 꽃을 진열하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function display() { put_object(b) set_color( orange ) // 명령어를 실행하는 공간 a=count_object() b=what_object() repeat( pick_object(),a) turn_left() repeat( display(),a) document.write(b + (을)를 + a + 개 놓기 성공! ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 활동 tip 사용자 정의 함수 지정 시 명령어의 순서에 유의한다. 생각 뛰어넘기 마카롱을 진열해보자. (마카롱 이외에도 원하는 물건을 진열해볼 수 있다.) 초기상태 목표상태 108

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 변수는 문자만 저장할 수 있나요? <A> 아닙니다. 숫자도 저장할 수 있습니다. <Q> 숫자 변수와 문자 변수의 차이점은 무엇인가요? <A> 숫자 변수와 숫자 변수를 +로 연결하면 두 숫자가 더해지고, 숫자 변수와 문자 변수를 +로 연결하면 문자 변수와 문자 변수를 +로 연결하는 것과 같이 두 변수에 저장된 정보가 단순히 이어집니다. 109

6. 체육대회 어울림마당 참가하기 난이도 1. 수업안내 학습목표 조건문의 의미를 이해할 수 있다. 조건문을 활용하여 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 앞으로 움직이기 위한 를 학습했습니까? 물건을 놓는 동작 put_object()를 학습했습니까? 사용자 정의 함수를 학습했습니까? 34쪽 45쪽 56쪽 주 학습 내용 참고 조건문 58쪽 다중조건문 58쪽 비교연산자 64쪽 say() 41쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 플레이봇을 움직일 수 있는 동작 명령어에 대해 설명한다. 수학에서의 비교연산자와 정보에서의 비교 연산자가 어떻게 다른지 설명한다. 주사위 던지는 동작을 표현하는 방법에 대해 미리 설명해 준다. 핵심사고 평가기준 조건문의 의미를 설명할 수 있는가? 알고리즘과 절차 다중 조건문을 활용한 프로그램을 작성할 수 있는가? 자동화/시뮬레이션 플레이봇 동작의 규칙성을 찾을 수 있는가? 추상화 비교연산자를 이용하여 조건식을 작성할 수 있는가? 110

2. 수업 전개 상황을 통한 동기유발 중학교의 체육대회는 전교생 모두가 체육대회 당일 날 경기에 참여할 수 있는 어울림마당이라는 경기가 있다. 점심식사 후에 번외 경기로 누구나 참가해서 상품을 받을 수 있는 어울림마당 경기를 우리의 플레이봇도 참가할 예정이다. 플레이봇이 참가 할 어울림마당의 종목은 주사위 던지기의 결과에 따라 다른 상품을 받는 경기이다. 학습할 문제 확인하기 문제 제시 플레이봇이 참가하는 어울림마당 주사위 던지기의 경기 규칙입니다. 주사위를 던져서 3이하가 나오면 마카롱을 받고, 그렇지 않으면 도너츠를 상품으로 받는 프로그램을 만들어 보세요. (단, 주사위 던지는 동작은 플레이봇이 숫자를 말하는 것으로 대체한다.) 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 주사위를 던져 나온 숫자는 ( )입니다 라고 말한다. 숫자가 3이하면 마카롱을 놓고, 그렇지 않으면 도너츠를 놓는다. 111

[활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 플레이봇이 1 6사이의 숫자 중 하나를 구해서 출력한다. 2 앞으로 3칸 이동한다. 3 숫자가 3이하면, 마카롱을 놓는다. 4 3이하가 아니면, 도너츠를 놓는다. 5 앞으로 2칸 이동한다. 활동 tip 주사위 던지는 동작은 say() 명령어를 활용한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 get_random() 작은 수부터 큰 수 사이의 임의의 숫자 구하는데 사용 44쪽 say() 로봇의 말풍선에 내용 보여줄 때 사용 41쪽 if~else 조건문 58쪽 if~else if 다중 조건문 58쪽 112

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 조건문 형식에 대해 알아보기 if (조건식) { 조건식의 결과가 참일 때 실행되는 부분 else { 조건식의 결과가 거짓일 때 실행되는 부분 [작은 활동 2] 비교연산자에 대해 알아보기 같다 다르다 크다 작다 크거나 같다 작거나 같다 연산자 ==!= > < >= <= <Q> 주사위를 던져서 나오는 숫자의 값을 표현하는 방법은? <A> get_random( ) 함수를 이용하여 1~6까지의 숫자 중 임의의 값을 얻을 수 있다. <Q> 어떤 조건에 따라 마카롱 또는 도너츠를 받는 것이 정해지나요? <A> 주사위를 던졌을 때, 숫자가 3이하가 나오면, 마카롱을 받는다. 그렇지 않으면, 도너츠를 받는다. <Q> 주사위 던진 수를 입력 받을 변수의 이름은? <A> 변수의 이름을 a라고 한다. <Q> 주사위가 3이하일 경우를 조건으로 나타내어 보자. <A> a<=3 활동 tip 수학 시간의 크거나 같다, 작거나 같다 표현이 프로그래밍에서의 표현과 다르다. 113

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 활동 tip 로봇에게 미리 마카롱과 도너츠를 주고 실행한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 a=0 a=get_random(1,6) say( 주사위를 던져 나온 숫자는 + a + 입니다 ) if (a<=3) { say( 마카롱을 받습니다 ) else { say( 도너츠를 받습니다 ) if(a<=3){ put_object( 마카롱 ) else { put_object( 도너츠 ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 두 번째 학습할 문제 확인하기 문제 제시 플레이봇이 참가하는 어울림마당 주사위 던지기의 경기 규칙입니다. 주사위를 던져서 숫자가 1,2이면 쿠키를 받 고, 3,4가 나오면 수박을 받고, 5,6이 나오면 피자를 받는 프로그램을 만들어 보세요. (단, 주사위 던지는 동작은 플레이봇이 숫자를 말하는 것으로 대체한다.) 114

[활동 5] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 숫자를 말한다. 나온 숫자에 따라 다르게 동작한다. [활동 6] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 오른쪽으로 회전하는 함수를 만든다. 2 왼쪽으로 회전, 앞으로 1칸 이동, 오른쪽으로 회전, 앞으로 2칸 이동하는 명령을 사용자 정의 함수를 이용해서 upstair()로 만든다. 3 숫자가 1,2이면 upstair()명령을 1번 실행한 후, 수박을 받는다. 4 숫자가 3,4이면 upstair()명령을 2번 실행한 후, 쿠키를 받는다. 5 숫자가 5,6이면 upstair()명령을 3번 실행한 후, 피자를 받는다. 115

[활동 7] 문제 해결 과정 함께 생각하기 [작은 활동 1] 조건문 형식에 대해 알아보기 if (조건식1) { 실행1 else if (조건식2) { 실행2 else if (조건식3) { 실행3 else { 실행4 (조건식1)의 결과가 참일 때 { 실행1 을 실행 (조건식2)의 결과가 참일 때 { 실행2 을 실행 (조건식3)의 결과가 참일 때 { 실행3 을 실행 (조건식1,2,3)의 결과가 모두 거짓일 때 { 실행4 을 실행 조건식의 수에는 제한이 없어요. <Q> 주사위를 던진 수를 입력받을 변수는? <A> 변수 이름을 a라고 한다. <Q> 주사위를 던져서 나온 숫자가 1,2인 경우, 숫자가 3,4인 경우, 숫자가 5,6인 경우를 조건으로 나타 내어 보자. <A> 숫자가 1,2인 경우는 a<=2 숫자가 3,4인 경우는 a<=4 나머지인 경우 조건식을 쓰지 않음. 116

[활동 8] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1]을 참고해서 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function upstair() { turn_left() turn_right() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 // 명령어를 실행하는 공간 a=get_random(1,6) say(a) if (a<=2) { upstair() pick_object() else if (a<=4) { upstair() upstair() pick_object() else { upstair() upstair() upstair() pick_object() 생각 뛰어넘기 체육대회가 끝난 후 축구공을 정리하는 역할을 맡았어요. 공 정리함에 축구공이 10개씩 채워질 수 있도록 프로그램을 만들어 주세요. 초기상태 목표상태 활동 tip 플레이봇이 축구공을 10개씩 채워서 정리함에 넣을 수 있도록 미리 축구공 30개를 준다. 117

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 조건문과 다중 조건문의 차이점에 대해 생각해 보자. <A> 조건이 한 개 있을 때 조건문을 이용하지만, 조건이 2개이상일 경우에는 다중 조건문을 사용 <Q> 조건문을 사용해야 할 때와 다중 조건문을 사용해야 할 상황을 찾아 보자. <A> 조건문 돈이 있으면 택시를 타고, 돈이 없으면 걸어간다. 다중 조건문 점수가 90점 이상이면 A, 80점 이상이면 B, 70점 이상 C, 60점 이상이면 D, 50점 이하 이면 E로 표현하는 성취평가제 118

7. 책상 개수 구하기 난이도 1. 수업안내 학습목표 변수와 연산자를 이해하고 계산에 사용할 수 있다. 로봇의 움직임에서 규칙성을 찾아 사용자 정의 함수로 만들 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한 를 학습했습니까? 플레이봇을 회전하기 위한 turn_left()를 학습했습니까? 물건의 개수를 알아내는 count_object()를 학습했습니까? 결과를 출력하기 위한 document.write()를 학습했습니까? 34쪽 36쪽 45쪽 38쪽 주 학습 내용 참고 변수와 연산자 61쪽, 62쪽 사용자 정의 함수 56쪽 반복되는 움직임에서 규칙성 찾기 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 출력문에 대한 복습 및 학습이 이루어지도록 한다. 학습이 진행되는 과정에 선행 개념이 반복 학습될 수 있도록 유도한다. 한 교실에서 다음 교실로 이동하는 로봇의 움직임에서 반복되는 규칙성을 찾을 수 있도록 지도한다. 찾은 규칙성을 사용자 정의 함수로 만들 때, 마지막에 왼쪽으로 회전하는 이유를 학생들에게 이해시켜야 한다. 책상 개수를 알아내서 변수에 저장하는 행동까지 함수에 포함시키는 것은 매우 어려우므로, 움직임에서의 규칙성만을 이용해서 함수를 만들도록 지도한다. 핵심사고 평가기준 자동화/시뮬레이션 로봇의 움직임에서 반복되는 규칙성을 찾아 설명할 수 있습니까? 추상화 로봇의 움직임에 필요한 사용자 정의 함수를 만들 수 있습니까? 알고리즘과 절차 플레이봇이 책상 개수를 계산해서 출력하는 프로그램을 순서적 단계로 표현할 수 있습니까? 119

2. 수업 전개 상황을 통한 동기유발 학교는 교실이라는 공간으로 나누어져 있고, 여러 명의 학생들이 교실에 모여 공부를 한다. 그리고 각각의 교실에는 서로 다른 학생수만큼이나 서로 다른 개수의 책상이 놓여 있다. 지금부터 학생들이 교실을 돌아다니면서 교실마다 몇 개의 책상이 있고, 전체 책상수와 평균 책상수는 몇 개나 되는지 계산한다는 생각을 가지고 책상 개수 구하기 활동에 관심을 가질 수 있도록 한다. 학습할 문제 확인하기 문제 제시 플레이봇 중학교에는 5개의 교실이 있는데, 각 교실마다 책상의 개수가 다르답니다. 플레이봇이 움직이면서 각 교실에 몇 개의 책상이 있는지 알아내고, 전체 책상수와 평균 책상수를 계산하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 로봇의 앞쪽으로 5개의 교실이 있는데, 벽으로 나뉘어있어서 교실에 들어가려면 벽을 돌아 들어가야 한다. 각각의 교실은 벽으로 막혀 보이지 않기 때문에, 교실에 들어가기 전에는 교실에 몇 개의 책상이 있는지 알지 못한다. 마지막 교실에 도착하면 알아낸 책상 개수를 모두 더해서 전체 책상수를 계산하고 출력한다. 계산한 전체 책상수를 교실수로 나누어 평균 책상수를 계산하고 출력한다. 120

[활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 한 교실에서 다음 교실로 이동하는 기능 교실에 책상이 몇 개 있는지 알아내는 기능 전체 책상수와 평균 책상수를 계산하고 출력하는 기능 이 문제를 해결하는데 사용되는 변수는 총 몇 개이고, 어떤 값을 저장하는데 사용될까요? 총 7개의 변수가 필요합니다. 각 반의 책상수 저장에 5개, 전체 책상수 저장에 1개, 평균 책상수 저장에 1개의 변수를 사용합니다. 전체 책상수와 평균 책상수를 구하는데 사용되는 연산자는 무엇일까요? 전체 책상수 계산에는 더하기 연산자(+), 대입 연산자(=)가 사용됩니다. 평균 책상수 계산에는 나누기 연산자(/), 대입 연산자(=)가 사용됩니다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대로 적고, 순 서도를 그려봅시다. 1 현재 교실에서 다음 교실로 이동한다. 2 교실에 있는 책상 개수를 알아내서 변수에 저장한다. 3 1~2를 교실수 만큼 반복한다. 4 마지막 교실로 이동한다. 5 변수에 들어있는 값을 모두 더해서 전체 책상수를 계산한다. 6 전체 책상수를 교실수로 나누어 평균 책상수를 계산한다. 7 전체 책상수와 평균 책상수를 출력한다. 121

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() turn_right() 사용자 정의 함수(function) 로봇이 이동하는데 사용 오른쪽으로 회전하는 turn_right()를 만드는데 사용 로봇의 규칙적인 행동을 새로운 명령어로 만드는데 사용 34쪽 36쪽 56쪽 56쪽 변수 알아낸 책상수와 계산된 책상수를 저장하는데 사용 61쪽 연산자 알아낸 책상수를 이용해서 전체 책상수와 평균 책상수를 계산하는데 사용 62쪽 count_object() 교실에 있는 책상수를 알아내는데 사용 45쪽 document.write() 결과를 출력하는데 사용 38쪽 [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 반복되는 행동으로부터 규칙성 찾기 이번 활동을 통해 [한 교실에서 다음 교실로 이동하는 효율적인 방법]을 찾을 수 있습니다. [실행 전] [실행 후] [규칙성] <Q> 로봇이 위의 그림과 같이 움직인다고 할 때, 로봇의 움직임에서 반복적으로 나타나는 규칙적인 행동 (규칙성)은 무엇인가요? <A> 벽을 돌아서 다음 칸으로 이동하는 행동입니다. <Q> 위에서 찾은 규칙성을 앞으로 가기, 왼쪽으로 돌기, 오른쪽으로 돌기 를 이용해서 표현해 볼까요? <A> 1 2 3 4 5 6 7 왼쪽으로 돌기 앞으로 가기 오른쪽으로 돌기 앞으로 가기 오른쪽으로 돌기 앞으로 가기 왼쪽으로 돌기 122

<Q> 앞으로 가기, 왼쪽으로 돌기, 오른쪽으로 돌기 로 표현한 규칙성을 프로그램 코드로 표현해 볼까요? <A> 1 turn_left() 2 3 turn_right() 4 5 turn_right() 6 7 turn_left() 활동 tip turn_right()는 사용하기 전에 미리 만들어 두어야 합니다. <Q> 규칙성은 여러 번 반복 사용되기 때문에 효율적으로 처리하는 방법을 사용해야 합니다. 어떻게 하는 것 이 좋을까요? <A> 새로운 명령어(사용자 정의 함수)로 만들어 사용하는 것이 좋습니다. <Q> 찾은 규칙성을 새로운 명령어(사용자 정의 함수)로 만들어볼까요? <A> 1 function next() { 2 turn_left() 3 4 turn_right() 5 6 turn_right() 7 8 turn_left() 9 <Q> 새로 만든 next() 명령어를 이용하면 로봇이 다음 칸으로 이동을 합니다. 그런데 next()의 마지막에 turn_left()를 하는 이유는 무엇일까요? <A> next()를 실행한 후의 상태가 next()를 실행하기 전의 상태와 같게 해주기 위해서입니다. next()를 실행 하기 전과 후의 상태가 같아야만 next()로 똑같은 행동을 반복할 수 있습니다. <Q> 위의 그림과 같이 [실행 전] [실행 후]로 로봇이 움직이는 프로그램 코드를 만들어 볼까요? <A> 1 // 새로운 명령어를 만드는 공간 17 2 function turn_right() { 18 // 명령어를 실행하는 공간 3 turn_left() 19 next() 4 turn_left() 20 next() 5 turn_left() 21 next() 6 22 next() 7 8 function next() { 9 turn_left() 10 11 turn_right() 12 13 turn_right() 14 15 turn_left() 16 123

[작은 활동 2] 물건의 개수를 알아내서 계산하기 이번 활동을 통해 [전체 책상수와 평균 책상수를 계산하는 방법]을 배울 수 있습니다. [실행 전] [실행 후] <Q> 위의 그림에서 로봇이 물건의 개수를 알아내기 위해 사용하는 명령어는 무엇인가요? <A> count_object() <Q> 알아낸 물건의 개수를 계산에 사용하기 위해서는 어떻게 해야 하나요? <A> 물건의 개수를 변수에 담아두어야 계산에 사용할 수 있습니다. 예) a=count_object() <Q> 공의 개수를 계산하는데 몇 개의 변수가 사용되고, 어떤 값을 저장하는데 사용될까요? <A> 3개의 변수가 사용됩니다. 축구공 개수 저장에 1개, 농구공 개수 저장에 1개, 전체 공 개수 저장에 1개가 사용됩니다. <Q> 위의 그림과 같이 작동하는 프로그램 코드를 만들어볼까요? <A> 1 2 a=count_object() 활동 tip 3 4 b=count_object() 5 = 는 오른쪽의 계산 결과를 왼쪽의 변수에 6 c=a+b 저장하라는 뜻입니다. 7 document.write( 공의 개수는 + c) <Q> 계산에 사용되는 연산자에는 어떤 것들이 있나요? <A> 더하기 + 곱하기 * 나머지 % 빼기 - 나누기 / 저장하기 = 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 124

[활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 교실의 책상 개수를 알아내고, 전체 책상수와 평균 책상수를 계산하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function next() { turn_left() turn_right() turn_right() turn_left() // 명령어를 실행하는 공간 next() a=count_object() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 next() b=count_object() next() c=count_object() next() d=count_object() next() e=count_object() next() sum=a+b+c+d+e avg=sum/5 document.write( 전체 책상수 : + sum) document.write( 평균 책상수 : + avg) 생각 뛰어넘기 전체 책상수와 평균 책상수를 계산하는 문제를 잘 처리했나요? 그렇다면 심화 문제를 풀어봅시다. [심화 문제] 이번에는 모든 교실에 책상수가 3개씩이 되도록 책상 개수를 맞추는 프로그램 코드를 만들어 봅시다. [실행 전] [실행 후] 어떻게 하면 이 문제를 풀 수 있을까요? 자신이 생각한 방법을 말해봅시다. 125

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 변수와 연산자에 대해 설명해볼까요? <A> 변수 : 변수는 수시로 변하는 데이터를 담는 공간으로, 이름을 붙여 사용합니다. 연산자 : 변수와 데이터를 대상으로 계산을 할 때 사용하는 기호입니다. <Q> 사용자 정의 함수는 무엇인가요? <A> 사용자가 필요할 때 직접 만들어 사용하는 자기만의 명령어입니다. <Q> 사용자 정의 함수를 만들어 사용할 때 가장 중요한 점은 무엇인가요? <A> 여러 번 반복해야 하는 일로부터 그 일을 대표하는 하나의 단위를 잘 찾는 것이 중요합니다. 이것이 바로 규칙성 찾기 입니다. 예를 들면, 붕어빵 100개 만들기에서 붕어빵 1개를 만드는데 필요한 절차들을 잘 찾아내는 것이지요. 126

8. 식탁보 깔기 난이도 1. 수업안내 학습목표 비교연산자 ==를 이해하고 사용할 수 있다 else if을 이해하고 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한 를 학습했습니까? 플레이봇에게 같은 명령을 여러 번 주기 위한 repeat()를 학습했습니까? 조건을 비교하기 위한 if문을 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? 데이터를 저장하기 위한 변수를 학습했습니까? 물건을 확인하는 what_object()를 학습했습니까? 바닥 색을 바꾸는 set_color()를 학습했습니까? 34쪽 41쪽 58쪽 56쪽 61쪽 45쪽 52쪽 학습 내용 참고 else if문 사용 58쪽 비교 연산자 == 64쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문에 대한 복습 및 학습이 이루어지도록 한다. 색 이름의 영어 표현을 미리 안내하여 코딩에 어려움이 없도록 한다. if ~ else 표현과 if ~ else if 표현의 차이점을 자연스럽게 이해할 수 있도록 단계별로 진행한다. 변수가 정보를 저장하는 저장 공간이라는 개념을 가질 수 있도록 유도한다. 핵심사고 평가기준 추상화 비교연산자 ==를 사용할 수 있습니까? 알고리즘과 절차 else if문을 이해하고 사용할 수 있습니까? 127

2. 수업 전개 상황을 통한 동기유발 영상을 보고 플레이봇의 활동에 관심을 가질 수 있도록 한다. - 생활의 달인과 같이 식탁보를 빨리 까는 사람의 모습 영상 - 물건에 맞게 식탁보 색을 고민하는 디자이너의 모습 영상 물건에 맞게 식탁보를 까는 로봇이 있다면 어떤 점이 좋을지 이야기해 본다. 학습할 문제 확인하기 문제 제시 플레이봇이 식탁보를 깔 수 있도록 도와주세요! 호박은 노란색 식탁보를, 토마토는 주황색 식탁보를, 포도는 분홍색 식탁보를 깔아주세요^^ 식탁보를 까는 플레이봇 프로그램을 만들어주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 생각하기 - 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇 앞에 놓여진 물건을 확인한다. 어떤 색의 식탁보를 깔아야 하는지 확인한다. 플레이봇이 물건을 만나면 물건에 해당하는 식탁보를 깔아야 한다. 128

[활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 물건을 확인하는 기능 물건에 따라 바닥 색을 바꾸는 기능 이 문제를 해결하기 위해 저장해야 하는 내용은 무엇이 있을까요? 물건 이름을 저장해야 합니다. 물건의 개수만큼 다른 색으로 바닥 색을 칠해야 합니다. 어떻게 할 수 있을까요? 조건문을 여러 개 사용하여 해결할 수 있습니다. [작은 활동 1] 언플러그드 활동 - 플레이봇 되어보기 2인 1조가 되어 플레이봇의 움직임을 표현할 수 있는 문제 해결 절차를 표현해본다. - 1명이 플레이봇이 되고, 1명이 명령어 전달자가 되어 문제를 해결하고자 하는 활동을 진행 (또는 초기 상태의 월드와 로봇모형을 제공하여 모니터 밖에서 구체적인 물건을 통해 상황을 이해할 수 있도록 도움) - 이 때, 자연어, 순서도 등 문제 해결 절차를 서로 공유할 수 있는 방법을 사용하여 문제 해결 절차를 표현한다. (자연어, 순서도 예시 제공) 129

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 한 칸 이동한다. 2 물건의 이름을 알아낸다. 3 물건이 호박이면 노란색을 칠한다. 4 물건이 토마토면 주황색을 칠한다. 5 물건이 포도면 분홍색을 칠한다. 6 모든 물건을 확인할 때까지 1~5를 반복한다. 7 모든 물건의 바닥색을 칠하면 프로그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. [활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 set_color() 바닥 색을 바꾸기 위해 사용 52쪽 변수와 연산자 물건 정보를 저장하고 특정 물건인지 아닌지 판단 61쪽, 62쪽 what_object() 물건이 무엇인지 확인하기 위해 사용 45쪽 활동 tip 규칙적으로 반복되는 플레이봇의 움직임을 사용자 정의 함수로 지정할 수 있도록 한다. 130

[작은 활동 1] if~else if문 학습 명령어를 알맞게 배치할 수 있는 구문에 대해 생각해본다. - if문을 배운 상황이므로 하나의 조건의 참/거짓 상황이 아닌 각각 다른 3가지 조건에 대한 명령어 처리를 위해 if~else if 문이 필요함을 인식시킨다. <Q> 물건이 하나만 있을 때는 어떤 구문을 쓸 수 있을까요? <A> if문을 사용할 수 있습니다. <Q> 물건이 두 개 있을 때는 어떤 구문을 쓸 수 있을까요? <A> if ~ else문을 사용할 수 있습니다. <Q> 물건이 세 개 있을 때는 어떤 구문을 쓸 수 있을까요? <A> if ~ else if문을 사용할 수 있습니다. [작은 활동 2] 변수와 연산자 학습 문제 해결 절차 구현을 위한 저장 공간은 어떤 것이 필요한지 생각해본다. - 물건 이름을 저장할 변수가 필요 <Q> 물건을 확인하고 그 정보를 저장하는 저장 공간이 필요하다. 저장 공간에 저장되는 정보는 어떤 형태일 까요? <A> 문자정보입니다. 색 이름 정보를 저장합니다. 비교 연산자의 필요성을 인식하게 한다. <Q> 확인한 물건이 호박인지, 토마토인지, 포도인지 확인할 수 있는 방법은 무엇인가요? <A> 물건 이름을 저장한 정보와 비교합니다. 같은 이름인지 아닌지 비교할 때 쓸 수 있는 연산자는 ==입니다. 활동 tip ==와 =는 다르다. (차이점 설명하는 예시 필요) 정보 담을 때는 =, 같은지 비교할 때는 == 131

[작은 활동 3] 규칙성 찾기 사용자 정의 함수로 지정할만한 내용을 생각해본다. - 작성한 문제 해결 절차를 보며 규칙적으로 반복되는 내용을 생각하게 한다. <Q> 플레이봇의 행동 중 규칙적으로 반복되는 것이 있나요? <A> 플레이봇이 이동하며 물건을 확인하는 동작은 규칙적으로 반복됩니다. <Q> 좀 더 간단하게 프로그래밍 할 수 있는 방법은 무엇일까요? <A> 반복되는 행동을 사용자 정의 함수를 이용하여 하나의 기능으로 지정합니다. [활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 플레이봇이 물건의 종류에 따라 바닥 색을 바꾸는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function setting() { a=what_object() if (a== 호박 ) { set_color( yellow ) else if (a== 토마토 ) { set_color( orange ) else if (a== 포도 ) { set_color( pink ) // 명령어를 실행하는 공간 repeat( setting(), 3) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 활동 tip 이동하는 명령어와 바닥 색을 확인하는 명령어 순서에 따라 문제 해결 절차가 달라질 수 있음. 132

생각 뛰어넘기 바닥의 색깔에 따라 다른 물건을 놓아보자. 물건은 모두 가방에 들어 있어야 한다. 예를 들어, 바닥 색이 빨간색이면 토마토, 노란색이면 호박, 초록색이면 콩을 놓아보자. 초기상태 목표상태 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> =와 ==의 차이점은 무엇인가요? <A> =는 변수에 정보를 저장할 때 사용하는 대입연산자이고, ==는 변수의 정보를 다른 내용과 같은지 확인하는 비교연산자입니다. <Q> 확인해야 할 조건의 개수에 따라 사용하는 반복문은 어떻게 달라질까요? <A> 한 가지 조건에 대한 확인을 할 때는 if를 사용할 수 있습니다. 두 가지 조건에 대해 확인을 할 때는 if~ else 를 사용할 수 있습니다. 세 가지 조건에 대해 확인을 해야 할 때는 if~else if를 사용할 수 있습니다. 133

9. 장애물 뛰어넘기 난이도 1. 수업안내 학습목표 다중 조건문의 의미를 이해할 수 있다. 다중 조건문을 활용하여 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 사용자 정의 함수를 학습했습니까? 조건문을 활용한 프로그램을 학습했습니까? open_front_door()를 학습했습니까? 56쪽 58쪽 51쪽 주 학습 내용 참고 조건문 58쪽 다중 조건문 58쪽 논리연산자 66쪽 front_is_clear() 48쪽 front_is_door() 50쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문에 대한 복습 및 학습이 이루어지도록 한다. 논리연산자를 활용하여 조건을 제시하는 부분을 어려워하므로 여러 번 반복해서 지도한다. front_is_clear()의 경우 돌려주는 값의 참 과 거짓 의 표현을 이해하고, 프로그램을 작성할 수 있도록 지도한다. 핵심사고 평가기준 알고리즘과 절차 다중 조건문의 의미를 설명할 수 있는가? 문제분해 다중 조건문을 활용한 프로그램을 작성할 수 있는가? 134

2. 수업 전개 상황을 통한 동기유발 치타 로봇, 눈을 달다. 장애물 자동 인식 살아있는 치타처럼 눈앞의 장애물을 자동으로 인식해 뛰어넘는 치타 로봇 을 한국인 과학자 연구팀이 개발에 성공했습니다. 미 MIT 기계공학과 김상배 교수팀은 레이저 센서를 이용해 장애물을 먼 거리에서 탐지한 뒤 점프 거리를 계산하는 치타 로봇을 만들었다고 밝혔습니다. 연구팀은 앞서 지난해 9월 치타 로봇의 초기 모델을 공개했는데, 당시에는 눈 역할을 하는 레이저 센서가 없어 자동으로 장애물을 뛰어넘는 데 한계가 있었습니다. 연구팀은 새로운 센서를 개발해 이 같은 한계를 극복했으며, 이 센서는 치타 로봇이 장애물을 넘을 수 있는 계산을 100 밀리 세컨드, 즉 10분의 1초 만에 해낼 수 있다고 말했습니다. 연구팀은 치타 로봇이 사람을 보내기 위험한 재난재해 사고 현장에서 인명 구조 활동 등에 활용할 수 있을 것으로 기대했습니다. [YTN 사이언스] https://www.youtube.com/watch?v=u4oiwceh-0u 문제 제시 학습할 문제 확인하기 플레이봇은 장애물을 감지하는 센서를 가지고 있습니다. 앞에 있는 장애물을 인식해서 문이면 열고 들어가고, 벽이면 점프하는 프로그램을 만들어 보세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 생각하기 - 문제 해결 과정 스스로 생각하기 - 코딩 135

[활동 1] 문제 상황 확인하기 초기상태 목표상태 월드에 문이 두 개, 벽이 하나 세워져 있다. 플레이봇이 앞으로 이동하다가 앞에 있는 장애물이 문이면 열고 들어가고, 벽이면 돌아간다. [활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 벽이 있으면 돌아서 지나가는 명령을 사용자 정 의 함수를 이용해서 jump()로 만든다. 2 플레이봇 앞에 장애물이 있는지 확인한다. 3 장애물이 있다면, 문인지 벽인지 확인한다. 4 문이면 열고 지나간다. 5 문이 아니면 점프한다. 6 2~5를 실행하는 명령을 사용자 정의 함수를 이용해서 pandan()으로 만든다. 7 pandan()을 6번 반복한다. 활동 tip 두 개의 조건에 대해 이해하고, 왜 중첩조건문을 활용해야 하는지 설명한다. 136

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 front_is_clear() 앞쪽 장애물 확인하기 48쪽 front_is_door() 앞쪽 벽이 문인지 알아내기 50쪽 open_front_door() 앞쪽 문 열기 51쪽 [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] front_is_clear()와 front_is_door() 명령어가 돌려주는 값에 대해 알아보자. front_is_clear() Boolean 숫자표현 front_is_door() Boolean 숫자표현 장애물이 있을 경우 false 0 문이 있는 경우 true 1 장애물이 없을 경우 true 1 문이 없는 경우 (벽이 있는 경우) false 0 초기상태 목표상태 코딩 a=front_is_clear() document.write(a) b=front_is_door() document.write(b) 137

[작은 활동 2] 앞에 장애물이 있으면 점프하고, 없으면 지나간다. 초기상태 목표상태 코딩 a=front_is_clear() if (a==true) { else { turn_left() turn_right() turn_right() turn_left() 활동 tip 코딩의 맨 위 부분에 새로운 명령어 turn_right()는 만드는 과정이 추가로 필요하다. 138

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 장애물을 뛰어넘는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function jump() { turn_left() turn_right() turn_right() turn_left() function pandan() { a=front_is_clear() b=front_is_door() if (a==0) { if (b==0) { jump() else { open_front_door() else { 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 // 명령어를 실행하는 공간 pandan() pandan() pandan() pandan() pandan() pandan() 139

생각 뛰어넘기 플레이봇이 재난 현장에 사람을 구하기 위해 출동했습니다. 문을 인식하면 열고 들어가고, 장애물을 만나면 뛰어넘어서 위험에 빠진 사람을 구하는 프로그램 만들어 보세요. 초기상태 목표상태 활동 tip 사람을 구하고자 할 때 명령어를 넣어야 할 위치를 생각해 본다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 정리 <Q> 장애물을 뛰어넘는 로봇에서 조건은 무엇인가요? <A> 로봇에 앞에 장애물이 있는 경우와 없는 경우, 로봇 앞에 있는 장애물이 문인 경우와 벽인 경우 <Q> 다중 조건문을 활용해서 프로그래밍 할 수 있는 것을 일상 생활에서 찾아봅시다. <A> 대학의 학점 제도 140

10. 물고기 잡기 난이도 1. 수업안내 학습목표 반복문의 의미를 이해할 수 있다. 반복문과 조건문을 활용하여 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 조건문을 학습했습니까? 사용자 정의 함수를 학습했습니까? pick_object()를 학습했습니까? on_object()를 학습했습니까? 58쪽 56쪽 45쪽 45쪽 주 학습 내용 참고 반복문 68쪽 get_max_x() 52쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 물건 함수와 동작 함수만을 이용해서 프로그래밍을 하는 경우와 반복되는 규칙을 찾아서 프로그래밍을 했을 때의 차이점에 대해 설명한다. 규칙적으로 반복되는 부분을 찾을 수 있도록 지도한다. 핵심사고 평가기준 추상화 반복문의 의미를 설명할 수 있는가? 자동화/시뮬레이션 반복문을 프로그램에 적용할 수 있는가? 문제분해 반복문에 필요한 조건을 프로그램에 적용할 수 있는가? 141

2. 수업 전개 상황을 통한 동기유발 축제에서 물고기 잡기 행사가 진행 중이다. 가족행사로 진행된 이 날 행사는 청소년에게는 부모님과의 추억을 어른들에게는 유년시절의 추억을 회상할 수 있는 좋은 기회였다. 참가자들은 제한된 시간 안에 맨 손으로 물고기를 잡아서 매고 있는 그물망에 잡은 물고기를 넣고, 잡은 물고기는 집으로 가져갈 수 있다. http://www.hwasunjachinews.net/sub_read.html?uid=1675 학습할 문제 확인하기 문제 제시 플레이봇이 물고기 잡기를 하는 중입니다. 물에 있는 물고기를 다 잡을 수 있도록 프로그램을 만들어 보세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 물고기를 잡고, 잡은 물고기를 통에 넣는다. 물고기를 넣을 때 마다 통에 있는 물고기의 개수가 증가한다. 물고기의 총 개수를 화면에 보여준다. 142

[활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차를 순서대로 표현해 봅시다. 1 앞으로 한 칸 이동 후, 물고기가 있는지 확인한다. 2 잡은 물고기를 변수에 넣고, 변수의 값을 1증가 시킨다. 3 1~2를 벽을 만날 때까지 반복한다. 4 물고기 개수의 총합이 들어있는 변수의 값을 보여준다. 문제를 해결하기 위해 필요한 명령어를 나열해봅시다. 명령어 사용 목적 참고 for( ; ; ) 특정 행동을 반복하는데 사용 69쪽 pick_object 물건을 줍는데 사용 45쪽 on_object() 현재 위치에 물건이 있는지 판단하는데 사용 45쪽 document.write() 화면에 내용을 표시하는데 사용 38쪽 get_max_x() 월드의 x좌표 최대 크기 52쪽 143

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] for문 사용법 익히기 for (초기값 ; 조건 ; 증가값) { 반복할 내용 마카롱 100개 있습니다. 지금부터 30초 동안 원하는 만큼 가져갈 수 있어요. 가장 빠른 방법으로 마카롱을 가지고 가세요. 초기상태 목표상태 코딩 for (i=1 ; i<=100 ; i++) { pick_object() [작은 활동 2] 변수에 값이 누적되는 과정 설명하기 a 라는 이름의 물고기 잡는 통 1번째 반복 2번째 반복 3번째 반복 4번째 반복 a+1 a+1 a+1 a+1 물고기를 잡아서 넣는 통은 변하지 않으므로, 물고기를 잡아서 통에 넣을 때마다 1씩 증가된다. <Q> 물고기를 잡아서 통에 넣을 때마다 1씩 증가된다. 반복 횟수가 끝날 때 까지 a(물고기를 잡아서 넣는 통)는 계속 1씩 증가된다. 이를 코딩으로 표현하면? <A> a=a+1 144

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 물고기를 잡는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 sum=0 x=get_max_x()-1 for (i=1 ; i<=x ; i++) { a=front_is_clear() if (a==true) { sum=sum+1 pick_object() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 생각 뛰어넘기 1. 플레이봇이 빙어낚시를 하고 있습니다. 잡은 물고기의 총 개수를 화면에 보여주는 프로그램을 만들어 보세요. 초기상태 목표상태 활동 tip 물고기가 있는 경우와 없는 경우 두 가지 상황이 있음을 알려준다. 2. 장애물 뛰어넘는 로봇 문제를 반복문을 이용해서 프로그래밍 해 봅시다. 145

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 물고기 잡기에서 반복된 부분은 무엇인가요? <A> 물고기를 잡는 동작과, 잡아서 변수에 넣는 동작이 반복됨 <Q> 물고기 잡기에서 변수의 사용 용도는 무엇인가요? <A> 물고기를 잡아서 넣는 통, 물고기의 총합을 구하는 통의 역할 <Q> 반복문은 왜 사용하나요? <A> 같은 작업을 여러 번 해야 하는 수고를 덜어 주는 편리한 방법 146

응 용 편 활동하는 플레이봇 147

11. 범인 위치 찾기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) while 문을 사용할 수 있다. 증감 연산자를 사용할 수 있다. 좌표 개념을 이해할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한 를 학습했습니까? 조건을 비교하기 위한 if~else if문을 학습했습니까? 데이터를 저장하기 위한 변수를 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? 34쪽 58쪽 61쪽 56쪽 주 학습 내용 참고 set_color(x,y,색상) 52쪽 show_message() 40쪽 while문 73쪽 논리 값 이해 58쪽 증감연산자 62쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 월드에서 좌표의 개념을 쉽게 이해할 수 있도록 언플러그드 활동을 도입한다. 초기 값 설정의 필요성 및 중요성을 자연스럽게 깨달을 수 있도록 유도한다. while 문에 들어 갈 내용 및 논리 값에 따른 while 문의 실행 여부를 파악할 수 있도록 충분한 시간을 제공한다. 핵심사고 자료수집 평가기준 문제를 해결하기 위하여 while문안에 조건식을 적용할 수 있는가? 자료분석 변수를 증가하기 위한 연산자를 사용할 수 있는가? 자동화/시뮬레이션 발자국 모양을 처리할 수 있는 코드를 작성할 수 있는가? 148

2. 수업 전개 상황을 통한 동기유발 추리하는 모습이 담긴 영상을 보며 흥미를 유발하여 범인의 위치 찾기 활동에 관심을 가질 수 있도록 한다. - 발자국을 보고 따라가는 탐정 모습 - 명탐정 코난, 소년탐정 김전일, 영국드라마 셜록, 영화 셜록홈즈 등 탐정이 추리하는 과정이 어떠한지 이야기 해 본다. - 작은 문제들로부터 큰 문제로 나아감(문제의 재조직 방법 중 상향식 재조직 방법에 해당) 학습할 문제 확인하기 문제 제시 플레이봇 월드에 도둑이 나타났어요! 범인이 남긴 발자국을 따라 도둑의 위치를 초록색으로 나타내는 프로그램을 만들어 주세요. 단, 다음 조건을 만족해야 합니다. 1. 플레이봇이 범인의 위치를 잘 찾아냈을 경우 범인의 위치가 맞습니다! 메시지가 팝업으로 뜨도록 합니다. 2. 플레이봇이 범인의 위치를 찾아내지 못했을 경우 범인의 위치가 빨간색으로 나타나며 범인의 위치가 아닙니 다. 메시지를 출력하도록 합니다. Tip> 발가락이 오른쪽을 향하는 발 모양은 동쪽발자국, 발가락이 위쪽을 향하는 발 모양은 북쪽발자국 입니다. Tip> 플레이봇의 처음 위치 좌표는 (1,1)입니다. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 생각하기 - 문제 해결 과정를 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 149

[활동 1] 문제 상황 확인하기 초기상태 목표상태 발자국 모양의 종류가 2가지이다. 플레이봇의 처음 위치의 좌표는 (1,1)이다. 발자국 모양에 따라 범인의 위치를 가리키는 방향이 다르다. 발자국 모양에 따라 정한 범인의 위치를 초록색으로 표시한다. 발자국 탐색이 끝나면 결과를 알려주는 메시지가 떠야 한다. 범인의 위치를 맞추지 못하였을 경우 범인의 위치가 빨간색으로 나타난다. [활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 물건을 확인하는 기능 바닥색을 칠하는 기능 발자국 모양에 따라 좌표 값을 증가시키는 기능 메시지를 출력하는 기능 이 문제를 해결하기 위해 반복해야 하는 내용은 무엇이 있을까요? 발자국이 있는지 확인하고, 발자국 모양에 따라 좌표 값을 증가시켜야 합니다. 150

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 한 칸 이동한다. 2 발자국 모양을 확인한다. 3 동쪽 발자국이면 x좌표 값을 1증가한다. 4 북쪽 발자국이면 y좌표 값을 1증가한다. 5 발자국 모양이 없을때까지 1~4를 반복한다. 6 최종 좌표 위치의 바닥 색을 초록색으로 바꾼다. 7 최종 좌표 위치와 범인의 위치를 비교한다. 8 범인의 위치가 맞으면 범인의 위치가 맞습니다! 팝업 메시지를 출력한다. 9 범인의 위치가 아니면 범인의 위치가 아닙니다. 메시 지를 출력하고 범인의 위치를 빨간색으로 바꾼다. 10 프로그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. (범인의 위치를 맞혔는지 아닌지에 따라 다른 경우가 나와야 함을 인식시킨다.) (문제에서 제시한 조건을 만족하였는지 친구와 함께 확인하도록 한다.) 151

[활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 on_object() 물건이 있는지 확인 45쪽 what_object() 어떤 발자국 모양인지 확인 45쪽 변수 좌표 값과 발자국 모양을 저장 61쪽 while() 로봇이 결승점에 도착할 때까지 반복하는데 사용 73쪽 set_color(x,y,색상) 좌표 값에 해당하는 바닥 색을 바꾸기 위해 사용 52쪽 show_message() 메시지를 팝업으로 띄워줌 40쪽 document.write() 메시지를 출력 38쪽 활동 tip 플레이봇이 반복해서 확인해야 하는 내용이 무엇인지 파악할 수 있도록 유도한다. [작은 활동 1] 반복문과 조건문의 혼합 반복해서 확인해야 하는 조건이 무엇인지 찾아본다. <Q> 플레이봇이 반복해서 확인해야 하는 조건이 있나요? <A> 발자국 모양의 물건이 있는지 확인해야합니다. 발자국 모양의 물건이 있다면 어떤 발자국 모양인지 확인해야 합니다. 조건에 따라 어떤 동작을 실행해야 할지 생각해본다. <Q> 발자국 모양이 동쪽발자국 이라면 어떤 동작을 실행해야 하나요? <A> 범인의 x좌표 값을 증가시켜야 합니다. <Q> 발자국 모양이 북쪽발자국 이라면 어떤 동작을 실행해야 하나요? <A> 범인의 y좌표 값을 증가시켜야 합니다. 152

반복해서 확인해야 하는 조건과 그 조건에 따른 동작이 실행될 수 있도록 하려면 어떤 구문을 써야 할지 생각 해 본다. - 반복문 중 어떤 구문을 쓰면 좋을지 이야기 해본다. - 반복문 안에 조건문을 써야 함을 인식시킨다. <Q> 반복해서 조건을 확인하려면 어떤 종류의 구문을 써야 할까요? <A> 반복문을 사용해야 합니다. <Q> 조건에 따라 동작이 실행될 수 있도록 하려면 어떤 종류의 구문을 써야 할까요? <A> 조건문을 사용해야 합니다. <Q> 그렇다면 플레이봇이 조건에 따라 동작이 실행되는 것을 반복하려면 구문을 어떻게 사용해야 할까요? <A> 반복문 안의 반복되는 내용에 조건문을 넣어 처리합니다. 논리 값에 대해 복습할 수 있도록 안내한다. - 참(True), 거짓(False) 의 2개의 값을 가짐. 숫자 표현 Boolean 표현 의미 1 true 참, 맞음 0 false 거짓, 틀림 - A AND B 는 A와 B 모두 만족해야 함, A OR B는 A와 B 둘 중 하나만 만족해도 된다. A B A && B A B 거짓 (false) 거짓 (false) 거짓 (false) 거짓 (false) 거짓 (false) 참 (true) 거짓 (false) 참 (true) 참 (true) 거짓 (false) 거짓 (false) 참 (true) 참 (true) 참 (true) 참 (true) 참 (true) 153

[작은 활동 2] 좌표 개념 이해 활동을 통해 좌표의 개념 이해를 돕는다. - 우리 반의 자리 배치를 월드 위에 표현해 본다. - 자신의 자리를 월드 위의 좌표 값으로 읽어본다. 친구의 자리를 좌표 값으로 읽어본다. (학습지 제공) 내 자리의 좌표는 무엇인가요? -> (3,4) (2,3) 위치의 친구 이름은 무엇인가요? -> 진호 (1,1) 위치에 있는 친구가 내 자리를 찾아올 수 있도록 알려주려면 어떻게 해야 할까요? 단, 내 자리의 좌표를 말할 수 없습니다. -> 오른쪽(동쪽)으로 두 칸, 위쪽(북쪽)으로 세 칸 이동해! 활동 tip 월드 내 좌표에 친숙해질 수 있도록 충분히 시간을 제공한다. 교사의 질문 이외에도 학생 스스로 질문을 만들어 볼 수 있도록 한다. [작은 활동 3] 좌표 값 지정 저장 공간은 어떤 것이 필요한지 생각해본다. - 좌표 값을 저장할 x좌표, y좌표 변수가 필요 - 발자국이 어떤 모양인지 저장할 변수가 필요 좌표 값 변수의 값이 어떻게 변해야 할지 이야기 해본다. <Q> 좌표 값 변수는 어떤 상황에서 변하나요? <A> 발자국 모양에 따라 x좌표 값이나 y좌표 값이 변합니다. <Q> 값은 얼마씩 변하나요? <A> 발자국 모양 하나를 만날 때마다 1씩 변합니다. <Q> 맨 처음 좌표 값은 몇으로 둬야 할까요? <A> x좌표 값 1, y좌표 값 1 로 둬야 합니다. 왜냐하면 플레이봇의 처음 위치가 (1,1)이기 때문입니다. 활동 tip 필요하다면 초기 값 설정이 잘못되었을 경우의 예를 제시한다. 초기 값 설정을 x=0, y=0으로 할 경우 오류 발생 154

[보충] 필요한 연산을 확인할 수 있도록 안내한다. <Q> 변수 값을 1씩 증가하게 하는 방법은 무엇인가요? <A> a = a+1 또는 a++ 가 있습니다. 같은 이름인지 아닌지 비교할 때 쓸 수 있는 연산자는 ==입니다. 활동 tip ==와 =는 다르다. 정보 담을 때는 =, 같은지 비교할 때는 ==를 사용한다. 활동 tip 변수 값을 1씩 감소하게 하는 것은 a=a-1 또는 a-- 가 있다. [활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 플레이봇이 앞으로 이동하며 범인의 위치를 찾는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 x=1 y=1 while (on_object()==true) { a=what_object() if (a== 동쪽발자국 ) { x++ else if (a== 북쪽발자국 ) { y++ set_color(x,y, green ) if (x==4 & y==3) { show_message( 범인의 위치가 맞습니다! ) else { set_color(4,3, red ) document.write( 범인의 위치가 아닙니다. ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 155

생각 뛰어넘기 월드를 편집하여 범인의 위치를 바꾸어 보자. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 반복문과 조건문의 차이점은 무엇인가요? <A> 반복문은 특정한 단계를 반복하는 것이고, 조건문은 조건을 만족하는지 아닌지에 따라 해당 명령어를 실행하는 것입니다. <Q> 반복문과 조건문은 같이 쓰일 수 있나요? <A> 같이 쓰일 수 있습니다. <Q> 변수 값을 1씩 증가시킬 수 있는 연산자에는 어떤 것이 있나요? <A> a=a+1 또는 a++를 사용할 수 있습니다 156

12. 비퍼 내려놓기 난이도 1. 수업안내 학습목표 문제에서 반복 상황을 찾을 수 있다. 다중 반복의 개념을 이해하고 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 for문을 사용한 반복문을 학습했습니까? 플레이봇이 비퍼를 내려놓기 위한 put_beeper()를 학습했습니까? 69쪽 47쪽 학습 내용 참고 put_beeper() 47쪽 다중 반복문 70쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 반복문에 대한 복습 및 학습이 이루어지도록 한다. repeat() 함수에 의한 반복 명령을 for문을 활용하여 구현하도록 한다. 다중 반복에 대해 설명한 후 해볼 수 있는 활동이다. 다중 반복문에서 각각의 반복문이 어떤 역할을 하는지 이해할 수 있도록 지도한다. 반복적인 요소(행동)들을 잘 찾아서 다중 반복문에 분배하는 사고의 과정을 중요시해야 한다. 핵심사고 평가기준 자동화/시뮬레이션 추상화 문제에서 반복 상황을 찾을 수 있습니까? 다중 반복의 개념을 말하고 사용할 수 있습니까? 157

2. 수업 전개 상황을 통한 동기유발 자료 같은 높이의 돌이 쌓여 있는 계단 사진 벽돌을 쌓아 계단을 만들기 위해서는 첫 번째 단은 벽돌 한 개를 놓고, 두 번째 단은 벽돌 두 개를 놓고, 세 번째 단은 벽돌 세 개를 놓아야한다. 벽돌을 쌓아 계단을 만드는 이미지를 보고 학생들이 비퍼 내려놓기 활동에 관심을 가질 수 있도록 한다. 문제 제시 학습할 문제 확인하기 플레이봇이 앞으로 한 칸 이동할 때마다 비퍼를 1개씩 더 내려놓는 프로그램을 만들어 주세요. 즉, 첫 번째 칸에는 비퍼를 1개, 그 다음에는 2개, 그 다음에는 3개... 마지막에는 10개를 내려놓는 프로그램을 만들어 주세요. 활동 tip 등차수열을 학습한 학생들에게 다음과 같이 제시할 수 있다. 플레이봇이 다음의 등차수열을 구하도록 프로그램을 만드세요. - 수열의 첫 항은 1이고 공차는 1인 수열(1, 2, 3, 4... 10) - 수열에 해당하는 수만큼 바닥에 비퍼를 내려놓습니다. 등차수열 : 첫째항에 일정한 수를 더해서 얻은 항으로 이루어진 수열 공차 : 각 항에 더해지는 일정한 수 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 158

[활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇은 충분한 개수의 비퍼를 가지고 시작한다. put_beeper() 명령어로 비퍼를 내려놓은 후 앞으로 한 칸 이동한다. 앞으로 한 칸 이동할 때마다 내려놓는 비퍼의 개수가 1개씩 늘어난다. 내려놓는 비퍼의 개수가 10개가 될 때까지 반복한다. [활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 이동하기 repeat()를 사용하지 않고 플레이봇이 10칸 이동하기 플레이봇이 1칸 이동(move)하는 행동을 10번 수행 비퍼 내려놓기 플레이봇이 현재 칸에 비퍼를 1개 내려놓기 플레이봇이 현재 칸에 비퍼를 5개 내려놓기 159

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 내려놓을 비퍼의 개수 를 1로 정한다. 2 내려놓을 비퍼의 개수 만큼 비퍼를 내려놓는다. 3 앞으로 한 칸 이동한다. 4 내려놓을 비퍼의 개수 를 1 증가시킨다. 5 한 칸에 내려놓는 비퍼의 개수가 10개가 될 때까지 2~4를 반복한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 한 칸 앞으로 이동하는데 사용 34쪽 put_beeper() 현재 칸에 비퍼를 내려놓는데 사용 47쪽 for (i=1 ; i<=10 ; i++) { for (j=1 ; j<=i ; j++) { 한 칸 앞으로 이동하는 동작을 10번 반복하는데 사용 비퍼 내려놓는 동작을 i번 반복하는데 사용 69쪽 69쪽 활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 160

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 이동하기 플레이봇이 다섯 칸 앞으로 이동하는 방법을 생각해봅시다. 주의 repeat() 함수에 의한 반복 명령을 for문을 활용하여 구현하도록 한다. [실행 전] [실행 후] <Q> 시작값을 1로 하는 for문을 완성해 볼까요? <A> 1 for (i=1 ; i<=5 ; i++) { 2 3 <Q> for문 안에서 반복되는 행동은 무엇인가요? <A> [작은 활동 2] 비퍼를 내려놓으며 이동하기 플레이봇이 비퍼를 내려놓으며 다섯 칸 앞으로 이동하는 방법을 생각해봅시다. [실행 전] [실행 후] <Q> 시작값을 1로 하는 for문을 완성해 볼까요? <A> 1 for (i=1 ; i<=5 ; i++) { 2 3 <Q> 현재 칸에 비퍼를 내려놓는 동작을 수행하는 명령어는 무엇인가요? <A> put_beeper() <Q> for문 안에서 반복되는 행동은 무엇인가요? <A> put_beeper(), 161

[작은 활동 3] 다중 반복문 for문을 두 개 사용하여, for문 안에 for문을 넣을 수 있다. 이것을 다중 반복문라고 한다. for(i=0;i<=4;i++){ for(j=0;j<=4;j++){ 안쪽 반복문 실행문 바깥쪽 반복문 - 다중 반복문은 반복문 안에 또 다른 반복문이 있다. - 바깥 반복문이 한 번 수행될 때마다 안쪽 반복문이 수행횟수 만큼 반복을 수행한다. 다중 반복문에서 값의 변화는 다음과 같다. for (i=0 ; i<2 ; i++) { for (j=0 ; j<3 ; j++) { document.write(i+j) i j document.write(i+j) 0 0 0 1 1 2 2 0 1 1 1 2 2 3 [작은 활동 4] n개의 비퍼 내려놓기 플레이봇이 비퍼를 내려놓는 동작 n번 수행하는 방법을 생각해봅시다. 1 2 3 4 5 n=3 for (i=1 ; i<=n ; i++) { put_beeper() [실행 전] [실행 후] 1 2 3 4 5 n=10 for (i=1 ; i<=n ; i++) { put_beeper() [실행 전] [실행 후] 종료값의 변화 확인 - 비퍼를 3개 내려놓을 때와 비퍼를 10개 내려놓을 때 코드에서 달라지는 부분을 생각해봅시다. - 비퍼를 내려놓는 동작을 n번 수행하도록 프로그램을 만드는 방법을 생각해봅시다. 162

주의 활동 tip 반복문의 종료값을 상수가 아닌 변수로 설정하여 문제를 해결하는 방법을 학생들이 스스로 생각해 낼 수 있도록 유도한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행한다. [활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3, 4]을 참고해서 플레이봇이 앞으로 이동하며 비퍼를 1개, 2개, 3개... 10개 순으로 바닥에 내려놓는 프로그램을 만들 어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 // 명령어를 실행하는 공간 for (i=1 ; i<=10 ; i++) { for(j=1 ; j<=i ; j++) { put_beeper() 주의 바깥 반복문과 안쪽 반복문의 역할을 잘 생각해 보도록 한다. 생각 뛰어넘기 플레이봇이 앞으로 이동하며 비퍼를 2개, 4개, 6개... 20개 순으로 바닥에 내려놓는 프로그램을 만들어 주세요. 활동 tip 등차수열을 학습한 학생들에게 다음과 같이 제시할 수 있다. 플레이봇이 다음의 등차수열을 구하도록 프로그램을 만드세요. - 수열의 첫 항은 2이고 공차는 2인 수열(1, 2, 3, 4... 10) - 수열에 해당하는 수만큼 바닥에 비퍼를 내려놓습니다. 등차수열 : 첫째항에 일정한 수를 더해서 얻은 항으로 이루어진 수열 공차 : 각 항에 더해지는 일정한 수 초기상태 목표상태 163

피보나치 수만큼 비퍼 내려놓기(피보나치 수 구하기) 피보나치 수는 0과 1로 시작하며, 다음 피보나치 수는 바로 앞의 두 피보나치 수의 합이 된다. 초기상태 목표상태 숫자 0은 플레이봇 월드에서 비퍼로 표현되지 않으므로 비어있음. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 비퍼 내려놓기 에서 반복 상황은 무엇이었나요? <A> 앞으로 이동, 비퍼 내려놓기 다음 코드를 보고 질문에 답하세요. 1 2 3 4 5 for (i=1 ; i<=2 ; i++) { for (j=1 ; j<=5 ; j++) { put_beeper() <Q> 바깥 반복문이 1번 수행될 때 안쪽 반복문은 몇 번 수행되나요? <A> 5번 <Q> put_beeper()는 총 몇 번 수행되나요? <A> 10번 164

13. 다양한 크기의 사각형 그리기 난이도 1. 수업안내 학습목표 다중 반복문의 의미를 이해할 수 있다. 다중 반복문을 활용하여 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 반복문을 학습했습니까? 색깔을 칠하는 명령어를 학습했습니까? get_max_x()를 학습했습니까? 68쪽 52쪽 52쪽 주 학습 내용 참고 다중 반복문 68쪽 get_max_y() 52쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 반복문을 사용해야 하는 이유에 대해 설명한다. 반복문을 사용할 때 오류가 많이 발생하는 부분인 { 를 열고, 닫는 부분에 대해 설명한다. 핵심사고 평가기준 반복문의 의미를 설명할 수 있는가? 추상화 다중 반복문의 의미를 이해하였는가? 알고리즘과 절차 문제상황에 필요한 조건문을 작성할 수 있는가? 165

2. 수업 전개 상황을 통한 동기유발 5cm, 10cm, 20cm등 다양한 크기의 정사각형을 종이에 그려 보고, 사각형의 크기가 달라질 때 마다 다시 그려야 하는 불편함에 대해 이야기해 본다. 문제 제시 학습할 문제 확인하기 정사각형은 같은 길이의 4개의 변으로 이루어져 있습니다. 이 원리를 이용해서 월드에 사각형을 그려 봅시다. 월드의 크기가 달라져도 정사각형을 그릴 수 있도록 프로그램을 만들어 보세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 로봇이 이동하면서 색을 칠한다. 왼쪽으로 회전하면서 색을 칠한다. 사각형은 4개의 변으로 이루어져 있다. 월드 크기를 알 수 있는 명령어를 사용한다. 166

[활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 월드 x좌표의 최대 크기를 알아낸다. 2 앞으로 한 칸 움직이면서, 색을 칠한다. 3 2을 월드 x좌표의 최대 크기 1번 만큼 반복한 후, 왼쪽으로 회전 한다. 4 2 ~ 3을 월드 y좌표의 최대 크기만큼 반복한다. 활동 tip 로봇이 반복하는 동작의 규칙성을 찾을 수 있도록 한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 for ( ; ; ) { 반복할 내용 특정 행동을 반복하게 한다. 69쪽 set_color() 현재 칸에 색을 칠하기 52쪽 get_max_x() 월드 x좌표의 최대 크기 알아내기 52쪽 get_max_y() 월드 y좌표의 최대 크기 알아내기 52쪽 167

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동1] 일정한 크기의 정사각형 그리기 - 3 3 크기의 정사각형을 그려 보자. 초기상태 목표상태 코딩 for (i=1 ; i<=4 ; i++) { for (j=1 ; j<=2 ; j++) { set_color( pink ) turn_left() 안쪽 반복문 for (j=1 ; j<=2 ; j++) { set_color( pink ) 3번을 반복하면 벽에 부딪치므로 3-1 만큼 2번 반복한다. 바깥쪽 반복문 for (i=1 ; i<=4 ; i++) { 안쪽 반복문 정사각형이 4개의 변으로 이루어져 있 으므로 4번 반복한다. <Q1> [작은 활동 1]에서 작성한 프로그램에서 어떤 부분을 바꿔주면 월드 크기에 상관없이 정사각형을 그릴 수 있을까요? <A1> for문의 반복을 계속하기 위한 조건 부분을 월드 크기를 알아내는 명령어를 활용하여 바꾸어 준다. <Q2> <Q1>의 답변처럼 프로그램을 변경했을 때 오류는 없나요? 있다면 그 해결방법은 무엇인가요? <A2> 월드의 크기만큼 반복을 하면 플레이봇이 벽에 부딪친다. 월드 크기를 알아내서 1을 하면 해결된다. 168

[작은 활동 2] 월드 크기 알아내서 색칠하기 안쪽 반복문 x=get_max_x( ) for (j=1 ; j<=x-1 ; j++) { set_color( pink ) 월드의 최대크기-1만큼 색을 칠하면서 이동한다. 바깥쪽 반복문 for (i=1 ; i<=4 ; i++) { 안쪽 반복문 정사각형이 4개의 변으로 이루어져 있으므로 4번 반복한다. [활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 다양한 크기의 사각형을 그리는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 x=get_max_x() for (i=1 ; i<=4 ; i++) { for (j=1 ; j<=x-1 ; j++) { set_color( blue ) turn_left() 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 169

생각 뛰어넘기 월드 크기에 상관없이 삼각형을 그릴 수 있는 프로그램을 만들어 보세요. 초기상태 목표상태 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 정리 <Q> 정사각형을 그리는 방법에서 반복문을 사용해서 편리했던 점은 무엇인가요? <A>, set_color()와 같은 동작을 여러 반복하지 않고, 간결하고 표현 <Q> 월드 크기를 알아내는 명령어는 무엇인가요? <A> get_max_x(), get_max_y() 170

14. 농장에서 딸기 수확하기 난이도 1. 수업안내 학습목표 반복문을 활용하여 실생활에 필요한 프로그램을 작성할 수 있다. 조건문을 활용하여 실생활에 필요한 프로그램을 작성할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 반복문을 학습했습니까? 68쪽 조건문을 학습했습니까? 58쪽 다중 반복문을 학습했습니까? 70쪽 주 학습 내용 참고 조건문 58쪽 다중 반복 변수 70쪽 61쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 조건에 따라 다른 로봇의 움직임을 이해할 수 있도록 지도한다. 2개의 반복문 이용해서 각각 반복해야 하는 부분에 대해 이해할 수 있도록 지도한다. 핵심사고 평가기준 자동화/시뮬레이션 추상화 반복문의 규칙성을 찾을 수 있는가? 문제해결을 위한 조건문을 제시할 수 있는가? 171

2. 수업 전개 상황을 통한 동기유발 농장에도 첨단 바람 로봇이 잘 익은 딸기만 골라서 수확 야채와 과일을 재배하는 농장에서 일손 구하기가 점차 힘들어지면서 최근 들어 야채 묘종을 옮겨 심는 기계에서 딸기를 따는 로봇까지 첨단 기술이 전통 농업에도 도입되고 있다. 애그로봇은 딸기를 수확하는 로봇이다. 14개의 팔에는 금속 바구니와 색깔을 감지하는 센서가 달려 있어서 익지 않은 딸기는 그냥 지나가고 잘 익은 딸기만 골라 따 바구니에 담는다. 지금까지 야채와 과일은 기계로 수확하면 흠집이 날 수 있기 때문에 거의 사람 손에 의존해왔다. 그러나 이젠 테크놀로지의 발달로 로봇이 잘 익은 딸기를 골라 따고 양배추도 새싹만 잘라낼 수 있는 수준이 됐다. http://www.koreadaily.com/news/read.asp?art_id=3340741 문제 제시 학습할 문제 확인하기 농장에서 딸기를 수확하려고 합니다. 로봇이 딸기가 달린 위치에서 딸기를 따고, 수확한 딸기의 총 개수를 알려주는 프로그램을 만들어 보세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 172

[활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇은 딸기가 있으면 딸기를 잡고, 없으면 그냥 지나간다. 잡은 딸기는 바구니에 넣는다. 비닐 하우스의 길이가 일정하다. 딸기 농장의 크기는 한 면이 4칸이고, 3개의 면으로 이루어져 있다. [활동 2] 문제 해결 과정 스스로 생각하기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 현재 위치에 딸기가 있는지, 없는지 확인한다. 2 딸기가 있으면, 딸기를 따고, 바구니의 딸기 숫자를 1증가한다. 3 딸기가 없으면, 그냥 지나간다. 4 1~3을 월드 크기-1만큼 반복한 후, 왼쪽으로 회전한다. 5 4를 3번 반복한다. 6 바구니에 담긴 딸기의 총 개수를 화면에 보여준다. 활동 tip 여러 개의 변수를 사용해야 하는 점이 익숙하지 않을 수 있다. 사용되는 변수를 미리 정해 놓으면 프로그램 작성에 도움이 된다. 173

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 if~else 조건문 58쪽 for( ) 반복문 69쪽 on_object( ) 현재 위치에 물건이 있는지 판단하는데 사용 45쪽 document.write() 화면에 내용을 표시하는데 사용 38쪽 [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 딸기가 있을 때와 없을 때 두 가지 상황에 따라 다르게 움직이기 초기상태 목표상태 코딩 a=on_object() if (a==false) { else { pick_object() [작은 활동 2] 딸기가 없는 상태의 농장에서 로봇 움직이기 - 앞으로 4칸을 움직이고, 3면을 반복한다. 초기상태 목표상태 코딩 for (i=1;i<=3;i++){ for (j=1;j<=4;j++){ turn_left( ) 174

<Q> 위 프로그램에서 사용되는 변수를 알아보자. 현재 위치에서 딸기가 있는지 확인 할 때 : a 앞으로 움직임을 반복할 때 : j 총 3개의 면을 움직일 때 : i 딸기를 딸 때 마다 바구니에 개수를 증가시킬 때 : sum 월드의 x좌표 크기를 알아낼 때 : x [활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 딸기를 수확하는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sum=0; x=get_max_x()-1 for (i=1 ; i<=3 ; i++) { for (j=1 ; j<=x ; j++) { a=on_object() if (a==false) { else { pick_object() sum=sum+1 turn_left() document.write(sum + 개의 딸기를 수확했습니다. ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 175

생각 뛰어넘기 플레이봇 딸기 농장에서 딸기를 수확하고, 수확한 딸기의 개수를 화면에 보여주는 프로그램을 만들어 보세요. 초기상태 목표상태 활동 tip 플레이봇 동작의 규칙성을 먼저 찾아본다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 같은 주제라도 어떤 상황인지에 따라 접근하는 방법이 다름을 이해한다. <Q> 딸기 수확하기에서 조건문은 어떤 상황에서 사용하였나요? <A> 현재 위치에 딸기가 있는지 확인할 때 사용 176

15. 마트 주차장 관리하기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) 누적의 개념을 이해하고 계산에 사용할 수 있다. 다중 반복의 개념을 이해하고 사용할 수 있다. get_color()로 색을 알아내서 사용할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 새로운 명령어를 만들어 사용하는 사용자 정의 함수를 학습했습니까? 변수와 연산자, 조건 개념을 학습했습니까? 좌표를 알아내는 get_y(), 숫자를 내려놓는 put_beeper()를 학습했습니까? 반복 명령을 처리하기 위한 for(), repeat()를 학습했습니까? 56쪽 58쪽, 61쪽, 62쪽 47쪽, 52쪽 41쪽, 69쪽 주 학습 내용 참고 칸의 y좌표와 색을 알아내기 위한 get_y(), get_color() 52쪽 다중 반복문 누적 개념 70쪽 61쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 사용자 정의 함수, 변수와 연산자, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 더해서 쌓는다 는 누적의 개념을 이해하는데 어려워할 수 있으므로, 주의해서 지도한다. 다중 반복문에서 각각의 반복문이 어떤 역할을 하는지 이해할 수 있도록 지도한다. 반복적인 요소(행동)들을 잘 찾아서 다중 반복문에 분배하는 사고의 과정을 중요시해야 한다. 핵심사고 평가기준 추상화 누적 의 개념을 설명할 수 있습니까? 추상화 다중 반복 의 의미를 설명할 수 있습니까? 알고리즘과 절차 자동화 빈 주차장의 개수를 표시하기 위한 문제해결과정을 순서적 단계로 표현할 수 있습니까? 177

2. 수업 전개 상황을 통한 동기유발 백화점이나 대형마트의 주차장에 가보면 차가 주차되어 있는 칸은 빨간색, 주차되어 있지 않은 칸은 파란색 불을 켜서 멀리서도 쉽게 주차 공간을 찾을 수 있도록 관리한다. 그리고 주차장 입구 쪽에 주차가 가능한 공간의 개수를 숫자로 표시해준다. 이러한 주차관리시스템에서는 차가 있는지 없는지를 판단하기 위해 센서를 사용한다. 지금부터 학생들이 자신이 경험한 주차 관리 시스템을 상기하면서 마트 주차장 관리하기 활동에 관심을 가질 수 있도록 한다. 학습할 문제 확인하기 문제 제시 플레이봇 마트에 새로운 주차관리시스템이 도입되었어요. 이 시스템은 사용 중인 공간과 빈 주차 공간을 서로 다른 색깔로 알아낸답니다. 빈 주차 공간의 개수를 파악해서 숫자로 표시하는 주차관리시스템 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 178

[활동 1] 문제 상황 확인하기 초기상태 목표상태 총 3개의 주차장이 있는데, 차가 주차되어 있는 공간은 pink, 빈 공간은 skyblue로 색이 칠해져 있다. 로봇은 주차장 옆을 지나가면서 주차장에 몇 개의 주차 가능 공간이 있는지 파악해서 숫자로 표시한다. 로봇은 모든 주차장의 주차 가능 공간을 숫자로 표시하고 원래의 위치로 되돌아온다. 주차 가능 공간은 get_color() 명령어를 이용해서 색을 알아내고, 그 색으로 판단해야 한다. [활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 칸의 색을 알아내서 주차 가능 공간의 개수를 파악하는 기능 로봇이 이동하면서 주차 가능 공간의 개수를 숫자로 표시하는 기능 모든 주차장의 입구에 숫자를 표시한 후 원래의 위치로 되돌아오는 기능 이 문제를 해결하기 위해 반복해야 하는 일에는 어떤 것들이 있는지 적어볼까요? 주차장의 입구에 숫자를 표시하는 행동을 주차장의 개수만큼 반복합니다. 각각의 주차장에서 주차 가능한 공간의 개수를 알아내기 위해 주차 칸의 개수만큼 색을 알아내는 행동을 반복합니다. 주차가 가능한 공간인지 아닌지는 칸의 색으로 판단합니다. 칸의 색을 알아내기 위해 사용하는 명령어는 무엇일까요? get_color() 179

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대로 적고, 순서도를 그려봅시다. 1 주차 가능 공간의 개수 를 0으로 설정하고, 앞으로 한 칸 이동한다. 2 칸의 색을 확인해서 빈 공간이면 주차 가능 공간의 개수 를 1증가 시키는 행동을 칸의 개수만큼(4번) 반복한다. 3 주차 가능 공간의 개수 를 숫자로 표시하고, 다시 한 칸 앞으로 이동한다. 4 1~3을 주차장 개수만큼(3번) 반복한다. 5 원래의 위치로 되돌아온다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() turn_right() 로봇이 이동하는데 사용 34쪽, 36쪽, 56쪽 사용자 정의 함수(function) 로봇의 규칙적인 행동을 새로운 명령어로 만드는데 사용 56쪽 변수와 연산자 주차 가능 공간의 개수를 계산하는데 사용 61쪽, 62쪽 get_color() 칸에 칠해진 색을 알아내는데 사용 52쪽 get_x(), get_y() 로봇의 좌표를 알아내는데 사용 52쪽 if(), for() 주차 가능 공간인지 아닌지를 판단하는데 사용 58쪽, 69쪽 180

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 누적을 이용해서 주차 가능 공간 의 개수 세기 <Q> 주차장에 주차 가능 공간 이 몇 개 있는지 알아내야 하는데, 어떻게 해야 할까요? <A> 주차 공간의 색을 하나씩 검사해서 skyblue이면 주차 가능 공간 의 수를 1씩 누적시키면 됩니다. 누적은 더해 넣는다, 증가시킨다 는 뜻을 담고 있습니다. 예를 들어, 하나의 상자를 준비합니다. 그리고 그 상자에 탁구공을 1개 넣고, 탁구공을 1개 또 넣고, 탁구공을 1개 또 넣으면, 상자에는 총 3개의 탁구공이 누적되는 것입니다. 같은 방법으로, 주차 가능 공간의 개수를 저장할 변수를 하나 준비합니다. 그 다음에 로봇이 칸의 색을 하나씩 검사해서 그 색이 skyblue이면, 변수에 1씩 더해서 넣는 것이죠. 1 2 3 4 5 cnt=0 color=get_color() if (color== skyblue ) { cnt++ 또는 1 2 3 4 5 cnt=0 color=get_color() if (color== skyblue ) { cnt=cnt+1 이렇게 하면 주차 가능 공간 의 개수를 셀 수 있습니다. [작은 활동 2] 크게 반복되는 행동, 작게 반복되는 행동 찾기 이번 활동을 통해 [크게 반복되는 행동]과 [작게 반복되는 행동]을 찾을 수 있습니다. 먼저 [크게 반복되는 행동]을 찾아봅시다. 181

<Q> 로봇이 위의 그림과 같이 움직인다고 할 때, 로봇의 움직임에서 반복되는 행동은 무엇인가요? <A> 앞으로 한 칸 가서, 빈칸의 개수를 숫자로 표시하고, 다시 한 칸 앞으로 가는 행동이 3번 반복됩니다. 즉, 다음과 같이 3개의 행동으로 나누어 볼 수 있습니다. 이번에는 [작게 반복되는 행동]을 찾아봅시다. [작게 반복되는 행동]은 [크게 반복되는 행동] 안에서 이루어지는 반복 행동입니다. <Q> 로봇이 위의 그림과 같이 [크게 반복되는 행동]을 한 번 했을 때, 로봇이 한 행동은 무엇인가요? <A> 1 앞으로 한 칸 이동 2 로봇의 왼쪽에 있는 4개 주차 공간을 검사해서 빈 주차 공간(skyblue)의 개수를 파악 3 파악한 빈칸의 개수를 숫자로 표시 4 앞으로 한 칸 이동 <Q> 이때 로봇이 반복하는 행동(작게 반복되는 행동)은 무엇인가요? <A> 로봇의 왼쪽에 있는 주차 공간 4개를 검사해서 빈 주차 공간이 있으면 주차 가능 공간 의 개수를 +1 하는 행동을 칸의 개수만큼(4번) 반복합니다. 즉, (1,2) (2,2) (3,2) (4,2) 4개의 칸을 하나씩 검사해서 주차 가능 공간 의 개수를 구합니다. 182

이 문제는 다음 그림과 같이 표현할 수 있습니다. <Q> 이 문제에서 [크게 반복되는 행동]을 프로그램 코드 형식으로 표현해볼까요? <A> 1 for (i=1 ; i<=3 ; i++) { 2 3 [작게 반복되는 행동](=빈칸 개수 세기) 4 [빈칸 개수를 숫자로 표시] 5 6 <Q> 이번에는 [작게 반복되는 행동]을 프로그램 코드 형식으로 표현해볼까요? <A> 1 for (x=1 ; x<=4 ; x++) { 2 [칸의 색을 알아내서, skyblue이면 빈칸의 개수를 +1] 3 <Q> 이제 [작게 반복되는 행동]을 [크게 반복되는 행동]에 넣어볼까요? <A> 1 for (i=1 ; i<=3 ; i++) { 2 3 for (x=1 ; x<=4 ; x++) { 4 [칸의 색을 알아내서, skyblue이면 빈칸의 개수를 +1] 5 6 [빈칸 개수를 숫자로 표시] 7 8 다중으로 반복되는 내용에 대한 분석이 끝났습니다. 실제 프로그램 코드로 만들어봅시다. <Q> [작게 반복되는 행동]을 프로그램 코드로 만들어볼까요? <A> 1 cnt=0 2 for (x=1 ; x<=4 ; x++) { 3 y=get_y() 4 color=get_color(x,y) 5 if (color== skyblue ) { 6 cnt++ 7 8 활동 tip cnt++ 은 cnt 변수에 들어 있는 값을 1 증가시키라는 뜻입니다. 183

<Q> [작게 반복되는 행동]을 [크게 반복되는 행동]에 넣어 프로그램 코드로 만들어볼까요? <A> 1 2 3 4 5 6 7 8 9 10 11 12 13 for (i=1 ; i<=1 ; i++) { cnt=0 for (x=1 ; x<=4 ; x++) { y=get_y() color=get_color(x,y) if (color== skyblue ) { cnt++ repeat( put_beeper(), cnt) 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. [활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]를 참고해서 주차 가능 공간을 숫자로 표시한 후, 원래의 위치로 되돌아오는 완성된 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 새로운 명령어를 만드는 공간 function print_number() { for (i=1 ; i<=3 ; i++) { cnt=0 for (x=1 ; x<=4 ; x++) { y=get_y() color=get_color(x,y) if (color== skyblue ) { cnt++ repeat( put_beeper(), cnt) 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 function reset() { repeat( turn_left(),2) repeat(,6) repeat( turn_left(),2) // 명령어를 실행하는 공간 print_number() reset() 184

생각 뛰어넘기 각각의 주차장에 몇 개의 주차 가능 공간이 있는지 알아내서 숫자로 표시하는 문제를 잘 처리했나요? 그렇다면 심화 문제를 풀어봅시다. [심화 문제] 이번에는 전체 주차장에 있는 주차 가능 공간의 개수를 월드 맨 위쪽에 숫자로 표시하는 프로그램 코드를 만들어 봅시다. [실행 전] [실행 후] 어떻게 하면 이 문제를 풀 수 있을까요? 자신이 생각한 방법을 말해봅시다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 누적의 개념에 대해 설명해볼까요? <A> 누적은 하나의 변수에 값을 계속 더해 넣는 것을 의미합니다. <Q> 다중 반복의 개념에 대해 설명해볼까요? <A> 다중 반복은 어떤 일을 반복적으로 하는데, 그 반복되는 일 안에서 또다른 일이 반복적으로 일어나는 것을 말합니다. 밖에 있는 [크게 반복되는 일]과 그 안에 있는 [작게 반복되는 일]의 관계를 잘 풀어내는 것이 중 요합니다. <Q> 우리 생활 속에서 발견되는 다중 반복의 사례에는 어떤 것이 있을까요? <A> 가장 대표적인 다중 반복의 예는 구구단입니다. 구구단은 2단부터 9단까지 1단씩 증가하면서 8번 반복하는데, 그 안에서 곱하기 1부터 곱하기 9까지9번 곱 하는 행동이 반복됩니다. 185

16. 100m 달리기 난이도 1. 수업안내 학습목표 조건식에 논리연산자(&&)를 활용할 수 있다. 객체 지향의 개념을 이해하고 사용할 수 있다. 난수의 개념을 이해하고, get_random()으로 난수를 구해 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 결과를 출력하기 위한 document.write()를 학습했습니까? 변수와 연산자, 좌표를 알아내는 get_x()를 학습했습니까? 조건에 따른 처리를 하기 위한 switch()와 if()를 학습했습니까? 반복 명령을 처리하기 위한 while()을 학습했습니까? 38쪽 52쪽, 61쪽, 62쪽 58쪽, 74쪽 73쪽 주 학습 내용 참고 임의의 숫자를 구하기 위한 get_random() 44쪽 논리연산자(&&) 66쪽 객체 지향 개념 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수, 변수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 학생들이 논리연산자(&&)와 비교연산자(!=)의 동시 사용을 어려워할 수 있으므로, 주의해서 지도한다. 긍정, 부정, 부정의 부정, 그리고, 또는 등의 개념과 여기에 해당하는 논리연산자를 한 번에 이해시키는 것도 좋다. 랜덤(난수)을 쉽게 이해할 수 있도록 적절한 예를 들어 설명하는 것이 좋다. 핵심사고 추상화 평가기준 논리연산자(&&) 의 개념을 설명할 수 있습니까? 추상화 객체 지향 의 개념을 설명할 수 있습니까? 알고리즘과 절차 자동화 난수 발생에 따른 로봇의 이동 방법을 순서적 단계로 표현할 수 있습니까? 186

2. 수업 전개 상황을 통한 동기유발 초등학교, 중학교 운동회에는 100m 달리기 종목이 있는데, 가끔은 학교에서 체력 측정을 목적으로 하는 경우도 있다. 100m 달리기는 운동회는 물론 올림픽, 아시안게임에서도 가장 인기 있는 운동 종목 중의 하나이고, 여러 명의 선수가 경쟁적으로 달려 순위를 정하는 종목이다. 지금부터 학생들이 직접 경험한 100m 달리기를 떠올리면서 100m 달리기 활동에 관심을 가질 수 있도록 한다. [운동회 100m 달리기 사진] 학습할 문제 확인하기 문제 제시 플레이봇 중학교에 가을 운동회가 열렸어요. 이번에는 100m 달리기 종목이 시작됩니다. 3대의 로봇이 경쟁적으로 달려서 순위를 정하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 로봇 3대가 1번, 3번, 5번 레인의 시작 지점에 위치하고 있다. 모든 레인의 끝에는 골인 지점을 알리는 깃발이 세워져 있다. 골인 지점에 도착하는 로봇이 나올 때까지 로봇들이 경쟁적으로 앞으로 전진한다. get_random() 명령어를 이용해서 임의의 숫자를 하나 발생시키고, 그 숫자에 해당하는 로봇을 앞으로 이동시켜야 한다. 로봇이 결승점에 도착하면 도착한 로봇의 번호를 출력한다. 로봇 중에서 한 대라도 결승점에 도착하면 프로그램을 종료한다. 187

[활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 달리기 프로그램이 종료되려면 로봇 중의 하나가 결승점에 도착해야 합니다. 로봇이 결승점에 도착했는지를 판단하는 방법에는 어떤 것들이 있을까요? 로봇이 위치한 칸에 결승점 깃발이 있는지 확인하는 방법 로봇이 결승점 좌표에 도착했는지 확인하는 방법 로봇의 앞에 벽이 있는지 확인하는 방법 로봇이 이동한 칸의 개수를 세는 방법 이 문제를 해결하기 위해 생각해봐야 할 것들에는 어떤 것들이 있을까요? 로봇의 개수만큼의 숫자 범위를 선정해서 난수를 발생시켜야 함 발생된 난수가 어떤 로봇의 번호인지 판단하기 위해 다중 조건문을 사용해야 함 로봇이 결승점 좌표에 도착했는지 확인하는 방법으로 우승자를 결정한다고 할 때, 로봇이 결승점에 도착하지 않은 동안 프로그램이 반복 실행되어야 합니다. 3대의 로봇 모두가 결승점 좌표에 도착하지 않았다는 것을 어떻게 표현해야 할까요? (단, 결승점의 좌표는 10이고, 로봇1의 좌표는 x1, 로봇2의 좌표는 x2, 로봇3의 좌표는 x3) x1!=10 && x2!=10 && x2!=10 임의의 숫자 하나를 구하기 위해서 사용하는 명령어는 무엇일까요? get_random() 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대로 적고, 순서도 를 그려봅시다. 1 1~3까지의 숫자 중에서 아무 숫자나 하나 구한다. 2 구한 숫자에 해당하는 로봇을 앞으로 한 칸 이동시킨다. 3 어떤 한 대의 로봇이 골인 지점에 도착할 때까지 1~2를 반복한다. 4 골인 지점에 도착하면 우승한 로봇의 이름을 출력하고 프로그램을 종료한다. 188

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어(요소) 사용 목적 참고 로봇이 이동하는데 사용 34쪽 변수와 연산자 주차 가능 공간의 개수를 계산하는데 사용 61쪽, 62쪽 while() 로봇이 결승점에 도착할 때까지 반복하는데 사용 73쪽 get_random() 움직일 로봇의 번호를 무작위로 구하는데 사용 44쪽 switch() 어떤 로봇이 선택됐는지 판단할 때 사용 74쪽 get_x() 로봇의 좌표를 알아내는데 사용 52쪽 if(), document.write() 우승한 로봇을 판단해서 이름을 출력하는데 사용 38쪽, 58쪽 [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 로봇들의 반복되는 행동 찾기, 프로그램이 종료되는 조건 찾기 먼저 로봇들이 반복하게 되는 행동을 찾아봅시다. <Q> 로봇이 결승점에 도착할 때까지 위의 그림과 같이 움직인다고 할 때, 반복되는 것은 무엇인가요? <A> 선택된 번호의 로봇이 앞으로 한 칸 이동하는 행동이 반복됩니다. <Q> 로봇이 앞으로 한 칸씩 이동하는 행동은 언제까지 반복되는 것일까요? <A> 로봇들 중에서 어떤 한 대가 결승점에 도착할 때까지입니다. 즉, 모든 로봇이 결승점에 도착하지 않은 동안 반복됩니다. 189

[작은 활동 2] 논리연산자를 이용해서 여러 가지 조건을 동시에 만족하는 상황 만들기 <Q> 모든 로봇이 결승점에 도착하지 않았다. 를 로봇1, 로봇2, 로봇3 과 그리고 를 이용해서 표현하면 어떻게 표현할 수 있을까요? <A> (로봇1이 결승점에 도착하지 않음) 그리고 (로봇2가 결승점에 도착하지 않음) 그리고 (로봇3이 결승점 에 도착하지 않음) <Q> 로봇1의 x좌표가 x1, 로봇2의 x좌표가 x2, 로봇3의 x좌표가 x3이라고 할 때, 모든 로봇이 결승점에 도착하지 않음 을 프로그램 코드로 표현하면 어떻게 표현할 수 있을까요? (결승점 좌표는 10) <A> x1!=10 && x2!=10 && x3!=10 <Q> 모든 로봇이 결승점에 도착하지 않은 동안 반복해라 를 프로그램 코드로 표현하면 어떻게 표현할 수 있을까요? <A> 1 x1=1 2 x2=1 3 x3=1 4 5 while(x1!=10 && x2!=10 && x3!=10) { 6 [선택된 로봇이 앞으로 한 칸 이동하는 행동] 7 x1=r1.get_x() 8 x2=r2.get_x() 9 x3=r3.get_x() 10 <Q> 위의 프로그램 코드에서 처음 부분은 무슨 뜻일까요? 1 2 3 x1=1 x2=1 x3=1 <A> 로봇1, 2, 3의 x좌표가 1이라는 뜻입니다. 모든 로봇이 x좌표 1에서 출발하기 때문이지요. [작은 활동 3] 선택된 로봇이 앞으로 한 칸 이동하는 행동 찾기 서로 다른 로봇이 경쟁적으로 달려서 우승자를 가려야 하기 때문에, 어떤 로봇이 이동할 것인지 선택하는 것은 사람의 의도가 들어가면 안됩니다. 그렇게 되면 승부 조작이 되는 것이지요. 따라서 어떤 로봇이 이동할지는 컴퓨터가 골라주는 무작위의 숫자를 이용해야 합니다. <Q> 컴퓨터가 무작위로 숫자를 고를 때, 고르는 숫자의 범위에 영향을 주는 것은 무엇일까요? <A> 경쟁적으로 달리는 로봇의 개수입니다. 3대의 로봇이 달린다면 1~3, 5대의 로봇이 달린다면 컴퓨터가 1~5의 숫자 중에서 하나를 골라줘야 합니다. 190

<Q> 컴퓨터가 골라준 숫자에 해당하는 로봇을 움직이도록 할 때는 어떻게 해야 할까요? <A> 이 문제에서는 3대의 로봇이 달리기를 하기 때문에 컴퓨터는 1~3의 숫자 중에서 하나를 골라줍니다. 여러 가지 중에서 어떤 하나를 선택해서 처리해야 하기 때문에 if와 if~else로는 처리를 할 수 없습니다. if~else if 또는 switch를 이용해야 하지요. 1 2 3 4 5 6 7 if (로봇1이 선택됐을 때) { 로봇1을 앞으로 한 칸 이동 else if (로봇2가 선택됐을 때) { 로봇2를 앞으로 한 칸 이동 else if (로봇3이 선택됐을 때) { 로봇3을 앞으로 한 칸 이동 <if~else if를 이용하는 경우> 1 2 3 4 5 6 7 8 9 10 11 switch (골라준 번호) { case (로봇1의 번호일 때) : 로봇1을 앞으로 한 칸 이동 break case (로봇2의 번호일 때) : 로봇2를 앞으로 한 칸 이동 break case (로봇3의 번호일 때) : 로봇3을 앞으로 한 칸 이동 break <switch를 이용하는 경우> <Q> 선택된 번호의 로봇이 앞으로 한 칸 이동하는 행동 을 프로그램 코드로 표현하면 어떻게 표현할 수 있을 까요? <A> 1 a=get_random(1,3) 2 if (a==1) { 3 r1. 4 else if (a==2) { 5 r2. 6 else if (a==3) { 7 r3. 8 <if~else if를 이용하는 경우> 1 2 3 4 5 6 7 8 9 10 11 12 a=get_random(1,3) switch(a) { case(1) : r1. break case(2) : r2. break case(3) : r3. break <switch를 이용하는 경우> [작은 활동 4] 우승한 로봇 이름 출력하기 로봇들이 열심히 달려서 드디어 결승점에 도착을 했어요. <Q> 우승한 로봇의 이름을 출력해야 하는데, 어떻게 알아낼 수 있을까요? <A> 결승점에 먼저 도착한 로봇이 우승자이기 때문에, 로봇의 x좌표가 결승점의 좌표와 같은 로봇의 이름을 출력하면 됩니다. 191

<Q> 우승한 로봇의 이름을 출력 하는 프로그램 코드는 어떻게 표현할 수 있을까요? <A> 1 2 3 4 5 6 7 8 if(x1==10) { str = 1등 로봇은 R1 입니다 else if(x2==10) { str = 1등 로봇은 R2 입니다 else if(x3==10) { str = 1등 로봇은 R3 입니다 document.write(str) 활동 tip 조건문에서 같다 를 표현할 때는 ==를 사용하고, 변수에 값을 넣어라 를 표현할 때는 =를 사용합니다. 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. [활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3, 4]를 참고해서 로봇이 결승점 좌표에 도착했는지 확인하는 방법으로 우승자를 찾아 출력하는 프로그램을 만들어봅 시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 x1=1 x2=1 x3=1 while(x1!=10 && x2!=10 && x3!=10) { a=get_random(1,3) switch(a) { case(1) : r1. break case(2) : r2. break case(3) : r3. break x1=r1.get_x() x2=r2.get_x() x3=r3.get_x() 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 if(x1==10) { str = 1등 로봇은 R1 입니다 else if(x2==10) { str = 1등 로봇은 R2 입니다 else if(x3==10) { str = 1등 로봇은 R3 입니다 document.write(str) 192

생각 뛰어넘기 위의 프로그램 코드에서는 로봇이 결승점에 도착했는지를 판단하기 위해 결승점 좌표에 도착했는지 확인하는 방법 을 사용했습니다. 결승점 좌표를 확인하는 방법 이외에도 여러 가지 방법이 있습니다. 아래의 방법들을 적용해서 우승한 로봇을 판단하는 프로그램 코드를 만들어 봅시다. 로봇이 위치한 칸에 결승점 깃발이 있는지 확인하는 방법 로봇의 앞에 벽이 있는지 확인하는 방법 로봇이 이동한 칸의 개수를 세는 방법 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 논리연산자가 무엇인지 설명해볼까요? <A> 논리연산자는 조건이 2개 이상일 때, 모두 참이어야 하는지 아니면 하나만 참이어도 되는지를 결정할 때 사용하는 연산자입니다. 예를 들어, 우리나라에서 의무적으로 군대에 가야하는 사람과 대중교통 요금을 할인받는 사람의 조건이 다음과 같을 때, <의무적으로 군대에 가야하는 사람> <대중교통 요금을 할인받는 사람> 성별 남자 나이 18세 이하 나이 20세 이상 나이 60세 이상 군대에 가야하는 사람은 성별과 나이가 모두 참이어야 하기 때문에 그리고(&&) 논리연산자를 사용하고, 요금을 할인받는 사람은 둘 중에 하나만 참이어도 되기 때문에 또는( ) 을 사용합니다. <Q> 다중 조건문에 대해 설명해볼까요? <A> 다중 조건문은 여러 가지 중에 어떤 하나를 골랐을 때 어떻게 처리해야 하는지를 결정해주는 것을 의미합 니다. 예를 들어, 여행을 갈 때 비행기, 기차, 배, 버스, 승용차, 오토바이, 자전거 중에 어떤 것을 선택하면 그선택에 따라 어떻게 처리하라고 결정해주는 것입니다. 다중 조건문은 일상 생활에서 매우 자주 사용되는 개념입니다. <Q> 난수는 무엇이고, 어떻게 쓰이는 것일까요? <A> 난수는 컴퓨터에 의해 임의로 정해지는 숫자를 말합니다. 이것은 제비뽑기와 같아서, 사용자가 조작을 가 하지 않고 컴퓨터에 의해 알 수 없는 숫자가 하나 골라지는 것이지요. 게임의 종족 선택, 복권 번호 추첨 등 많은 곳에서 사용되고 있습니다. 193

17. 물건 배송하기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) 배열의 개념을 이해하고 사용할 수 있다. 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있다. 문제 상황을 분석한 후 함수와 반복문을 사용하여 플레이봇의 움직임을 제어할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한 를 학습했습니까? 34쪽 플레이봇을 회전하기 위한 turn_left()를 학습했습니까? 36쪽 for 문을 사용한 반복문을 학습했습니까? 69쪽 주 학습 내용 참고 배열 75쪽 배열의 push 메소드 75쪽 지도 상 유의점 배열에 대해 설명한 후 해볼 수 있는 활동이다. 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 배열, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 핵심사고 추상화 배열의 개념을 이해하고 사용할 수 있습니까? 평가기준 추상화 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있습니까? 알고리즘과 절차 자동화 함수와 반복문 사용하여 플레이봇의 움직임을 제어할 수 있습니까? 194

2. 수업 전개 상황을 통한 동기유발 미국 e 쇼핑몰 아마존의 무인 항공기 배송 시스템인 드론 배송 영상을 보고 학생들이 물건 배송하기 활동에 관심을 가질 수 있도록 한다. 아마존 드론 배송에 대한 유튜브 영상 함께 보기 (https://www.youtube.com/watch?v=gdxv7dsv3fy) 미국 e 쇼핑몰 아마존이 무인 항공기 배송시스템 이란 이름으로 드론을 활용한 배송 기술과 관련한 특허를 취득 하여 드론 배송을 현실화할 계획과 관련된 기사를 소개하여 학생들이 물건 배송하기 활동에 관심을 가질 수 있 도록 한다. 아마존, 드론 배송 특허 취득 기사 (http://www.bloter.net/archives/227656) 디지털라이프 아마존, 드론 배송 특허 취득 By 오원석 On 2015.05.11. 미국 e쇼핑몰 아마존이 드론 배송 을 현실화할 계획 이다. 아마존이 지난 2013년 프라임 에어 라는 이름 으로 공개한 드론 배송 방법에 구체적인 기술을 더하 고 있다. 아마존이 드론을 활용한 프라임 에어 배송 기술과 관련한 특허를 취득했다고 <와이어드> 영국 판이 현지시각으로 5월8일 전했다. 특허 이름은 무 인 항공기 배송 시스템 이다. 자료 아마존 드론 배송 시스템 아마존 프라임 에어 유튜브 영상과 기사 195

학습할 문제 확인하기 문제 제시 플레이봇 마트는 고객이 주문한 물건을 집까지 배달해주는 서비스를 제공하고 있습니다. 고객이 주문한 수건, 참외, 토마토, 포도 가 하늘색 쇼핑 카트에 들어있는데, 이것을 분홍색 고객의 집까지 무사히 배달하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇의 앞쪽에는 고객이 주문한 상품이 담긴 하늘색 쇼핑 카트가 놓여 있고, 월드 오른쪽 상단에는 고객의 집이 분홍색으로 표시되어 있다. 하늘색 쇼핑 카드에서 4가지 물건을 집어 들고, 분홍색 고객의 집에 가서 물건을 동일한 순서로 내려놓는다. 고객의 집에서 물건을 내려놓을 때 사용하는 put_object(이름) 명령어는 물건의 이름을 필요로 하므로, 쇼핑 카트에서 물건을 들어 올릴 때 물건의 이름을 확인한 후 배열 저장한다. 배열에 저장된 물건의 이름을 이용하여 고객의 집에 물건을 내려놓는다. 196

[활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 물건 이동 물건을 주워서 다른 장소에 내려놓기 (마트 고객) [주의] 물건을 내려놓을 때 물건의 이름 필요(put_object(이름)) 물건 줍기 동작을 할 때 물건의 이름 확인 물건의 이름 배열에 저장 물건이 여러 개 있을 경우 변수를 여러 개 사용하기보다 배열을 사용 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 물건을 저장하기 위한 배열을 만든다. 2 한 칸 앞으로 이동한다. 3 물건의 이름을 확인하여 배열에 물건의 이름을 추가한다. 4 물건을 가방에 담는다. 5 2~4를 모든 물건을 주울 때까지 반복 반복한다.(4회) 6 물건을 내려놓을 고객의 집이 있는 월드 위쪽으로 이동한다. 7 물건을 가방에 담은 순서대로 내려놓는다. 이때 내려놓을 물건 의 이름을 배열에서 확인한다. 197

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 list=new Array() 배열 선언을 선언하는데 사용 75쪽 what_object() 물건의 이름 알아내는데 사용 45쪽 list.push() 배열에 데이터 추가하는데 사용 75쪽 pick_object 물건을 줍는데 사용 45쪽 put_object(이름) 물건을 내려놓는데 사용 45쪽 활동 tip [활동 3]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 배열 101호, 102호.. 번호만 다른 똑같은 공간에 살아요.. 아파트는 똑같은 크기와 모양으로 된 여러 개의 칸으로 나누어져 있고, 각각의 칸에는 사람이 들어가 살아요. 그리고 칸마다 서로 다른 번호가 붙어 있어요. 이것과 같은 원리로 데이터를 저장하는 공간을 배열이라고 합니다. 배열은 하나의 공간을 여러 개의 칸으로 나누고, 칸마다 데이터를 저장합니다. 이렇게 하면 많은 양의 데이터를 다룰 때 매우 효율적이랍니다. [배열을 사용하는 예] 1 텔레콤 회원들의 핸드폰 통화 시간을 저장할 때 a[2]=20 2 중학교 학생들의 성적을 저장 할 때 한라[302]= 홍길동 한라아파트 배열a 302호 2번 칸 홍길동 20 주의 배열의 데이터를 이용할 때는 대괄호(a[2]) 안에 숫자를 넣는다. 이 숫자를 인덱스라 하고 배열의 인덱스는 0부터 시작한다. 198

연습 문제 [프로그램 코드] [실행 결과] a=new Array(); a[0]= 유재석 ; a[1]= 강호동 ; a[2]= 신동엽 ; a[3]= 김연아 ; a[4]= 손연재 ; b=a.length; document.write( 칸의 개수는 + b); for (i=0 ; i<=b-1 ; i++) { document.write(a[i]); // 배열 a 만들기 // 배열에 데이터 넣기 // 배열의 크기 알아내기 // 배열 크기만큼 처리 배열에 데이터 추가 배열의 끝에 데이터를 추가하기 위해 push 메소드를 이용할 수 있다. 위 연습 문제의 배열 a에 5개의 데이터( 유재석, 강호동, 신동엽, 김연아, 손연재 )가 저장되어 있다. 다음은 배열 a에 이영하 를 추가하는 코드와 실행결과이다. [프로그램 코드] [실행 결과] a.push( 이영하 ) document.write(a) [작은 활동 2] 물건 이동하기 플레이봇이 앞에 놓인 물건을 주워서 다른 위치로 옮기는 방법을 생각해 봅시다. [실행 전] [실행 후] 1 2 3 4 5 6 7 pick_object( 수박 ) for (i=1 ; i<=3 ; i++) { put_object( 수박 ) <Q> 플레이봇이 물건(수박)을 줍는 동작을 수행할 때 사용하는 함수는 무엇인가요? <A> pick_object() <Q> 플레이봇이 물건(수박)을 내려놓는 동작을 수행할 때 사용하는 함수는 무엇인가요? <A> put_object( 수박 ) 199

주의 물건을 내려놓는 동작을 할 때는 물건의 이름이 필요. put_object(이름) 물건의 종류와 상관없이 프로그램을 작성하려면 어떤 방법이 적절한지 생각해봅시다. <Q> 물건의 종류와 상관없이 프로그램을 작성하려면 어떤 방법이 적절할까요? <A> 물건의 이름을 확인하여 임의의 변수에 저장한 후 물건을 내려놓을 때 변수를 사용합니다. <Q> 플레이봇이 현재 칸에 있는 물건의 이름을 알아낼 때 사용하는 함수는 무엇인가요? <A> what_object() 물건의 개수와 상관없이 프로그램을 작성하려면 어떤 방법이 적절한지 생각해 봅시다. <Q> 물건의 개수만큼 변수를 선언해야 할까요? <A> 배열을 이용한다. 물건의 이름을 확인하여 배열에 물건의 이름을 추가한다. <Q> cart라는 이름의 배열을 만들기 위해서는 어떤 명령어를 사용하나요? <A> cart=new Array() <Q> 배열 cart에 데이터를 추가할 때는 어떻게 하나요? <A> cart.push(데이터) [작은 활동 3] 물건 이름을 배열에 저장하기 플레이봇 앞에 놓인 물건의 이름을 확인하여 배열에 저장한 후 출력해봅시다. 주의 document.write()는 괄호 안의 데이터를 화면에 출력 물건이 1개 있을 경우 1 2 3 4 5 list=new Array() item=what_object() list.push(item) document.write(list) [실행 전] [실행 후] <Q> 플레이봇이 현재 칸에 있는 물건의 이름을 알아낼 때 사용하는 함수는 무엇인가요? <A> what_object() 200

<Q> 배열 list를 만들기 위해서는 어떻게 하나요? <A> list=new Array() <Q> 배열 list에 데이터 추가는 어떻게 하나요? <A> list.push(데이터) 물건이 2개 있을 경우 [실행 전] [실행 후] 1 2 3 4 5 6 7 8 9 10 11 list=new Array() item=what_object() list.push(item) item=what_object() list.push(item) document.write(list) 물건이 여러 개 있을 때 물건 이름을 배열에 저장하는 과정을 효율적으로 처리하는 방법에 대해 생각해봅시다. <Q> 여러 개의 물건 이름을 배열에 저장하는 방법은 무엇인가요? <A> 물건의 개수만큼 명령을 반복 실행하도록 for문을 이용합니다. 1 2 3 4 5 6 7 8 9 list=new Array() for (i=1 ; i<=2 ; i++) { item=what_object() list.push(item) document.write(list) 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행한다. 201

[활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 쇼핑 카트에 들어있는 물건을 고객의 집까지 배송하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 새로운 명령어를 만드는 공간 function turn_right(){ turn_left() turn_left() turn_left() // 명령어를 실행하는 공간 list=new Array() for (i=1 ; i<=4 ; i++){ item=what_object() list.push(item) pick_object() 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 turn_left() repeat(,4) turn_right() for (i=0 ; i<=3 ; i++) { put_object(list[i]) 생각 뛰어넘기 물건 배송하기 문제를 배송할 물건의 개수만큼 미리 배열의 크기를 선언해 놓은 후 해결해 보세요. 202

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 플레이봇이 물건을 내려놓는 동작을 수행할 때는 물건의 이름이 필요합니다. 플레이봇 앞에 물건이 하나 있을 때 물건을 이동시키기 위해 어떤 방법을 사용했나요? <A> 물건의 이름을 확인하여 변수에 저장한 후 물건을 내려놓을 때 변수에 저장된 물건의 이름을 사용 <Q> 물건이 여러 개 있을 때 물건의 이름을 저장하기 위해 어떤 방법을 사용했나요? <A> 배열 <Q> 배열의 번호는 몇 번부터 시작하나요? <A> 0번 203

18. 책상 주인 찾기 난이도 1. 수업안내 학습목표 2차원 배열을 이해할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한, turn_left()를 학습했습니까? 플레이봇에게 같은 명령을 여러 번 주기 위한 repeat()를 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? x 좌표를 가져오는 get_x() 명령어를 학습했습니까? 34쪽, 36쪽 41쪽 56쪽 52쪽 주 학습 내용 참고 get_y() 52쪽 2차원 배열 75쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수에 대한 복습 및 학습이 이루어지도록 한다. 배열에 초기 값을 지정할 때 책상의 개수에 따라 필요한 배열의 저장 공간을 계산할 수 있도록 유도한다. 2차원 배열의 개념 이해를 돕기 위하여 1차원 배열의 개념을 도입한다. - 각 분단의 장이 맨 앞자리에 위치, 분단의 장은 1차원 배열에 저장 가능 - 두 번째 줄 위치한 학생의 이름을 저장하려면? 2차원 배열 사용 월드 내 (2,2)위치의 책상 주인 이름이 2차원 배열의 [0][0]에 저장되어 있음을 이해하고, 자리에 해당하는 이름을 출력할 때 필요한 수식을 스스로 이끌어낼 수 있도록 유도한다. - [2][2]에 해당하는 값을 먼저 출력하게 한 후, 원하는 값을 찾아내도록 유도 - 초록 돼지 선생님 바로 앞 좌표와 배열의 관계를 단서로 제공 핵심사고 추상화 2차원 배열의 개념을 이해할 수 있습니까? 평가기준 204

2. 수업 전개 상황을 통한 동기유발 책상 실명제 관련 영상을 보며 책상에 이름을 붙여 관리하는 것에 관심을 가질 수 있도록 한다. - 내 책상, 니 책상, 우리 책상 영상(EBS뉴스, http://home.ebs.co.kr/ebsnews/allview/10299849/n) 책상마다 사용자 이름을 붙여 관리하면 좋은 점에 대해 이야기해 본다. 문제 제시 학습할 문제 확인하기 초록돼지 선생님 교실에 플레이봇이 찾아왔어요! 교실에 꽃이 놓인 자리가 있네요? 자리의 주인을 찾아 말을 거는 프로그램을 만들어 주세요. <말 거는 방법> 1. 자리에 해당하는 이름을 찾아 출력해봅시다. 2. 변수와 메시지 출력 명령어를 이용하여 하고 싶은 말을 입력하면 끝! <자리 주인 찾는 법> 1. 플레이봇의 위치를 알아야 해요! 2. 꽃이 놓인 자리로 이동해 좌석 배치표에서 이름을 찾을 수 있어야 해요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 205

[활동 1] 문제 상황 확인하기 초기상태 목표상태 꽃이 놓인 자리를 찾아간다. 자리에 해당하는 이름을 찾는다. 하고 싶은 말을 출력한다. [활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 해야 할 일에는 어떤 것들이 있는지 적어볼까요? 책상 주인의 이름을 저장해야 합니다. 꽃의 위치까지 이동해야 합니다. 꽃의 위치에 해당하는 책상 주인의 이름을 출력해야 합니다. 206

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 2차원 배열에 책상 주인 이름을 저장한다. 2 꽃이 있는 위치로 이동한 후, x, y좌표 값을 구한다. 3 배열에서 x, y번 칸에 들어있는 책상 주인 이름을 알아낸다. 4 알아낸 책상 주인의 이름을 출력한다. 5 프로그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. [활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 turn_left() 로봇이 왼쪽으로 회전하는데 사용 36쪽 변수 이름 정보 저장 61쪽 get_x() x좌표 정보를 읽어오기 위해 사용 52쪽 get_y() y좌표 정보를 읽어오기 위해 사용 52쪽 document.write() 말을 거는 메시지 출력 38쪽 활동 tip 규칙적으로 반복되는 플레이봇의 움직임을 사용자 정의 함수로 지정할 수 있도록 한다. 207

[작은 활동 1] 자료 저장 구조 생각하기 책상에 이름 정보를 저장하려면 어떻게 해야 할지 이야기해본다. - 다양한 저장 방법이 나올 수 있도록 유도한다. - 교실 배치를 그대로 반영하여 저장할 수는 없을지 생각해본다. - 2차원 배열의 개념을 간단히 설명하여 새로운 개념을 학습할 수 있도록 돕는다. <Q> 책상이 여러개 있을 때 구분할 수 있는 기준은 무엇이 있을까요? <A> 가로줄, 세로줄 등이 있습니다. <Q> 기준에 따라 책상을 구분한다면 어떻게 구분할 수 있을까요? <A> 가로줄이라면 칠판을 기준으로 첫 번째줄, 두 번째줄, 이런 식으로 구분 가능할 것 같습니다. 세로줄이라면 창문 쪽 책상을 기준으로 1분단, 2분단, 이런 식으로 구분 가능할 것 같습니다. 기준을 두어 자료를 저장할 수 있는 저장 방법으로 배열 이라는 것이 있습니다. 그 중에서 2차원 배열이라는 것은 가로줄과 세로줄의 기준을 모두 살려 책상 정보를 저장할 수 있습니다. 예) 아파트 동,호수 [작은 활동 2] 2차원 배열 학습 책상마다 이름 정보를 저장해본다. 2차원 배열을 이용할 경우, var 배열이름 = new Array() 로 배열을 선언할 수 있습니다. 배열에 값을 넣을 때는 배열이름[0] = new Array( 값1, 값2 ) 와 같이 저장합니다. 활동 tip 문자정보를 담는 변수를 여러 개 두어 값을 일일이 저장할 수도 있다. 학생들에게 효율적인 문제 해결 절차를 작성할 수 있도록 억지로 자신의 프로그램을 바꾸려고 하기보다 자신의 방법과 2차원 배열을 사용했을 때의 장단점을 비교해보게 하는 것도 좋다. 208

2차원 배열을 이용할 경우, 책상 배치에 맞게 이름 정보를 저장해보자. - 월드 내 책상의 위치와 배열의 저장 위치를 짝지어 생각해보게 한다. (학습지 제공) 지도 tip 학생들 스스로 원하는 칸을 채울 수 있도록 유도한다. (아래 표는 자리 그대로 저장한 것) 책상 위치 이름 정보 저장 위치 x좌표 y좌표 세로 줄 기준 가로 줄 기준 2 2 0 0 2 3 0 1 3 3 1 1 3 4 1 2 6 4 4 2 자신만의 규칙을 적용하여 수식을 찾을 수 있도록 유도한다. 예를 들어, 책상 위치 좌표가 (2,2) 이면 이름 정보 저장 위치는 [0][0]. 이런 식으로 저장 할 경우 규칙은 이름 정보 저장 위치는 세로 줄 기준 값 = 책상 위치 x좌표 값-2, 가로 줄 기준 값 = 책상 위치 y좌표 값-2 한 것이 된다. 209

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 플레이봇이 꽃이 놓인 자리의 책상 주인을 찾아 말을 거는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 var desk_map=new Array() desk_map[0]=new Array( 현아, 신우, 태우 ) desk_map[1]=new Array( 민아, 산들, 호영 ) desk_map[2]=new Array( 유라, 진영, 계상 ) desk_map[3]=new Array( 소진, 바로, 데니 ) desk_map[4]=new Array( 혜리, 공찬, 준형 ) turn_left() x=get_x() y=get_y() name=desk_map[x-2][y-2] document.write(name+ 야(아), 꽃이 예쁘구나! ) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 활동 tip 배열이나 변수의 이름은 자유롭게 지을 수 있도록 하되 변수의 역할이 드러나도록 지을 것을 안내 한다. 생각 뛰어넘기 책상 배열에 따라 자동으로 이름을 불러주는 출석 확인 프로그램을 만들어보자. 210

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 여러 가지 정보를 효율적으로 관리할 수 있는 방법은 무엇일까요? <A> 비슷한 정보들끼리 모아서 저장합니다. <Q> 교실의 책상 배열을 고려하여 책상 주인 이름을 저장할 때 사용할 수 있는 저장 구조는 무엇이 있나요? <A> 문자를 저장할 변수를 여러 개 사용할 수도 있고, 2차원 배열을 사용할 수도 있습니다. <Q> 2차원 배열의 장점은 무엇인가요? <A> 선언해야 하는 변수의 개수를 줄여줍니다. 또 정보를 저장할 때 위치에 따른 정보의 저장 위치를 직관적으 로 이해할 수 있습니다. 211

19. 방석 채우기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) 반복문(while)의 구조를 이해하고 논리연산자와 함께 사용할 수 있다. 다중 조건문을 이해하고 활용할 수 있다. 문제 상황을 분석한 후 함수와 조건문을 사용하여 플레이봇의 움직임을 제어할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 while, 논리연산자를 학습했습니까? get_x(), get_y()을 학습했습니까? front_is_clear()를 학습했습니까? count_object()를 학습했습니까? 66쪽, 73쪽 52쪽 48쪽 45쪽 주 학습 내용 참고 left_is_clear() pick_beeper() count_beeper() 논리연산자 반복문(while 문) 다중 조건문 48쪽 47쪽 47쪽 66쪽 73쪽 58쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 논리연산자(&&)와 비교연산자(!=)의 동시 사용을 어려워할 수 있으므로, 주의해서 지도한다. 핵심사고 추상화 평가기준 반복문(while)의 조건식에 논리연산자를 정확히 적용할 수 있습니까? 추상화 다중 조건문을 이해하고 활용할 수 있습니까? 알고리즘과 절차 자동화 함수와 조건문을 사용하여 플레이봇의 움직임을 제어할 수 있습니까? 212

2. 수업 전개 상황을 통한 동기유발 손님들이 앉는 자리마다 방석이 1개씩 놓여 있어야 하는데 방석이 이리저리 옮겨져 어떤 자리는 방석이 2개, 3개 놓여있고, 어떤 자리는 방석이 없는 경우도 있다. 좌식 식당의 방석 사진을 보고 학생들이 방석 채우기 활동에 관심을 가질 수 있도록 한다. 자료 방석이 1개씩 놓여 있지 않은 식당의 모습이 담긴 사진 자료 학습할 문제 확인하기 문제 제시 플레이봇 식당에서는 테이블의 좌석마다 방석을 한 개씩 미리 준비해 두는데, 손님들이 식사를 하고 지나간 자리는 방석이 뒤죽박죽 섞이고 정리되지 않은 상태가 됩니다. 이 상태로는 다음 손님들을 맞이할 수 없기 때문에 좌석마다 방석을 다시 정리해야 합니다. 플레이봇이 테이 블을 따라 한 바퀴 돌며 방석의 개수를 확인하고 방석을 1개씩 놓는 프로그램을 만들어 주세요. 단, 비퍼는 방석을 의미하며, 플레이봇은 가방에 충분한 개수의 비퍼를 가지고 있습니다. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 213

[활동 1] 문제 상황 확인하기 초기상태 목표상태 비퍼는 방석을 의미하고 는 두 개의 방석이 놓여있음을 뜻한다. 플레이봇은 가방에 충분한 개수의 비퍼(방석)를 가지고 있다. 테이블 주위를 따라 돌면서 비퍼(방석)가 1개씩 되도록 정리를 한다. 시작 위치(2,1)에 도착하면 프로그램을 종료한다. [활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 테이블 한 바퀴 돌기 플레이봇이 시작 위치(x좌표=2, y좌표=1)로 돌아올 때까지 테이블을 따라 한 바퀴 돌기 방석(비퍼) 개수 확인하여 1개만 놓기 방석(비퍼)의 개수를 확인 방석(비퍼)이 0개 이면 방석(비퍼)을 1개 내려놓고, 방석(비퍼)이 2개 이상이면 방석(비퍼)의 개수가 1개가 될 때까지 방석(비퍼)을 줍기 214

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 한 칸 이동한다. 2 왼쪽에 벽(테이블)이 있는지 확인한다. 3 벽이 없으면 왼쪽으로 회전하고 앞으로 한 칸 이동한다. 4 벽이 있으면 바닥에 비퍼(방석)의 개수를 알아낸다. 5 비퍼가 0개이면 비퍼를 1개 내려놓고 앞으로 한 칸 이동한다. 6 비퍼가 1개이면 그냥 앞으로 한 칸 이동한다. 7 비퍼가 2개 이상이면 1개만 남기고 모두 주운 후 앞으로 한 칸 이동한다. 8 플레이봇이 좌표 (2,1)에 도착할 때까지 2~7을 반복한다. 215

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 left_is_clear() 왼쪽에 장애물이 있는지 확인하는데 사용 48쪽 count_beeper() 현재 칸에 있는 비퍼 개수를 알아내는데 사용 47쪽 pick_beeper() 현재 칸에 있는 비퍼를 줍는데 사용 47쪽 put_beeper() 현재 칸에 비퍼를 내려놓는데 사용 47쪽 get_x() 플레이봇의 x좌표를 알아내는데 사용 52쪽 get_y() 플레이봇의 y좌표를 알아내는데 사용 52쪽 get_x()==2 && get_y()==1 x좌표가 2이고, y좌표가 1이면 64쪽, 66쪽 활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 테이블 한 바퀴 돌기 플레이봇이 시작 위치(2,1)로 되돌아올 때까지 테이블을 따라 이동하는 프로그램을 만드는 방법을 생각해 봅시다. [실행 전] [실행 후] 1 2 3 4 5 6 7 8 9 while (!(get_x()==2 && get_y()==1)) { if (left_is_clear()==true) { turn_left() else { <Q> 플레이봇의 x좌표와 y좌표를 구할 때 사용하는 명령어는 무엇인가요? <A> get_x(), get_y() <Q> x좌표가 2와 같은지 비교할 때 사용하는 비교연산자는 무엇인가요? <A> == <Q> x좌표가 2이고 y좌표가 1이면 참이 되도록 할 때 사용하는 논리연산자는 무엇인가요? <A> && 216

<Q> 좌표가 (2,1)인 조건을 만족할 때까지 명령을 반복 수행하도록 하려면 어떤 명령문을 사용해야 할까요? <A> 반복문(while 문) <Q> 플레이봇의 왼쪽에 있는 테이블을 따라 한 바퀴를 돌게 만들려면, 어떤 조건일 때 왼쪽으로 회전을 해야 할까요? <A> 왼쪽에 테이블이 없을 때 <Q> 테이블의 크기와 상관없이 프로그램을 작성하려면 어떤 방법이 적절한가요? <A> 왼쪽에 테이블이 없을 때 <Q> 플레이봇의 앞에 장애물이 있는지 없는지 확인할 때 사용하는 함수는 무엇인가요? <A> front_is_clear() <Q> 플레이봇의 왼쪽에 테이블이 있는지 없는지 확인할 때 사용하는 함수는 무엇일까요? <A> left_is_clear() [작은 활동 2] 비퍼의 개수 확인하여 한 개만 놓기 플레이봇이 비퍼의 개수를 확인해서 비퍼가 0개이면 비퍼를 1개 내려놓고, 비퍼가 1개이면 아무것도 하지 않고 이동하고, 비퍼가 2개 이상이면 비퍼의 수가 1이 될 때까지 비퍼를 줍는 프로그램을 만드는 방법을 생각해봅시다. [실행 전] [실행 후] 1 2 3 4 5 6 7 8 9 10 11 12 13 a=count_beeper() if (a==0) { put_beeper() else if (a==1) { else if (a>=2) { while (count_beeper()>=2) { pick_beeper() <Q> 현재 칸에 있는 물건의 개수를 알아내는 함수는 무엇인가요? <A> count_object() <Q> 현재 칸에 있는 비퍼의 개수를 알아내는 함수는 무엇일까요? <A> count_beeper() 217

<Q> 현재 칸에 비퍼를 내려놓는 함수는 무엇인가요? <A> put_beeper() <Q> 현재 칸에 있는 비퍼를 줍는 함수는 무엇일까요? <A> pick_beeper() <Q> 비퍼의 개수에 따라 서로 다른 명령을 수행하도록 하려면 어떤 명령문을 사용해야 할까요? <A> if문 <Q> 문제의 조건은 몇 가지인가요? <A> 비퍼가 0개 일 때, 비퍼가 1개 일 때, 비퍼가 2개 이상 일 때, 3가지 <Q> 조건이 여러 가지 일 경우, 조건에 따라 명령을 수행하도록 하려면 어떤 방법이 있을까요? <A> 다중 조건문 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행한다. 218

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 손님이 앉는 자리마다 방석을 1개씩 놓는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 while (!(get_x()==2 && get_y()==1)) { if (left_is_clear() == true) { turn_left() a=count_beeper() if (a==0) { put_beeper() else if (a==1) { else if (a>=2) { while (count_beeper()>1) { pick_beeper() 219

생각 뛰어넘기 줄다리기 플레이봇은 줄다리기 선수들에게 장갑을 나눠주는 역할을 맡았습니다. 앞서 줄다리기 대회를 치룬 선수들이 벗어둔 장갑이 이리저리 흩어져 있네요. 청팀 선수들은 파란색깔이 칠해진 위치에 있고, 홍팀 선수들은 분홍색이 칠해진 위치에 있습니다. 플레이봇이 각 선수들의 위치에 장갑을 두 개씩 나눠주는 프로그램을 만드세요. 초기화면 결과화면 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 조건문은 어떤 경우에 사용하나요? <A> 조건에 따라 다른 행동을 하기위해 사용합니다. <Q> 다중 조건문은 어떤 경우에 사용하나요? <A> 조건을 판단하고 다시 한 번 판단하는 경우에 사용합니다. <Q> 반복문(while 문)은 어떤 경우에 사용하나요? <A> 조건을 만족할 때까지 행동을 반복 수행하는 경우에 사용합니다. 220

20. 일곱 색깔 무지개 색칠하기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) 배열의 개념을 문제해결에 적용할 수 있다. 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있다. 연산자와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 나머지 연산자를 학습했습니까? 비교연산자를 학습했습니까? 조건문을 학습했습니까? 다중 반복문을 학습했습니까? 배열 선언과 사용에 대해 학습했습니까? 플레이봇이 위치한 칸을 색칠하기 위한 set_color()를 학습했습니까? 62쪽 64쪽 58쪽 70쪽 75쪽 52쪽 주 학습 내용 참고 배열 활용 75쪽 나머지연산자 활용 62쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 학생들이 각자 자신만의 방법으로 다양한 문제해결 방법을 찾도록 유도한다. 자신이 만든 프로그램을 발표하는 시간을 갖고 가장 좋은 문제해결 방법은 무엇인지 함께 생각해 본다. 핵심사고 평가기준 자료 분석 문제해결에 배열을 적용할 수 있습니까? 추상화 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있습니까? 알고리즘과 절차 자동화 연산자와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있습니까? 221

2. 수업 전개 상황을 통한 동기유발 철조망이 있는 벽을 밝고 아름답게 변화시키기 위해 벽화 그리기에 많은 사람들이 공동작업을 하고 있다. 벽화 그리 기는 어둡고 낡은 이미지를 밝고 따뜻한 이미지로 바꾸기 위해 많이 이루어지는 활동이다. 아름다운 벽화가 그려진 사진을 보고 학생들이 일곱 색깔 무지개 색칠하기 활동에 관심을 가질 수 있도록 한다. 그림 그리는 플레이봇 영상을 보고 학생들이 일곱 색깔 무지개 색칠하기 활동에 관심을 가질 수 있도록 한다. 그림 그리는 로봇에 관한 유튜브 영상 함께 보기-1 https://www.youtube.com/watch?v=0fb_ebynzge 그림 그리는 로봇에 관한 유튜브 영상 함께 보기-2 https://www.youtube.com/watch?v=7pqaak7xyxc 자료 아름다운 벽화가 그려진 사진, 그림 그리는 로봇에 관한 영상 학습할 문제 확인하기 문제 제시 플레이봇은 낡고 어두운 골목에 예쁜 벽화를 그리는 일을 담당합니다. 플레이봇이 벽에 아름다운 일곱 색깔 무지개를 칠하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 222

[활동 1] 문제 상황 확인하기 초기상태 목표상태 플레이봇이 (2,1) 좌표에서 출발한다. 목표상태와 같이 움직임 선을 따라 이동하며 무지개의 일곱 색깔을 칠한다. [활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 색칠하기 플레이봇이 일곱 가지 색을 칠한다. 회전하기 플레이봇이 왼쪽으로 회전한다. 플레이봇이 오른쪽으로 회전한다. 223

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 배열에 무지개의 일곱 색깔을 저장한다. (0~6번 인덱스에 저장) 2 일곱 색깔이 저장된 배열의 i(0~6)번째 색깔을 칠하고 한 칸 앞으로 이동한다. 3 i가 짝수이면 왼쪽으로 회전한다. I가 홀수이면 오른쪽으로 회전한다. 4 무지개의 일곱 색깔을 칠할 때까지 2~3의 과정을 반복한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 color=[ red, orange, yellow, green, blue, navy, purple ] 배열에 무지개의 일곱 색깔을 저장하는데 사용 75쪽 for (i=0 ; i<7 ; i++){ 색을 칠하는 과정을 7번 반복하는데 사용 69쪽 set_color(color[i]) 일곱 색깔이 저장된 배열에서 순서대로 색깔을 가져오는데 사용 52쪽 if (i%2==0) { 배열의 0, 2, 4, 6번째 색깔(빨, 노, 파, 보)을 칠한 후 왼쪽으로 회전 else { 배열의 1, 3, 5번째 색깔(주, 초, 남)을 칠한 후 오른쪽으로 회전 58쪽, 62쪽 224

활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. [활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 색칠하기 플레이봇이 이동하며 7칸에 빨강색을 칠하는 프로그램을 만드는 방법을 생각해봅시다. [실행 전] [실행 후] 1 2 3 4 for (i=1 ; i<=7 ; i++) { set_color( red ) <Q> 플레이봇이 위치한 칸을 색칠하기 위한 함수는 무엇인가요? <A> set_color(색상) <Q> 플레이봇이 위치한 칸에 색칠하는 동작을 7번 수행하도록 하려면 어떤 방법이 있을까요? <A> 반복문 플레이봇이 앞으로 이동하며 7칸에 일곱 색깔 을 칠하기 위한 좋은 방법을 생각해봅시다. 앞의 예제처럼 set_color( red )를 사용할 수 없습니다. 첫 번째 칸은 red, 두 번째 칸은 orange, 세 번째 칸은 green.. 무지개의 일곱 색깔이 순차적으로 set_color() 함수의 매개변수로 사용됩니다. [실행 전] [실행 후] 1 2 3 4 5 6 color=new Array( red, orange, yellow, green, blue, navy, purple ) for (i=0 ; i<7 ; i++) { set_color(color[i]) 225

주의 배열에 무지개의 일곱 색깔을 저장한 후 배열에 저장된 데이터(색깔)를 set_color의 매개변수로 사용하는 방법을 학생들이 스스로 생각해낼 수 있도록 유도한다. [작은 활동 2] 회전하기 플레이봇이 그림의 움직임선과 같이 이동하는 프로그램을 만드는 방법을 생각해봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function turn_right() { turn_left() turn_left() turn_left() for (i=0 ; i<7 ; i++) { if (i%2==0) { turn_left() turn_left() else { turn_right() turn_right() 플레이봇이 언제 왼쪽으로 회전하는지, 언제 오른쪽으로 회전하는지 생각해보고, 규칙을 찾아봅시다. <Q> 플레이봇이 언제 왼쪽으로 회전하나요? <A> 첫 번째, 세 번째, 다섯 번째에서 회전, 홀수 번째 반복에서 왼쪽으로 회전 <Q> 플레이봇이 언제 오른쪽으로 회전하나요? <A> 두 번째, 네 번째, 여섯 번째에서 회전, 짝수 번째 반복에서 오른쪽으로 회전 <Q> 짝수와 홀수를 구분하는 방법으로 가장 효율적은 방법은 무엇인가요? <A> 2로 나눈 나머지가 0인 경우 짝수, 1인 경우 홀수 주의 무지개의 일곱 색깔을 칠하기 위해 7번의 반복이 있고 홀수 번째 반복에서 플레이봇이 왼쪽으로 회전하고 짝수 번째 반복에서 플레이봇이 오른쪽으로 회전하므로 나머지 연산자를 이용하여 문제를 해결하는 방법을 학생들이 스스로 생각해 낼 수 있도록 유도한다. 활동 tip 학생들이 각자 자신만의 방법으로 다양한 문제해결 방법을 찾도록 유도한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행한다. 226

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2]을 참고해서 플레이봇이 무지개의 일곱 색깔을 칠하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 새로운 명령어를 만드는 공간 function turn_right(){ turn_left() turn_left() turn_left() // 명령어를 실행하는 공간 color=new Array( red, orange, yellow, green, blue, navy, purple ) for (i=0 ; i<7 ; i++) { for (j=0 ; j<7 ; j++) { set_color(color[i]) if (i%2==0) { turn_left() turn_left() else { 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 turn_right() turn_right() 활동 tip 제시된 코드는 예시이므로 학생들이 각자 다양한 접근 방법으로 문제를 해결하여 코드를 작성하도록 지도한다. 생각 뛰어넘기 플레이봇의 움직임은 일곱 색깔 무지개 색칠하기 와 같지만, 무지개 색깔이 수평 수직으로 나타나도록 색깔을 칠하는 프로그램을 만드세요. 초기상태 목표상태 227

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 배열의 인덱스는 몇 번부터 시작하나요? <A> 0번 <Q> number가 짝수인지 홀수인지 판단하고자 할 때 어떤 조건식을 사용할까요? <A> 짝수 : number % 2 == 0, 홀수 : number % 2 == 1 228

21. 도둑 잡기 난이도 1. 수업안내 학습목표 플레이봇이 향하고 있는 방향을 확인할 수 있는 명령어를 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한, turn_left()를 학습했습니까? 플레이봇에게 같은 명령을 여러 번 주기 위한 repeat()를 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? 조건을 비교하기 위한 if문을 학습했습니까? 명령어를 반복하기 위한 while문을 학습했습니까? 물건을 확인하는 what_object()와 물건의 개수를 세는 count_object() 명령어를 학습했습니까? 34쪽, 36쪽 41쪽 56쪽 58쪽 73쪽 45쪽 주 학습 내용 참고 direction_is_east() 명령어 사용 55쪽 direction_is_west() 명령어 사용 direction_is_north() 명령어 사용 direction_is_south() 명령어 사용 55쪽 55쪽 55쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 플레이봇의 방향 전환 및 동작의 규칙성을 이해하기 위하여 언플러그드 활동을 도입한다. 함수별 역할 이해를 돕기 위하여 선행조직자 제공 ( - 키보드의 방향키 또는 단축키 비유 설명 ) 핵심사고 자동화/시뮬레이션 평가기준 여러 발자국 모양을 처리할 수 있는 코드를 작성할 수 있는가? 229

2. 수업 전개 상황을 통한 동기유발 일상생활에서 센서를 이용한 기술 사진을 통해 보여주어 도둑 잡기 활동에 관심을 가질 수 있도록 한다. - 예) 현관 센서등, 로봇 청소기, 스마트폰 세 가지 제품의 공통점을 찾아보게 한다. - 무엇인가를 감지하는 센서(Sensor)가 들어가 있다는 것. - 물체의 움직임, 장애물, 기울기 미래에는 센서가 어떤 것을 감지할 수 있을지 이야기해본다. 학습할 문제 확인하기 문제 제시 월드에 도둑이 나타났어요! 도둑이 남긴 발자국이 유일한 단서입니다. 플레이봇이 발자국 개수만큼 발가락이 향하는 방향으로 이동하여 도둑을 잡는 프로그램을 만들어 주세요! 단, 도둑의 위치와 플레이봇의 위치가 같아지면 범인 검거 성공! 메시지를 팝업으로 띄워 주세요. 건투를 빕니다! 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 230

[활동 1] 문제 상황 확인하기 초기상태 목표상태 물건을 감지한다. 물건이 발자국 모양일 경우 어느 쪽을 향하는 발자국 인지 확인해야한다. 물건이 발자국 모양일 경우 발자국 모양의 개수를 확인해야한다. 물건이 도둑일 경우 도둑 검거 성공! 메시지를 출력한다. 물건이 발자국 모양일 경우, 발자국 모양에 따라 플레이봇이 회전해야 한다. 물건이 발자국 모양일 경우, 발자국 모양의 개수에 따라 플레이봇이 이동해야 한다. 도둑을 만날 때까지 플레이봇은 이동해야 한다. [활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 물건을 감지하는 기능 물건 개수만큼 이동하는 기능 플레이봇이 향하고 있는 방향을 고려하여 다음에 이동해야 할 방향으로 회전하는 기능 이 문제를 해결하기 위해 플레이봇이 향하고 있는 방향을 확인할 수 있는 명령어는 무엇이 있을까요? direction_is_east(), direction_is_west(), direction_is_north(), direction_is_south() 명령어가 있습니다. 231

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 앞으로 한 칸 이동한다. 2 바닥에 있는 물건의 이름과 개수를 확인한다. 3 물건이 발자국이면 발자국 방향으로 발자국 개수만큼 이동한다. 4 도둑을 만날 때까지 2~3을 반복한다. 5 도둑을 만나면 도둑 검거 성공 이라고 출력하고 프로 그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. [활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 활동 tip 다음은 예시이며 수업 진행 시 학생의 배경 지식에 따라 다르게 적용할 수 있도록 한다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 turn_left() 로봇이 왼쪽으로 회전하는데 사용 36쪽 사용자 정의 함수 오른쪽으로 회전, 180도 회전, 네 방향을 각각 탐지하여 회전할 수 있는 함수 56쪽 변수 물건 개수와 물건 내용을 저장 61쪽 what_object() 물건이 무엇인지 확인 45쪽 count_object() 물건의 개수를 세기 위해 사용 45쪽 direction_is_west() 로봇이 서쪽 방향인지 확인 55쪽 direction_is_east() 로봇이 동쪽 방향인지 확인 55쪽 direction_is_south() 로봇이 남쪽 방향인지 확인 55쪽 direction_is_north() 로봇이 북쪽 방향인지 확인 55쪽 repeat() 동일한 명령어를 반복 41쪽 show_message() 도둑 검거 성공 메시지 출력 40쪽 반복문, 조건문 명령어를 반복하거나 조건에 따른 처리를 하는데 사용 58쪽, 69쪽 232

활동 tip 규칙적으로 반복되는 플레이봇의 움직임을 사용자 정의 함수로 지정할 수 있도록 한다. [작은 활동 1] 언플러그드 활동 - 방향을 고려한 코딩의 필요성 학습 (런닝맨 좀비 게임 변형) 팀을 이뤄 게임을 진행하며 감지(Sensing)에 대한 이해를 돕는다. (활동지 제공) <게임 진행 규칙> 준비물 : 안대, 스티커 1. 6~8명이 한 팀을 이루며, 팀 전으로 진행된다. 2. 게임 공간은 일정하게 정해둔다. 예) 교실 안 또는 운동장에 선을 그어 공간 표시 3. 각 팀에서 술래 한 사람을 정하고, 공격과 수비 순서를 정한다. 4. 공격 팀의 술래는 안대로 눈을 가리고, 수비 팀의 팀원은 게임 공간에 자유롭게 자리를 잡는다. 5. 수비 팀이 모두 자리를 잡으면 공격 팀의 술래가 게임 공간에 들어가 수비 팀원들을 탐색한다. 6. 2분 동안 게임이 이루어지며, 공격 팀의 술래는 수비 팀원들에게 스티커를 붙여 공격할 수 있다. 7. 공격과 수비를 바꾸어 진행한 후, 더 스티커를 많이 붙인 팀이 승리! 8. 수비 팀은 처음 자리를 잡은 후에는 이동할 수 없으며, 공격 팀의 술래를 제외한 팀원은 술래에게 말로 힌트 를 줄 수 있다. <빨강팀 공격> <파랑팀 공격> - 안전에 유의하며 팀별 전략을 짠 후, 게임이 이루어질 수 있도록 한다. - 게임 진행 시, 같은 팀원이 힌트를 줄 경우 방향에 대한 의사소통이 잘 이루어졌는지 확인한다. - 플레이봇이 공격 팀의 술래가 될 경우 꼭 필요한 기능이 무엇인지를 생각하며 감지(Sensing)와 방향에 대한 이해를 유도한다. 233

[작은 활동 2] 플레이봇이 확인해야 할 방향 고려하기 북 플레이봇이 확인해야 할 방향을 생각해 볼 수 있도록 안내한다. 서 동 남 - 만약 플레이봇이 물건을 감지하는 활동을 한 방향으로만 진행 할 경우 어떤 문제점이 생기는 지 살펴본다. - 플레이봇이 물건을 감지하는 활동이 제대로 이루어지기 위해서는 모든 방향으로의 물건 감지가 이루어져 야한다는 것을 깨달을 수 있도록 유도한다. - 물건 확인은 동, 서, 남, 북 네 개 방향을 모두 확인해야 한다. [작은 활동 3] 물건 감지 및 이동의 자동화 문제 해결 절차가 월드 내 특정한 위치의 발자국만을 탐색하지는 않는지 확인할 수 있도록 안내한다. - 만약 플레이봇이 이미 지정된 월드의 발자국만을 따라가도록 문제 해결 절차를 설계한다면 어떤 문제점이 생기는 지 살펴본다. (월드 내 발자국 위치에 맞게 특정 방향만을 감지하지는 않는지 확인한다.) - 작성한 문제 해결 절차에 따라 플레이봇이 움직이면 다른 월드에서도 발자국을 감지하여 도둑을 잡을 수 있는지 살펴본다. - 임의의 월드에서 플레이봇이 감지를 제대로 진행하기 위해서는 네 방향(동, 서, 남, 북)에 대한 감지가 자동 화되어야 함을 깨달을 수 있도록 유도한다. - 물건 감지 및 이동은 네 개 방향으로 자동성을 가지고 진행되어야 한다. 문제 해결 절차가 월드 내 특정한 위치에 놓인 발자국만을 탐색하지 않도록 주의해야 한다. 234

[작은 활동 4] 방향을 고려한 절차 생각하기 동쪽 방향을 향하는 발자국을 만났을 때 어떤 절차를 걸쳐 프로그래밍 해야 하는지 절차적으로 생각할 수 있도록 유도한다. - 이 활동을 통해 코딩 된 내용이 사용자 지정 함수 east_check()이다. 동쪽 방향을 향하는 발자국을 만났을 때, 플레이봇이 현재 향하는 방향에 따라 다르게 동작한다. 그림자료 플레이봇이 현재 향하는 방향 플레이봇이 실행할 동작 동 앞으로 이동 서 뒤로 돌아 이동 남 왼쪽으로 회전하여 이동 북 오른쪽으로 회전하여 이동 - 다른 방향을 향하는 발자국을 만났을 때는 어떻게 프로그래밍 해야 하는지 생각해보게 한다. 활동 tip 표, 그림 등 학생이 스스로 이해하기 편한 방법을 통해 깨달을 수 있도록 한다. 도둑을 만날 때까지 반복되어야 하는 동작이 무엇인지 생각해보게 한다. - [활동2]에서 작성한 문제 해결 절차를 확인하며 코딩을 위한 자료를 수집할 수 있도록 안내한다. 235

[활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3, 4]를 참고해서 플레이봇이 발자국을 따라 도둑을 잡는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function turn_around() { turn_left() turn_left() function east_check() { if (d== 동쪽발자국 ) { if (direction_is_west()==true) { turn_around() if (direction_is_south()==true) { turn_left() if (direction_is_north()==true) { turn_right() function west_check() { if (d== 서쪽발자국 ) { if (direction_is_east()==true) { turn_around() if (direction_is_south()==true) { turn_right() if (direction_is_north()==true) { turn_left() 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 74 75 77 78 79 function south_check() { if (d== 남쪽발자국 ) { if (direction_is_east()==true) { turn_right() if (direction_is_west()==true) { turn_left() if (direction_is_north()==true) { turn_around() function north_check() { if (d== 북쪽발자국 ) { if (direction_is_east()==true) { turn_left() if (direction_is_west()==true) { turn_right() if (direction_is_south()==true) { turn_around() // 명령어를 실행하는 공간 d=what_object() c=count_object() while (d!= 도둑 ) { east_check() west_check() south_check() north_check() repeat(,c) d=what_object() c=count_object() if(d== 도둑 ) { show_message( 도둑 검거 성공! ) 활동 tip 학생들이 작성한 문제 해결 절차에 따라 다양한 코딩 방법이 나올 수 있으므로 충분한 시간을 제공하여 스스로 머릿속 디버깅 과정을 겪어볼 수 있도록 한다. 236

생각 뛰어넘기 실생활에서 방향을 고려하여 코딩이 이루어져야 하는 프로그램이 있는지 찾아보자. 방향을 고려하여 코딩이 이루어지면 실생활에 도움이 될 만한 소프트웨어를 기획해보자. - 예) 시각 장애인을 위한 길 안내 지팡이 활동 tip 학습한 내용을 실생활에 접목시킬 수 있는 가능성을 생각해봄으로써 다양한 분야에서 사용되고 있는 소프트웨어의 중요성을 인식할 수 있도록 유도한다. 함수 하나만을 사용하여 범인의 발자국을 찾는 프로그램을 만들어보자. 단, 네 방향을 고려하여 움직이게 하는 조건을 동일하다. 활동 tip 어려운 내용이니 협업을 통해 해결할 수 있도록 한다. 이 문제를 해결한다면 뒷부분에 나올 미로 찾기 주제를 보다 쉽게 해결할 수 있다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 방향을 고려하여 코딩을 할 때 주의해야 할 점은 무엇인가요? <A> 플레이봇이 현재 향하는 방향에 따라 이루어져야 하는 행동이 다르다는 것을 고려해야 합니다. <Q> 방향 별로 플레이봇이 움직이는 것을 자동화 할 수 있는 방법은 무엇인가요? <A> 사용자 정의 함수를 이용합니다. 모든 방향을 고려하여 움직일 수 있도록 사용자 정의 함수를 만들 수 있 습니다. <Q> 플레이봇이 사람처럼 여러 가지 상황을 고려하여 판단을 내릴 수 있다면 미래에는 어떤 기술이 생겨날 까요? <A> 사용자의 생활 패턴을 분석하여 자동으로 여행지 추천을 해주는 운영체제, 사람을 알아보고 자연스럽게 대화할 수 있는 안내용 로봇 등이 생길 수 있습니다. <Q> 사람과 유사하게 판단을 내릴 수 있는 기술을 인공지능이라고 합니다. 인공지능 기술이 건전하게 사용 되려면 어떤 생각을 가져야 할까요? <A> 현실과 사이버 공간이 잘 어우러질 수 있도록 해야하며, 어느 한 쪽으로 과도하게 치우쳐져서는 안 됩니 다. 활동 tip 인공지능 기술의 미래에 대한 질문을 통해 정보 과학 기술의 윤리적 사용에 대해 생각해 볼 수 있는 계기를 제공한다. 237

22. 이어달리기 난이도 1. 수업안내 학습목표 객체지향 프로그래밍의 개념을 이해할 수 있다. 2개의 매개 변수가 들어 있는 사용자 정의 함수를 만들 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 플레이봇을 이동하기 위한, turn_left()를 학습했습니까? 사용자 정의 함수를 만들기 위한 function을 학습했습니까? 명령어를 반복하기 위한 while문을 학습했습니까? 좌표를 가져오는 get_x(), get_y()를 학습했습니까? 데이터를 전달하기 위한 매개 변수를 학습했습니까? 문인지 확인하는 front_is_door()와 문을 여는 open_front_door() 명령 어를 학습했습니까? 34쪽, 36쪽 56쪽 73쪽 52쪽 61쪽 50쪽, 51쪽 주 학습 내용 참고 객체지향 2개의 매개변수 사용하기 61쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 연산자, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 하나의 함수로 두 가지 상황을 처리하기 위하여 switch 문을 사용할 수 있음을 알게 한다. break를 사용하는 이유를 깨우칠 수 있도록 break문이 있을 때와 없을 때를 비교해본다. - 먼저 머릿속으로 생각해보게 한 후 실행결과 비교 매개 변수 사용에 익숙해질 수 있도록 언플러그드 활동을 도입한다. - 학생이 직접 함수의 명령어를 실행 해보며 필요로 하는 정보가 무엇인지 파악하게 함. 핵심사고 알고리즘과 절차 자동화/시뮬레이션 평가기준 객체지향 프로그래밍을 이해하고 문제 해결 절차를 설계할 수 있는가? 2개의 매개 변수가 들어 있는 사용자 정의 함수를 작성할 수 있는가? 238

2. 수업 전개 상황을 통한 동기유발 계주하는 모습이 담긴 영상을 통해 흥미를 유발하여 이어달리기 활동에 관심을 가질 수 있도록 한다. - 2014 동계 올림픽 쇼트트랙 릴레이 영상 (https://youtu.be/ijf5uqnjqws) - 2011 대구세계육상 남자 릴레이 결승전 영상 (https://youtu.be/zrhkdxk7cue) 이어 달리기에서 중요한 것이 무엇인지 이야기해 보자. - 바톤 터치를 잘 할 수 있는 방법은? - 자동으로 상대방의 위치를 확인하여 이동하게 만들 수 있을까? 문제 제시 학습할 문제 확인하기 플레이봇 월드에 운동회가 열렸어요! 플레이봇 친구들이 이어달리기에 참가하여 골인 할 수 있도록 이어달리기 프로그램을 만들어주세요^^ 단, 목표 깃발 앞에는 문이 있으니 주의하시길! 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 - 코딩 239

[활동 1] 문제 상황 확인하기 초기상태 목표상태 세 대의 플레이봇이 월드의 모서리 부분에 위치해 있다. 주자 순서는 하늘색 플레이봇->분홍색 플레이봇->주황색 플레이봇 순이다. 목표 지점 앞에는 문이 있어 열고 들어가야 한다. 목표 지점에 주황색 플레이봇이 도착하면 도착 메시지 출력한다. [활동 2] 문제 해결 과정 생각하기 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇에 대해 알아야 하는 정보는 무엇인지 적어볼까요? 하늘색 플레이봇은 (1,1)에 위치하였고, 분홍색 플레이봇이 있는 곳까지 이동해야 합니다. 분홍색 플레이봇은 (10,1)에 위치하였고, 하늘색 플레이봇이 분홍색 플레이봇이 있는 곳까지 오면 주황색 플레이봇이 있는 곳까지 이동해야 합니다. 주황색 플레이봇은 (10,10)에 위치하였고, 분홍색 플레이봇이 주황색 플레이봇이 있는 곳까지 오면 목표 지점 깃발이 있는 곳까지 이동해야 합니다. 이 문제를 해결하기 위해 월드의 어떤 요소를 이용할 수 있을까요? 좌표 값을 이용할 수 있습니다. 240

[작은 활동 1] 플레이봇이 이동하는 규칙을 찾아보자. (월드판, 플레이봇 3개 그림 제공 필요) - 2인 1조로 플레이봇 월드판에 플레이봇을 위치시킨 후, 문제 상황처럼 이어달리기를 시뮬레이션 해본다. - 이어달리기에서 주자의 움직임 규칙을 찾는다. 규칙1. 이전 주자가 내가 있는 위치에 도착하면 내가 출발한다. 규칙2. 마지막 주자는 깃발 앞의 문을 열고 들어간다. 주자 간 바톤 터치가 가능하려면 어떻게 문제를 해결해야 하는지 생각해보자. - 규칙1을 코딩하는 것과 관련 됨. - 문제에 주어진 조건들(좌표 값)에 대해 생각해 볼 수 있도록 유도한다. 플레이봇의 위치에 따라 비교해야 하는 값이 다름을 이해할 수 있도록 돕는다. - 첫 번째 주자 플레이봇과 두 번째 주자 플레이봇은 y좌표 값이 일치하므로 x좌표 값만 같게 만들어주면 됨 - 두 번째 주자 플레이봇과 세 번째 주자 플레이봇은 x좌표 값이 일치하므로 y좌표 값만 같게 만들어주면 됨 - 세 번째 주자 플레이봇은 목표 지점과 y좌표 값이 일치하므로 x좌표 값만 같게 만들어주고, 문을 열고 들어 가면 됨 활동 tip 공통적인 행동(기능)을 사용자 정의 함수로 지정할 수 있도록 유도한다. 플레이봇의 좌표 값에 따라 처리해야 하는 경우에 대해 살펴본다. - 두 플레이봇의 x좌표만 같을 때 -> y좌표만 변경되도록 이동 - 두 플레이봇의 y좌표만 같을 때 -> x좌표만 변경되도록 이동 - 두 플레이봇의 x, y좌표가 같을 때 = 두 플레이봇이 같은 위치에 있다. 241

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 첫 번째 주자 플레이봇과 두 번째 주자 플레이봇의 x 좌표 값이 같아질 때까지 첫 번째 주자 플레이봇이 한 칸 씩 앞으로 이동한다. 2 두 번째 주자 플레이봇과 세 번째 주자 플레이봇의 y 좌표가 같아질 때까지 두 번째 주자 플레이봇이 한 칸씩 앞으로 이동한다. 3 세 번째 주자 플레이봇이 문을 만날 때까지 한 칸씩 앞 으로 이동한다. 4 세 번째 주자 플레이봇이 문을 만나면 문을 열고 앞으 로 한 칸 이동한다. 5 목표 지점에 도착하면 프로그램을 종료한다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 242

[활동 3] 문제 해결 과정을 구현하기 위한 변수, 사용자 정의 함수, 명령어 생각하기 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 로봇이 이동하는데 사용 34쪽 turn_left() 로봇이 왼쪽으로 회전하는데 사용 36쪽 변수 x좌표 값과 y좌표 값 저장 61쪽 get_x() x좌표 정보를 읽어오기 위해 사용 52쪽 get_y() y좌표 정보를 읽어오기 위해 사용 52쪽 front_is_door() 문인지 확인하기 위해 사용 50쪽 open_front_door() 문을 열기 위해 사용 51쪽 document.write() 말을 거는 메시지 출력 38쪽 연산자 좌표 값을 비교하기 위해 사용 62쪽 반복문, 조건문 경우에 따라 다른 명령어를 처리하기 위해 사용 58쪽, 69쪽 활동 tip 규칙적으로 반복되는 플레이봇의 움직임을 사용자 정의 함수로 지정할 수 있도록 한다. [작은 활동 2] switch 문 학습 경우에 따라 다른 명령어 처리를 할 수 있는 조건문에는 어떤 것이 있는지 생각해보자. - if ~ else if - switch switch 문은 2개 이상의 경우일 때 효과적으로 사용할 수 있는 구문으로 메뉴판의 번호처럼 다양한 경우를 구분하여 처리할 수 있습니다. switch 문을 사용할 때 주의해야 할 점에 대해 알아보자. - switch문의 간단한 예시 코드를 통해 각각의 case에 해당하는 코드가 어떻게 실행되는지 살펴보자. 각각의 case문에 해당하는 명령어는 순차적으로 진행되며, 상위의 case가 선택되면 밑에 서 술된 case의 명령어가 전부 서술됩니다. 해당하는 case의 명령어만 내려지게 하기 위해서는 break 명령어가 필요합니다. 243

- case에 해당하는 명령어를 다 끝냈다고 알려주는 도우미와 같은 역할. - break가 모두 있는 경우 번호가 1번이라면 로봇 1을 앞으로 한 칸 이동 하는 명령어만 실행이 되지만, break가 없는 경우 번호가 1번이라면 로봇 1을 앞으로 한 칸 이동, 로봇 2를 앞으로 한 칸 이동, 로봇 3을 앞으로 한 칸 이동 하는 명렁어가 모두 실행됨. (밑줄 친 부분이 실행되는 명령어) 1 2 3 4 5 6 7 8 9 10 11 switch (번호) { case (1) : 로봇1을 앞으로 한 칸 이동 break case (2) : 로봇2를 앞으로 한 칸 이동 break case (3) : 로봇3을 앞으로 한 칸 이동 break 1 2 3 4 5 6 7 8 9 10 11 switch (번호) { case (1) : 로봇1을 앞으로 한 칸 이동 case (2) : 로봇2를 앞으로 한 칸 이동 case (3) : 로봇3을 앞으로 한 칸 이동 <break가 모두 있는 경우> <break가 빠져 있는 경우> [작은 활동 3] 매개변수가 2개 사용되는 경우 알아보기 매개변수가 2개 들어가는 사용자 정의 함수를 사용하는 방법에 대해 생각해보자. - 게임을 할 때 1인용과 2인용을 생각하면 도움이 된다. 1인용은 한 명의 사용자만 로그인을 하면 되지만 2인용은 두 명의 사용자가 로그인을 해야 합니다. 이처럼 매개변수가 2개 들어가는 사용자 정의 함수는 2개의 매개변수 각각이 맡은 역할이 있는 것입니다. 내가 만든 사용자 정의 함수가 두 개의 역할을 필요로 한다면 매개변수가 2개 들어가는 사용자 정의 함수를 만들 수 있습니다. 사용자 지정 함수에서 2개의 매개변수를 사용하는 방법에 대해 알아보자. - 함수를 선언할 때 매개변수의 이름을 적고 쉼표(,)로 구분하여 괄호를 닫아주면 된다. 예) function moving(robot1, robot2) - 함수를 사용할 때는 함수의 이름을 적고 매개변수가 될 변수의 이름을 차례로 써주면 된다. 순서에 유의한다. 예) moving(r1, r2) 244

[작은 활동 4] 객체 지향의 기본 개념 익히기 똑같은 플레이봇을 구별하는 방법을 생각해보며 객체 지향의 기본적인 개념을 이해할 수 있도록 한다. - 월드판과 플레이봇 모형을 가지고 시뮬레이션 했을 때 불편했던 점을 이야기해본다. - 색과 모양이 똑같은 플레이봇에게 명령을 내릴 때 어떤 방법을 사용하면 효과적일지 생각해본다. 예) 각각 다른 이름을 붙여봄으로써 구별할 수 있다. - 자신이 생각한 효과적인 방법을 적용하여 코딩을 할 수 있도록 안내한다. 활동 tip 자신이 생각한 효과적인 방법을 다른 사람과 공유함으로써 의사소통이 이루어질 수 있도록 하며, 더욱 효과적인 문제 해결 방법을 함께 생각해볼 수 있는 습관을 들일 수 있도록 분위기를 조성한다. [활동 4] 코딩 코딩을 해 봅시다. 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3, 4]를 참고해서 플레이봇이 이어달리기 하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // 새로운 명령어를 만드는 공간 function moving(robot1,robot2) { x1=robot1.get_x() y1=robot1.get_y() x2=robot2.get_x() y2=robot2.get_y() if (x1==x2) case_num=1 if (y1==y2) case_num=2 switch (case_num) { case (1): while (y1!==y2) { robot1. x1=robot1.get_x() y1=robot1.get_y() break case (2): while (x1!==x2) { robot1. x1=robot1.get_x() y1=robot1.get_y() 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 break function door_check(robot) { if (robot.front_is_door()==true) { robot.open_front_door() robot. show_message( 야호! 도착이다~ ) // 명령어를 실행하는 공간 moving(r1,r2) moving(r2,r3) while (r3.front_is_clear()==true) { r3. door_check(r3) 245

생각 뛰어넘기 이어달리기 주자가 일직선상에 있지 않다면 어떻게 프로그래밍 할 수 있을지 생각해보자. 초기상태 목표상태 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 월드 내에서 여러 대의 플레이봇을 구분하는 방법은 무엇인가요? <A> 색깔을 다르게 하여 구분할 수 있습니다. 또는 이름을 붙여 구분할 수 있습니다. <Q> 월드 내에서 여러 대의 플레이봇을 움직이는 방법은 무엇인가요? <A> 움직이고자 하는 플레이봇의 이름을 쓰고 온점(.)을 찍고 명령어를 쓰면 됩니다. <Q> 서로 다른 2개 이상의 경우를 고려하여 명령어를 내릴 수 있는 효율적인 구문은 무엇인가요? <A> switch문을 사용하면 여러 가지 경우를 고려하여 명령어를 내릴 수 있습니다. <Q> switch문에서 break의 역할을 무엇에 비교할 수 있을까요? <A> 여기까지 실행하면 된다고 알려주는 표지판 또는 알리미 같은 역할을 합니다. <Q> 함수에서 필요로 하는 정보가 2가지인 경우, 매개변수는 몇 개를 사용할 수 있나요? <A> 2개의 매개변수를 사용할 수 있습니다. 246

심 화 편 생각하는 플레이봇 247

23. 메뉴 추천하기 난이도 1. 수업안내 배열을 이해하고 사용할 수 있다. 학습목표 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있다. 문제 상황을 분석한 후 함수와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있다. 최댓값 찾기 알고리즘을 이해하고 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 조건문을 학습했습니까? 반복문을 학습했습니까? 반복문(while 문)을 학습했습니까? 배열을 학습했습니까? 플레이봇이 물건의 이름을 알아내기 위한 what_object()를 학습했습니 까? 58쪽 68쪽 73쪽 75쪽 45쪽 학습 내용 참고 최댓값 구하는 알고리즘 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 학생들이 각자 자신만의 방법으로 다양한 문제해결 방법을 찾도록 유도한다. 자신이 만든 프로그램을 발표하는 시간을 갖고 가장 좋은 문제해결 방법은 무엇인지 함께 생각해 본다. 핵심사고 평가기준 추상화 배열을 이해하고 사용할 수 있습니까? 추상화 배열에 저장된 데이터를 함수의 매개변수로 사용할 수 있습니까? 자동화/시뮬레이션 함수와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있습니까? 알고리즘과 절차 최댓값 찾기 알고리즘을 이해하고 사용할 수 있습니까? 248

2. 수업 전개 상황을 통한 동기유발 일상생활에서 최댓값, 최솟값을 구하는 활동들을 찾아보고 학생들이 메뉴 추천하기 활동에 관심을 가질 수 있도록 한다. - 정보 교과의 점수가 가장 높은 학생은 누구인가요? - 발이 가장 큰 학생은 누구인가요? - 달리기 기록이 가장 좋은 학생은 누구인가요? 학습할 문제 확인하기 문제 제시 플레이봇은 메뉴 중에서 추천수가 가장 높은 음식을 손님에게 알려주는 일을 담당합니다. 모든 음식의 추천 수를 알아낸 후 가장 높은 추천수의 음식을 손님에게 추천하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 249

[활동 1] 문제 상황 확인하기 초기상태 목표상태 이미지 이름 추천수 도넛 20 새우 5 치즈 6 7가지 메뉴의 추천 수를 비교하여 추천수가 가장 높은 메뉴를 찾는다. 핫도그 17 손님이 있는 방 의 문을 열고 들어가서 추천 메뉴를 햄버거 39 알려준다. 케익 26 피자 31 250

[활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 추천수와 이름 알아내기 각 메뉴의 추천수 확인하여 배열에 저장 각 메뉴의 이름 확인하여 배열에 저장 추천수가 가장 많은 것을 찾기 최댓값 찾기 알고리즘을 이용하여 추천수가 저장된 배열에서 최댓값 찾기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 각 메뉴의 추천수를 확인하여 배열(arr_num)에 저장한다. 2 각 메뉴의 이름을 확인하여 배열(arr_name)에 저장한다. 3 최댓값 찾는 알고리즘을 이용하여 추천수가 저장된 배열 (arr_num)에서 최댓값을 찾는다. 4 추천수가 가장 많은 메뉴(최댓값)가 배열(arr_num)에서 몇 번째 위치(인덱스)에 저장되어 있는지 확인하여 변수에 저장한다. 5 최댓값의 인덱스를 이용해 추천수가 가장 많은 메뉴의 이 름을 배열(arr_name)에서 찾는다. 251

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 cnt=count_object() arr_num.push(cnt) name=what_object() arr_name.push(name) max=arr_num[0] if (arr_num[i]>max) { max=arr_num[i] pos=i arr_name[pos] 메뉴의 추천수를 알아내서 배열에 저장 메뉴의 이름을 알아내서 배열에 저장 추천수가 가장 많은 메뉴를 찾기 위한 최댓값 찾기 알고리즘 배열 인덱스를 이용하여 추천수가 가장 많은 메뉴의 이름 찾기 45쪽, 75쪽 45쪽, 75쪽 58쪽, 75쪽 75쪽 활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 252

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 각 메뉴의 이름과 추천수 알아내기 [실행 전] [실행 후] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 arr_num=new Array() arr_name=new Array() for (i=0 ; i<4 ; i++) { cnt=count_object() name=what_object() arr_num.push(cnt) arr_name.push(name) for (i=0 ; i<4 ; i++) { document.write(arr_name[i] + : + arr_num[i]) <Q> 플레이봇이 현재 칸에 있는 물건의 이름을 알아내기 위한 함수는 무엇인가요? <A> what_object() <Q> 플레이봇이 현재 칸에 있는 물건의 개수를 알아내기 위한 함수는 무엇인가요? <A> count_object() <Q> 각 메뉴의 이름과 추천수를 알아내 저장하기 위한 방법으로 가장 좋은 것은 무엇인가요? <A> 배열 <Q> 배열 item을 만들기 위해서는 어떻게 하나요? <A> item=new Array() <Q> 배열 item에 데이터 추가는 어떻게 하나요? <A> item.push(데이터) 주의 배열의 인덱스는 0부터 시작됨을 상기시킨다. 253

[작은 활동 2] 최댓값 구하는 알고리즘 최댓값 구하는 알고리즘 - max를 배열의 첫 번째 값으로 초기화한다. - max와 배열의 다른 값들을 순차적으로 비교한다. - max보다 큰 값이 있으면 그 값을 max에 저장한다. - 위 과정을 배열의 마지막 값까지 반복한다. 예제 함께하기 학급의 가장 큰 키는 몇cm인가요? 학급 학생들의 키(cm)가 배열 height에 저장되어 있다. height=[170, 165, 177, 160, 155] 1. max를 배열의 첫 번째 값으로 초기화한다. max = height[0] 2. max와 배열의 다른 값들을 순차적으로 비교한다. height[i] > max 3. max보다 큰 값이 있으면 그 값을 max에 저장한다. if(height[i] > max) { max=height[i] 4. 위 과정을 배열의 마지막 값까지 반복한다. for(i=1;i<=4;i++) { [작은 활동 3] 최댓값 찾기 배열 number에 기억된 (31, 20, 44, 17) 4개의 수들 중에서 가장 큰 수를 구하는 프로그램을 만드세요. 1 2 3 4 5 6 7 8 number=new Array(31,20,44,17) max=number[0] for (i=0 ; i<4 ; i++) { if (number[i]>max) { max=number[i] document.write(max) <Q> 배열 number을 만들기 위해서는 어떻게 하나요? <A> number=new Array() 254

최댓값 구하는 알고리즘 확인 <Q> 최댓값을 저장할 변수 max의 초깃값은 무엇으로 설정할까요? <A> 배열 number의 첫 번째 값 <Q> 배열 number에 저장된 숫자들 중 최댓값이 max에 저장되도록 하는 과정은 무엇인가요? <A> max와 배열에 저장된 숫자들을 차례로 비교하여 max보다 큰 값이 있으면 max에 저장한다. 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행 [활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 추천수가 가장 높은 메뉴를 손님에게 알려주는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() // 명령어를 실행하는 공간 arr_num=new Array() arr_name=new Array() turn_left() turn_right() while (on_object()==true) { arr_num.push(count_object()) arr_name.push(what_object()) 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 max=arr_num[0] food=arr_name[0] for (i=1 ; i<7 ; i++) { if (arr_num[i]>max) { max=arr_num[i] food=arr_name[i] turn_right() turn_left() open_front_door() show_message( 추천 메뉴는 + food + 입니다. ) 활동 tip 제시된 코드는 예시이므로 학생들이 각자 다양한 접근 방법으로 문제를 해결하여 코드를 작성하도록 지도한다. 255

생각 뛰어넘기 메뉴 추천하기 문제를 2차원 배열을 이용해 해결해 보세요. 추천수가 가장 낮은 메뉴를 찾는 프로그램을 만드세요. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 자신이 만든 문제해결 방법과 프로그램이 적절하였는지, 가장 좋은 문제해결 방법은 무엇인지 토의해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 최댓값 구하는 알고리즘을 말해봅시다. <A> 1 max를 배열의 첫 번째 값으로 초기화한다. 2 max와 배열의 다른 값들을 순차적으로 비교한다. 3 max보다 큰 값이 있으면 그 값을 max에 저장한다. 4 위 과정을 배열의 마지막 값까지 반복한다. 256

24. 방 탈출하기 난이도 1. 수업안내 학습목표 핵심 사고 (CT와 연계) 누적 개념을 이해하고 계산에 사용할 수 있다. 재귀 함수의 개념을 이해하고 사용할 수 있다. 나머지연산자(%)를 이해하고 계산에 사용할 수 있다. 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 조건에 따른 처리를 하기 위한 if()를 학습했습니까? 비퍼의 개수를 알아내는 count_beeper()를 학습했습니까? 장애물의 존재를 확인하기 위한 front_is_clear()를 학습했습니까? 변수와 연산자, 결과를 출력하는 document.write()를 학습했습니까? 58쪽 47쪽 48쪽 38쪽, 61쪽, 62쪽 주 학습 내용 참고 누적 개념 61쪽 재귀 함수 개념 나머지연산자(%) 56쪽 62쪽 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 조건문, 변수와 연산자에 대한 복습 및 학습이 이루어지도록 한다. 나머지연산자를 이용해서 짝수와 홀수를 구분하는 방법에 대해 이해시킨다. 재귀 함수의 개념을 이해하는데 어려워할 수 있으므로, 주의해서 지도한다. 재귀 함수에서 빠져 나올 때 바깥쪽 함수의 원래 위치로 되돌아오는 것을 이해시킨다. 핵심사고 추상화 추상화 알고리즘과 절차 자동화 평가기준 재귀 함수 의 개념을 설명할 수 있습니까? 누적 의 개념을 설명할 수 있습니까? 짝수와 홀수 구분에 따라 로봇이 이동하는 과정을 순서적 단계로 표현할 수 있습니까? 257

2. 수업 전개 상황을 통한 동기유발 차를 타고 이동하다보면 녹색 왼쪽 방향 또는 오른쪽 방향 화살표가 켜지는 좌회전 우회전 신호를 자주 보게 되는데, 이 신호는 해당 방향으로 이동해도 된다는 뜻이다. 이것은 기차에게도 마찬가지이다. 신호기에 들어오는 불빛에 따라 해당 방향으로의 이동을 허락한다는 뜻이다. 이처럼 주어진 신호에 따라 방향을 선택해서 이동해본 경험을 떠올리면서 학생들이 방 탈출하기 활동에 관심을 가질 수 있도록 한다. 문제 제시 학습할 문제 확인하기 플레이봇이 탈출구를 알 수 없는 방안에 갇혔어요. 방을 빠져나갈 탈출구를 찾을 수 있는 유일한 힌트는 바닥 에 놓인 숫자랍니다. 숫자가 짝수이면 왼쪽, 홀수이면 오른쪽으로 회전을 해서 한 칸씩 앞으로 가다보면 탈출구를 찾을 수 있어요. 플레이봇이 방을 탈출한 후, 총 이동한 거리를 출력하는 프로그램을 만들어 주세요. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 258

[활동 1] 문제 상황 확인하기 초기상태 목표상태 로봇의 앞쪽에 숫자들이 펼쳐져 있고, 그 바깥쪽은 문으로 둘러싸여 있다. 로봇은 바닥의 숫자를 힌트로 사용해서 수많은 문 중 진짜 문을 찾아서 열고 탈출해야 한다. count_beeper() 명령어를 이용해서 바닥에 놓인 숫자를 알아낸 후, 나머지연산자(%)와 조건비교(if)를 이용해서 그 숫자가 홀수인지 짝수인지 판단해야 한다. 짝수이면 왼쪽으로 회전하고, 홀수이면 오른쪽으로 회전한다. 회전 후 앞쪽에 문이 있는지 확인해서 문이면 문을 열고 탈출하고, 문이 아니면 다시 바닥의 숫자를 이용한다. 문을 열고 탈출하면 프로그램을 종료한다. 259

[활동 2] 문제 해결 과정 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 이 문제를 해결하기 위해 로봇이 가져야 하는 기능에는 어떤 것들이 있는지 적어볼까요? 바닥에 놓인 숫자를 알아내서 짝수인지 홀수인지 판단하는 기능 짝수이면 왼쪽, 홀수이면 오른쪽으로 회전하는 기능 로봇의 앞에 문이 있는지 확인해서 문을 열고 탈출하는 기능 이동하는 횟수만큼 숫자를 증가시키는 기능 0보다 큰 양의 정수가 짝수인지 홀수인지 판단하는 방법은 무엇일까요? (예: 5 = 홀수, 10 = 짝수, 2175 = 홀수, 7256 = 짝수) 숫자를 2로 나누었을 때 구해지는 나머지가 0이면 짝수, 1이면 홀수로 판단합니다. 이 문제를 해결하기 위해 생각해봐야 할 것들에는 어떤 것들이 있을까요? 나머지연산자(%)와 조건문 if()를 이용해서 짝수, 홀수를 판단하는 방법 똑같은 일을 반복하는 요소를 찾아 재귀 함수로 만드는 방법 반복문과 재귀 함수의 차이점에 대한 이해 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대 로 적고, 순서도를 그려봅시다. 1 앞으로 한 칸 가서 바닥의 숫자를 알아낸다. 2 알아낸 숫자가 짝수인지 홀수인지 판단한다. 3 짝수이면 왼쪽, 홀수이면 오른쪽으로 회전한다. 4 앞에 문이 있으면 문을 열고 방을 탈출한 후, 총 이동 거리를 출력한다. 5 앞에 문이 있지 않으면 1~5를 다시 실행한다. 260

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() turn_right() 로봇이 이동하는데 사용 34쪽 36쪽 56쪽 count_beeper() 바닥에 놓인 숫자를 알아내는데 사용 47쪽 front_is_door() 로봇의 앞쪽에 문이 있는지 알아내는데 사용 50쪽 open_front_door() 로봇의 앞쪽에 있는 문을 여는데 사용 51쪽 변수와 연산자 if() 짝수, 홀수를 판단하는데 사용할 나머지를 구하는데 사용 로봇의 이동 거리를 저장하는데 사용 짝수, 홀수를 판단하는데 사용 로봇의 앞에 문이 있는지 없는지 판단하는데 사용 61쪽, 62쪽 58쪽 document.write() 로봇이 이동한 거리를 출력하는데 사용 38쪽 활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 261

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 누적을 이용해서 로봇이 이동한 거리 구하기 <Q> 로봇이 방을 탈출했을 때, 그동안 이동한 거리를 알아내려면 어떻게 해야 할까요? <A> 로봇이 이동할 때마다 이동한 횟수를 1씩 누적시키면 됩니다. 로봇이 한 칸 이동할 때마다 숫자를 1씩 증가시키면, 최종적으로 몇 칸을 이동했는지 알 수 있겠죠? 이처럼 로봇이 이동하는 횟수, 즉 이동하는 거리를 측정하려면 누적이라는 방법을 이용해야 합니다. 누적은 다음과 같은 뜻을 가지고 있습니다. (네이버 국어사전) 1 포개어 쌓음, 또는 포개져 쌓임 2 되풀이하거나 지속하여 더 많아지거나 심해지게 하는 것 누적의 예를 살펴볼까요? 하나의 상자에 탁구공을 1개 넣고, 탁구공을 1개 또 넣고, 탁구공을 1개 또 넣으면, 상자에는 총 3개의 탁구공이 누적되는 것입니다. 마찬가지로, 로봇이 이동한 칸의 개수를 저장하기 위한 변수를 하나 준비합니다. 그리고 를 할 때마다 그 변수에 1씩 더해서 넣는 것이죠. 1 2 3... cnt=0.. cnt = cnt + 1.. cnt = cnt + 1.. document.write(cnt) 또는 1 2 3... cnt=0.. cnt++.. cnt++.. document.write(cnt) 이렇게 하면 로봇이 이동한 거리를 알아낼 수 있답니다. 262

[작은 활동 2] 반복되는 규칙성을 찾아 함수 만들기 분석적인 시각으로 바라보다가 규칙적으로 반복되는 행동을 찾아 함수로 만드는 것은 매우 중요합니다. <Q> 이 문제에서 로봇이 반복적으로 하는 일은 무엇일까요? <A> 1 앞으로 간다. 2 이동 거리를 누적한다. 3 바닥에 놓인 숫자가 짝수인지 홀수인지 알아내서, 짝수이면 왼쪽, 홀수이면 오른쪽으로 회전한다. 4 앞에 문이 있는지 확인해서 문이 있으면 문을 열고 탈출한다. 5 문이 아니면 1번으로 되돌아간다. <Q> 앞에서 찾은 반복되는 일을 함수로 만들면 어떻게 표현할 수 있을까요? 함수 이름은 odd_even()으로 합니다. <A> 1 function odd_even() { 2 3 cnt++ 4 a=count_beeper() 5 b=a%2 6 if (b==0) { 7 turn_left() 8 else if (b==1) { 9 turn_right() 10 11 c=front_is_door() 12 if (c==true) { 13 open_front_door() 14 15 else { 16 odd_even() 17 18 <Q> odd_even() 함수는 지금까지 만들어 사용해온 함수와 다릅니다. 어떤 점이 다를까요? <A> odd_even() 함수는 주어진 일을 처리하기 위해 자기가 자기 자신의 이름을 불러서 사용합니다. 이런 형식을 재귀 함수 라고 합니다. 263

[작은 활동 3] 재귀 함수 이해하기 활동 tip 재귀 함수를 이해하는 것은 어려우므로, 학생의 수준에 따라 설명 여부를 결정하는 것이 좋다. <Q> 재귀 함수란 무엇인가요? <A> 재귀란 자기 자신을 정의할 때, 자신을 부분집합으로 사용하고, 그 부분집합은 또 자신을 부분집합으로 사용하는 구조를 말합니다. 따라서 재귀 함수는 자신의 기능을 완성하는데 있어서, 다시 자기 자신을 불러서 실행시키는 방식으로 작동하는 함수입니다. 주어진 조건에 대해 참인 동안 계속해서 자기 자신을 스스로 불러 일을 시키지 요. 그러다가 조건에 대한 결과가 거짓이 되면, 자신을 불러서 일을 시킨 횟수만큼 빠져나와 명령을 종 료하게 됩니다. <Q> 재귀 함수를 이용하면 어떤 점이 좋은가요? <A> 재귀 함수를 이용하면 복잡하고 반복적인 알고리즘을 논리적이고 명료하게 만들 수 있어서 프로그램 코드가 간결해집니다. <Q> 재귀 함수에 단점은 없나요? <A> 재귀 함수가 무한정 자기 자신에게 일을 시키지 않고 어느 순간에는 조건에 대한 결과가 거짓이 되어 탈출할 수 있도록 만들어야 합니다. 또, 재귀 함수가 자기 자신을 반복적으로 불러서 일을 시키는 과정에서 메모리가 낭비되는 현상이 발생합니다. 그럼에도 불구하고, 재귀 함수는 매우 유용하기 때문에 많이 사용됩니다. <Q> 재귀 함수는 어떤 곳에 이용되나요? <A> 하노이 탑, 피보나치 수열, 팩토리얼 함수 계산, 이진 탐색 등의 문제 해결에 많이 사용되며, 아래 그림도 재귀 알고리즘으로 해결한 것입니다. 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 264

[활동 4] 코딩 [작은 활동 1, 2, 3]을 참고해서 바닥에 놓인 숫자를 이용해서 탈출구를 찾아 방을 탈출하는 프로그램 코드를 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // 새로운 명령어를 만드는 공간 function turn_right() { turn_left() turn_left() turn_left() function odd_even() { cnt++ a=count_beeper() b=a%2 if (b==0) { turn_left() else if (b==1) { turn_right() c=front_is_door() if (c==true) { open_front_door() else { odd_even() 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 // 명령어를 실행하는 공간 cnt=0 odd_even() document.write( 총 이동 거리 : + cnt) 생각 뛰어넘기 위의 프로그램 코드에서는 탈출구를 찾기 위해 재귀 함수 odd_even()을 만들어 사용했는데, odd_even()은 어떤 조건이 유지되는 동안 반복한다는 관점에서 while()과 유사한 점이 있습니다. 위의 프로그램 코드를 while()을 이용하는 방법으로 고쳐봅시다. 265

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 말해 봅시다. 내용 확인 <Q> 재귀 함수에 대해 설명해볼까요? <A> 재귀 함수는 자신의 기능을 완성하는데 있어서, 다시 자기 자신을 불러서 실행시키는 방식으로 작동하는 함수입니다. 자기 자신을 반복적으로 불러서 일을 시키는 과정에서 메모리가 낭비되는 현상이 발생하지 만, 복잡하고 반복적인 알고리즘을 논리적이고 명료하게 만들 수 있어서 많이 사용됩니다. <Q> 재귀 함수와 반복문(while)의 유사성에 대해 설명해볼까요? <A> 재귀 함수는 자기가 자기 자신을 부르고, 불려온 자기는 또 자기 자신을 부르면서 자신에게 주어진 일을 계속 반복하는 역할을 합니다. 따라서 재귀 함수로 만들어질 수 있는 내용은 반복적으로 실행되는 내용 이어야 하고, 이것은 반복문(while)을 이용해서 처리할 수도 있습니다. 이와 반대로, 반복문(while)로 처리하던 것을 재귀 함수로 만들어 처리할 수도 있습니다. 266

25. 순서대로 놓기 난이도 1. 수업안내 학습목표 함수와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있다. 정렬 알고리즘을 이해하고 사용할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 조건문을 학습했습니까? 반복문(while 문)을 학습했습니까? 다중 반복문을 학습했습니까? 배열을 학습했습니까? 플레이봇이 현재 칸에 있는 비퍼를 줍는 pick_beeper()를 학습했습니까? 플레이봇이 현재 칸에 비퍼를 내려놓는 put_beeper()를 학습했습니까? 58쪽 73쪽 70쪽 75쪽 47쪽 47쪽 주 학습 내용 참고 on_beeper() 47쪽 정렬 알고리즘 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 정렬 알고리즘에 대한 복습 및 학습이 이루어지도록 한다. 학생들이 각자 자신만의 방법으로 다양한 문제해결 방법을 찾도록 유도한다. 자신이 만든 프로그램을 발표하는 시간을 갖고 가장 좋은 문제해결 방법은 무엇인지 함께 생각해 본다. 핵심사고 알고리즘과 절차 자동화 알고리즘과 절차 평가기준 함수와 제어문을 사용하여 플레이봇의 반복 동작을 구현할 수 있습니까? 정렬 알고리즘을 이해하고 사용할 수 있습니까? 267

2. 수업 전개 상황을 통한 동기유발 일상생활에서 정렬하는 활동들을 찾아보고 학생들이 순서대로 놓기 활동에 관심을 가질 수 있도록 한다. 문제 제시 학습할 문제 확인하기 플레이봇은 숫자카드를 순서대로 정리하는 역할을 담당합니다. 뒤섞인 숫자카드를 오름차순으로 정렬하는 프로그램을 만드세요. 단, 비퍼는 숫자카드를 의미합니다. 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 [활동 1] 문제 상황 확인하기 초기상태 목표상태 비퍼는 숫자카드를 의미하고 비퍼가 6개 놓여있는 은 6번 카드를 뜻한다. 비퍼를 줍는 동작을 통해 카드의 숫자를 확인한 후 정렬 알고리즘을 이용해 순서대로 내려놓는다. 268

[활동 2] 문제 해결 과정 스스로 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 숫자 카드(비퍼의 개수) 확인 비퍼를 줍는 동작을 통해 비퍼의 개수 확인 비퍼를 줍는 동작이 한 번 발생할 때마다 비퍼의 개수 1씩 증가 배열에 저장된 수들을 순서대로 정렬하기 선택 정렬 알고리즘을 이용하여 배열에 저장된 수들을 순서대로 정렬 숫자 카드(비퍼) 내려놓기 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 1 비퍼의 개수(카드의 숫자)를 저장할 배열을 만든다. 2 앞으로 한 칸 이동한 후, 비퍼의 개수를 저장할 변수 (cnt)를 0으로 초기화한다. 3 비퍼를 줍는다. 4 cnt 값을 1씩 증가한다. 5 현재 칸에 비퍼가 없을 때까지 3~4를 반복한다. 6 cnt에 들어있는 값을 배열에 추가한다. 7 2~6을 5회 반복한다. 8 정렬 알고리즘을 이용해서 배열에 저장된 카드 번호 를 순서대로 정렬한다. 9 원래 위치 (1,1)로 되돌아온다. 10 앞으로 한 칸씩 이동하면서 배열에 저장된 숫자(카 드 번호)만큼 비퍼를 내려놓는다. 11 숫자가 작은 카드부터 내려놓으며 10번을 5회 반복 한다. 269

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 while (on_beeper()==true) { pick_beeper() 현재 칸에 카드(비퍼)가 있으면 카드(비퍼)를 줍기 47쪽, 73쪽 cnt++ 카드(비퍼)를 주울 때마다 카드(비퍼)의 개수를 1씩 증가 61쪽 list.push(cnt) 카드(비퍼)의 개수를 배열(list)에 저장 75쪽 for (k=0 ; k<4 ; k++) { for (j=k+1 ; j<5 ; j++) { if (list[k]>list[j]) { tmp=list[k] list[k]=list[j] list[j]=tmp 정렬 알고리즘 이용해 배열(list)에 저장된 숫자 카드 (비퍼)를 순서대로 정렬 58쪽, 69쪽, 75쪽 for (m=4 ; m>=0 ; m--) { for (n=0 ; n<list[m] ; n++) { put_beeper(); ; 배열(list)에 저장된 수만큼 카드(비퍼)를 내려놓기 47쪽, 69쪽, 75쪽 활동 tip 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 270

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 숫자 카드(비퍼 개수) 확인하기 플레이봇이 앞으로 이동하며 숫자 카드(비퍼 개수)를 줍고 카드(비퍼)의 숫자(개수) 출력 [실행 전] [실행 후] 1 2 3 4 5 6 7 8 9 10 11 12 list=new Array() for (i=1 ; i<=5 ; i++) { cnt=0 while (on_beeper()==true) { pick_beeper() cnt++ list.push(cnt) document.write(list) <Q> 플레이봇이 현재 칸에 있는 비퍼를 줍는 동작을 수행하기 위한 함수는 무엇인가요? <A> pick_beeper() 주의 는 비퍼가 6개 있음을 의미하므로 비퍼를 줍는 동작을 6번 반복해야 한다. <Q> 비퍼를 줍는 동작을 언제까지 반복해야하나요? <A> 비퍼가 없을 때까지 <Q> 플레이봇이 현재 칸에 비퍼가 있는지 없는지 확인하기 위한 함수는 무엇인가요? <A> on_beeper() <Q> 플레이봇이 비퍼의 존재 여부(조건)에 따라 명령을 수행하도록 하려면 어떤 방법이 있을까요? <A> 반복문(while 문) 사용 <Q> 카드의 숫자는 비퍼의 개수를 의미합니다. 비퍼의 개수를 알아내기 위해 함수는 무엇인가요? <A> count_beeper() 271

비퍼의 개수를 알아내는 다른 방법이 있는지 생각해봅시다. 주의 숫자카드 을 줍기 위해서는 비퍼를 줍는 동작을 6번 반복해야하므로 비퍼의 개수(카드의 숫자)를 알기위해 비퍼 줍는 동작이 일어나는 횟수를 세는 방법을 학생들이 스스로 찾아낼 수 있도록 유도한다. 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 학생들이 각자 자신만의 방법으로 다양한 문제해결 방법을 찾도록 유도한다. [작은 활동 2] 선택 정렬 알고리즘 정렬의 개념 - 정렬이란 주어진 자료를 어떤 기준에 의하여 크기 순서로 나열하는 것이다. 선택 정렬 알고리즘 - 자료를 크기 순서대로 선택하여 정렬하는 방식으로 가장 작은 값을 찾아 첫 번째 위치에 있는 값과 교환하고, 두 번째로 작은 값을 찾아 두 번째 위치에 있는 값과 교환한다. 선택 정렬 과정 - 주어진 데이터 중에서 최솟값을 찾는다. - 그 값을 맨 앞에 위치한 값과 교체한다. - 맨 처음 위치를 뺀 나머지 데이터를 같은 방법으로 교체한다. 선택 정렬 알고리즘과 관련된 영상을 활용하여 학생들의 선택 정렬 알고리즘에 대한 이해를 돕는다. - 선택 정렬 알고리즘 유튜브 영상 함께 보기-1 (https://www.youtube.com/watch?v=dfg-xuypyuq) 272

- 선택 정렬 알고리즘 유튜브 영상 함께 보기-2 (https://www.youtube.com/watch?v=_bau0u8csbo) - 선택 정렬 알고리즘 유튜브 영상 함께 보기-3 (https://www.youtube.com/watch?v=8nnrnfsij5y) [작은 활동 3] 정렬하기 배열 num에 기억된 (31, 20, 44, 17) 4개의 수들을 정렬하여 다음과 같이 출력하는 프로그램을 만드세요. 1 2 3 4 5 6 7 8 9 10 11 12 13 num=new Array(31,20,44,17) for (i=0 ; i<3 ; i++) { for (j=i+1 ; j<4 ; j++) { if (num[i]>num[j]) { temp=num[i] num[i]=num[j] num[j]=temp document.write(num) 선택 정렬 알고리즘 확인 <Q> 선택 정렬 알고리즘 과정은 무엇인가요? <A> 주어진 데이터 중에서 최솟값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다. 맨 처음 위치를 뺀 나머지 데이터를 같은 방법으로 교체한다. 273

[작은 활동 4] 비퍼 내려놓기 12번째 비퍼 내려놓기 주제 활용 활동 tip 수업 장면에서 교사와 학생 사이에 이루어지는 상호작용을 가상으로 만든 시나리오 이므로 학생들의 과제 수행 능력 정도에 알맞게 질문을 선택하고 추가하여 수업을 진행 [활동 4] 코딩 코딩 학습한 내용을 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [작은 활동 1, 2, 3]을 참고해서 플레이봇이 뒤섞인 숫자카드를 오름차순으로 정렬하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 명령어를 실행하는 공간 list=new Array() for (i=1 ; i<=5 ; i++) { cnt=0 while (on_beeper()==true) { pick_beeper() cnt++ list.push(cnt) for (k=0 ; k<4 ; k++) { for (j=k+1 ; j<5 ; j++) { if (list[k]>list[j]) { tmp=list[k] list[k]=list[j] list[j]=tmp 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 repeat( turn_left(), 2) repeat(, 5) repeat( turn_left(), 2) for (i=0 ; i<=4 ; i++) { for (j=1 ; j<=arr[i] ; j++) { put_beeper() 활동 tip 제시된 코드는 예시이므로 학생들이 각자 다양한 접근 방법으로 문제를 해결하여 코드를 작성하도록 지도한다. 274

생각 뛰어넘기 선택 정렬 방법 외에 다른(버블) 정렬 알고리즘을 찾아보고 프로그램을 다시 코딩해봅시다. 정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 자신이 만든 문제해결 방법과 프로그램이 적절하였는지, 가장 좋은 문제해결 방법은 무엇인지 토의해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시다. 내용 확인 <Q> 선택 정렬 알고리즘을 말해봅시다. <A> 1 주어진 데이터 중에서 최솟값을 찾는다. 2 그 값을 맨 앞에 위치한 값과 교체한다. 3 맨 처음 위치를 뺀 나머지 데이터를 같은 방법으로 교체한다. 275

26. 미로 찾기 난이도 1. 수업안내 깊이 우선 탐색(DFS)을 이해하고 사용할 수 있다. 학습목표 스택(Stack)의 개념을 이해하고 사용할 수 있다. 깊이 우선 탐색(DFS)과 스택(Stack)을 활용해 미로찾기 문제를 해결할 수 있다. 핵심 사고 (CT와 연계) 자료수집 자료 분석 자료 표현 문제분해 추상화 알고리즘과 절차 자동화/시뮬레이션 병렬화 선행 개념 참고 조건에 따른 처리를 하기 위한 if()를 학습했습니까? 스택을 구현하기 위한 배열을 학습했습니까? 조건에 맞는 동안 반복하는 while()을 학습했습니까? 좌표와 방향을 알아내기 위한 get_x(), get_y(), get_direction()을 학습 했습니까? 58쪽 75쪽 73쪽 52쪽, 53쪽 주 학습 내용 참고 깊이 우선 탐색(DFS : Depth First Search) 스택(Stack) 지도 상 유의점 학생이 스스로 문제 해결 과정을 생각하고 정리해볼 시간을 준다. 이후 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 위 과정을 진행하는 도중 프로그램 작성을 위해 필요한 내장함수와 배열, 조건문, 반복문에 대한 복습 및 학습이 이루어지도록 한다. 이 문제는 문제 해결의 경험이 많고 수준이 높은 학생을 대상으로 한다. 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS), 스택(Stack)과 큐(Queue)를 함께 지도할 수 있다. 깊이 우선 탐색과 스택의 개념을 이해하는 것은 매우 어려우므로, 주의해서 지도한다. 핵심사고 추상화 깊이 우선 탐색 의 개념을 설명할 수 있습니까? 평가기준 추상화 스택 의 개념을 설명할 수 있습니까? 알고리즘과 절차 자동화/시뮬레이션 탐색과 스택을 이용해서 로봇이 미로의 출구를 찾아가는 과정을 순서적 단계로 표현할 수 있습니까? 276

2. 수업 전개 상황을 통한 동기유발 어릴 때 누구나 한번쯤은 종이에 그려진 미로 찾기를 해본 적이 있을 것이다. 종이 미로 찾기는 하늘에서 내려다보고 길을 찾기 때문에 막히지 않은 길을 쉽게 찾아 목적지에 도착할 수 있다. 하지만, 만약 벽으로 막힌 미로 속에 직접 들어가 있다면 어떻게 해야 옳은 길을 찾을 수 있을까? 갈라진 길이 나올 때마다 아무런 전략 없이 길을 선택한다면 목적지에 도착할 수 있을까? 그렇게 하면 영원히 미로를 빠져나오지 못할 수도 있다. 지금부터 학생들 스스로가 자신이 경험했던 미로 찾기를 떠올리면서 미로 찾기 활동에 관심을 가질 수 있도록 한다. [미로 찾기 사진] 문제 제시 학습할 문제 확인하기 플레이봇 앞에 끝을 알 수 없는 미로가 놓여있어요. 어떻게 하면 미로를 빠져나갈 수 있을까 고민하다가 깊이 우선 탐색(DFS) 이라는 알고리즘을 사용하기로 했답니다. 깊이 우선 탐색 알고리즘에 대해 열심히 공부해서 미로를 빠져나가는 프로그램을 만들어 주세요. 이 프로그램이 완성된다면 미로가 어떤 모습으로 바뀌어도 플레이봇은 항상 미로를 빠져나갈 수 있답니다. 매우 어려운 문제지만, 도전해볼까요? 학습 안내 - 문제 상황 확인하기 - 문제 해결 과정 스스로 생각하기 - 문제 해결 과정 함께 생각하기 - 코딩 277

[활동 1] 문제 상황 확인하기 초기상태 목표상태 월드에는 벽으로 나누어진 수많은 갈림길이 있다. 로봇은 벽에 충돌하지 않고 이동해서 깃발이 있는 최종 목적지를 찾아가야 한다. 최종 목적지에 도착하면 프로그램을 종료한다. 로봇이 바라보는 눈높이에서는 미로 속이 어떻게 구성되어 있는지 전혀 알 수가 없기 때문에, 적절한 알고리즘을 사용해야 한다. 로봇이 미로를 탐색하는 과정에 깊이 우선 탐색 알고리즘과 스택을 이용한다. [활동 2] 문제 해결 과정 생각하기 활동 tip [활동 2]는 학생이 스스로 문제해결과정을 생각해보는 과정으로 다음은 예시이며 수업에 참고한다. 문제 분석 문제를 작은 단위로 나눠 봅시다. 로봇이 이동하는 과정에 갈림길과 길이 막힌 곳을 중요하게 여겨야 합니다. 갈림길과 길이 막힌 곳은 어떤 특징이 있을까요? 갈림길 : 로봇이 이동해온 쪽을 제외한 나머지 3면 중에서 한 면만 벽으로 막혀 있음 길이 막힌 곳 : 로봇이 이동해온 쪽을 제외한 나머지 3면이 모두 벽으로 막혀 있음 갈림길과 길이 막힌 곳에서 로봇은 어떻게 행동해야 할까요? 갈림길 : 길이 막힌 곳에 도착하면 되돌아서 다른 길로 이동할 수 있게 갈림길의 좌표를 저장한다. 길이 막힌 곳 : 가장 최근의 갈림길까지 되돌아온 후 가보지 않은 다른 방향으로 이동한다. 로봇이 어느 방향으로 이동 가능한지 파악하기 위해 무엇을 알아야 할까요? 로봇의 x좌표, y좌표, 방향 3가지를 알아야 합니다. 278

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 문제를 해결하는 과정에 어떤 행동들이 필요한지 순서대 로 적고, 순서도를 그려봅시다. 스택1 : 방문하지 않은 칸의 좌표를 저장 스택2 : 갈림길 칸의 좌표를 저장 1 로봇이 위치한 칸의 전후좌우 4개 칸을 검사해서 방문 하지 않은 칸을 찾아 스택1에 저장하고, 그 개수를 센다. 2 방문하지 않은 칸의 개수가 2개 이상이면, 갈림길이 므로 갈림길을 저장하는 스택2에 현재 칸의 좌표를 저장 한다. 3 방문하지 않은 칸의 개수가 0이면, 길이 막힌 곳이므 로 스택2에서 가장 최근 갈림길의 좌표를 꺼내 그 위치로 되돌아간다. 4 스택1에서 방문하지 않은 칸의 좌표를 하나 꺼내 그 위 치로 이동한다. 5 목적지에 도착할 때까지 1~4를 반복한다. 활동 tip 깊이 우선 탐색 과 스택 에 대한 이해없이 이 순서도를 이해하기는 어려우므로, [활동 3] 문제 해결 과정 함께 생각하기 의 [작은 활동1~3]을 통해 학습한 후 이 순서도를 이해하는 것이 좋다. 279

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 명령어 사용 목적 참고 turn_left() front_is_clear() left_is_clear() right_is_clear() back_is_clear() 로봇이 이동하는데 사용 로봇의 이동 가능한 방향을 찾는데 사용 34쪽 36쪽 48쪽 배열 스택(Stack) 저장 공간을 구현하는데 사용 75쪽 매개 변수가 있는 function 깊이 우선 탐색 알고리즘을 구현하는데 사용 56쪽 if(), switch() 논리연산자(&&,,!) 조건에 따라 서로 다른 처리를 하는데 사용 58쪽, 66쪽, 74쪽 for(), while() 주어진 횟수 또는 조건 동안 반복하는데 사용 69쪽, 73쪽 get_x(), get_y(), get_direction() 로봇의 좌표와 방향을 알아내는데 사용 52쪽, 53쪽 280

[활동 3] 문제 해결 과정 함께 생각하기 [작은 활동 1] 깊이 우선 탐색(DFS: Depth First Search) 이해하기 이번 활동을 통해 [미로를 빠져나가는 효율적인 방법]을 찾을 수 있습니다. 좌표(1,1)에서 출발하고 (1,4)에 도착하는 미로를 통해 깊이 우선 탐색을 알아봅시다. [실행 전] [실행 후] <Q> 위 그림에서 로봇이 이동한 칸을 순서대로 표에 채워볼까요? <A> 시작 막힘 복귀 갈림길 막힘 (1,1) (2,1) (3,1) (1,1) (1,2) (2,2) (3,2) (4,2) (4,1) 복귀 갈림길 막힘 복귀 도착 (3,2) (3,3) (3,4) (4,4) (3,4) (2,4) (2,3) (1,3) (1,4) <Q> 위 그림에서 로봇이 목적지를 찾기 위해 어떤 방향으로 탐색했는지 설명해 볼까요? <A> 1 (1,1)에서 오른쪽 방향을 선택해서 (3,1)까지 이동합니다. 2 그런데 (3,1)에서 길이 막혀있기 때문에 원래 위치 (1,1)로 되돌아갑니다. 3 이번에는 가지 않았던 방향으로 방향을 바꿔 (1,2) (2,2) (3,2)로 이동합니다. 4 (3,2)에서 오른쪽 방향을 선택해서 (4,1)까지 이동합니다. 5 그런데 (4,1)에서 길이 막혀있기 때문에 길이 갈라지는 (3,2)로 되돌아갑니다. 6 이번에는 가지 않았던 방향으로 방향을 바꿔 (3,3) (3,4)로 이동합니다. 7 (3,4)에서 오른쪽 방향을 선택해서 (4,4)까지 이동합니다. 8 그런데 (4,4)에서 길이 막혀있기 때문에 길이 갈라지는 (3,4)로 되돌아갑니다. 9 이번에는 가지 않았던 방향으로 방향을 바꿔 (2,4) (2,3) (1,3) (1,4)로 이동합니다. 10 목적지에 도착한 것을 확인하고 탐색을 종료합니다. 281

<Q> 위와 같이 이동하면서 로봇은 어떤 규칙적인 행동을 했을까요? <A> 1 가보지 않은 길 중에서 하나를 선택합니다. 2 그 방향이 벽에 막혀 이동할 수 없을 때까지 이동합니다. 3 이동하는 과정에 갈림길이 나오면 갈림길의 좌표를 저장합니다. 4 벽에 막혀 이동할 수 없으면 바로 전 갈림길의 좌표로 되돌아갑니다. 로봇은 위의 1~4를 반복하면서 목적지에 도착했습니다. <Q> 이렇게 목적지를 찾는 방식의 이름은 무엇일까요? <A> 이 방식을 깊이 우선 탐색 (DFS: Depth First Search) 알고리즘이라고 합니다. 깊이 우선 탐색은 한 방향으로 최대한 깊이 들어갔다가 되돌아 나오고, 또다른 방향으로 최대한 깊이 들어갔다가 되돌아 나오는 방식으로 작동하기 때문에 깊이 우선이라고 합니다. 미로 찾기에 가장 많이 사용되는 알고리즘입니다. 활동 tip YouTube에서 깊이 우선 탐색(DFS)에 대한 동영상을 찾아 수업에 사용할 수 있다. [작은 활동 2] 스택(Stack) 이해하기 이번 활동을 통해 맞는 길을 찾기 위해 [갈림길을 저장하고 사용하는 방법]을 배울 수 있습니다. <Q> 위와 같이 목적지를 찾아갈 때, 갈림길은 총 몇 개이고, 갈림길의 좌표는 무엇일까요? <A> 갈림길은 총 3개입니다. 첫 번째 갈림길 좌표 : (2,2) 두 번째 갈림길 좌표 : (3,2) 세 번째 갈림길 좌표 : (3,4) 282

<Q> 목적지를 찾아가는 과정에서 갈림길이 저장 또는 사용되는 순서는 어떻게 될까요? <A> 1 (2,2)에서 갈림길 저장 2 (3,2)에서 갈림길 저장 3 (4,1)에서 가장 최근의 갈림길로 복귀하기 위해 (3,2) 사용 4 (3,4)에서 갈림길 저장 5 (4,4)에서 가장 최근의 갈림길로 복귀하기 위해 (3,4) 사용 6 목적지에 도착하기 때문에 갈림길 (2,2)는 사용되지 않음 이때, 갈림길은 저장되는 순서와 반대로 사용됩니다. <Q> 갈림길이 저장 또는 사용되는 순서를 그림으로 표현하면 어떻게 될까요? <A> (2,2) (3,2) (2,2) (3,2) (2,2) 1 갈림길 (2,2) 저장 2 갈림길 (3,2) 저장 (3,2) (3,4) (3,4) (3,4) (2,2) (2,2) (2,2) 3 갈림길 (3,2) 꺼내서 사용 4 갈림길 (3,4) 저장 5 갈림길 (3,4) 꺼내서 사용 이렇게 데이터가 저장되고 사용되는 형태를 스택(Stack)이라고 합니다. <Q> 스택(stack)은 무엇인가요? <A> 스택은 데이터를 저장하고 사용하는 방법 중의 하나인데, 테니스공을 보관하는 통과 비슷합니다. 테이스공을 보관하는 통은 한쪽 끝은 막혀있고 다른 한쪽은 열려 있어서, 열린 쪽을 이용해야만 공을 넣고 꺼낼 수 있습니다. 가장 나중에 넣은 공을 제일 먼저 꺼낼 수 있고, 반대로 가장 먼저 넣은 공은 가장 나중에 꺼내게 됩니다. 다소 불편해보이지만, 생활 주변에서는 이런 방식으로 데이터를 처리하는 경우가 매 우 많습니다. 이때, 데이터를 넣는 행동을 push, 데이터를 꺼내는 행동을 pop이라고 합니다. 활동 tip YouTube에서 스택(Stack)에 대한 동영상을 찾아 수업에 사용할 수 있다. 283

[작은 활동 3] 이 문제를 해결하는데 필요한 스택을 설계하고, 알고리즘 다시 살펴보기 이 문제를 실제 프로그램으로 만들기 위해서는 3개의 스택을 사용합니다. 스택1 : 로봇이 전후좌우 4개의 칸을 검사해서 이동할 수 있는 칸의 좌표를 저장 스택2 : 더 이상 이동할 곳이 없어졌을 때 되돌아갈 바로 이전 갈림길의 좌표를 저장 스택3 : 바로 이전 갈림길까지 되돌아가는 과정에 거쳐야 하는 칸들의 좌표를 저장 이 문제를 풀기 위한 간소화된 알고리즘을 서술하면 다음과 같다. 로봇은 스택1에서 좌표를 하나씩 꺼내 이동하면서 목적지인지 확인을 한다. 더 이상 이동할 곳이 없어지면 스택2에서 좌표를 하나 꺼내 되돌아갈 갈림길의 위치를 확인한다. 스택3에서 좌표를 하나씩 꺼내 이동하면서 갈림길까지 되돌아간다. 다시 스택1에서 좌표를 꺼내 탐색을 시작한다. 이 문제를 풀기 위한 구체화된 알고리즘을 서술하면 다음과 같다. 1 로봇이 위치한 칸의 전후좌우 4개 칸을 검사해서 방문하지 않은 칸을 찾아 스택1에 저장하고, 그 개수를 센다. 2 방문하지 않은 칸의 개수가 2개 이상이면, 갈림길이므로 스택2에 현재 칸의 좌표를 저장한다. 3 방문하지 않은 칸의 개수가 1개 이상이면, 갈림길로 되돌아갈 때 사용되어야 하므로 스택3에 현재 칸의 좌표를 저장한다. 4 방문하지 않은 칸의 개수가 0이면, 길이 막힌 곳이므로 스택2에서 가장 최근 갈림길의 좌표를 꺼내 그 위 치에 도착할 때까지 스택3에서 좌표를 하나씩 꺼내 이동한다. 5 스택1에서 방문하지 않은 칸의 좌표를 하나 꺼내 그 위치로 이동한다. 6 목적지에 도착할 때까지 1~5를 반복한다. 활동 tip 교사가 적절한 질문과 발문을 통해 학생들이 문제를 분석하여 해결 과정을 도출할 수 있도록 안내한다. 284

[활동 4] 코딩 [작은 활동 1, 2, 3]을 참고해서 깊이 우선 탐색과 스택을 이용해서 미로를 빠져나가는 프로그램 코드를 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 // 새로운 명령어를 만드는 공간 function save_stack() { cnt = 0 switch (nd) { case (0) : check_direction( R,3) check_direction( B,2) check_direction( L,1) check_direction( F,0) break case (1) : check_direction( B,3) check_direction( L,2) check_direction( F,1) check_direction( R,0) break case (2) : check_direction( L,3) check_direction( F,2) check_direction( R,1) check_direction( B,0) break case (3) : check_direction( F,3) check_direction( R,2) check_direction( B,1) check_direction( L,0) break function check_direction(td1, td2) { var rv, tx, ty switch (td1) { case ( F ) : rv = front_is_clear() break case ( L ) : rv = left_is_clear() break case ( R ) : rv = right_is_clear() break case ( B ) : rv = back_is_clear() break switch (td2) { case (0) : tx = nx + 1 ty = ny break case (1) : tx = nx ty = ny + 1 break case (2) : tx = nx - 1 ty = ny 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 break case (3) : tx = nx ty = ny - 1 break if (rv == true) { if (!(tx == ox && ty == oy)) { cnt++ x1.push(tx) y1.push(ty) function step_back() { var bx, by, i, tx, ty if (cnt>=2) { for (var i=1 ; i<=cnt-1 ; i++) { x2.push(nx) y2.push(ny) if (cnt>=1) { for (var i=1 ; i<=cnt ; i++) { x3.push(nx) y3.push(ny) if (!cnt) { bx = x2.pop() by = y2.pop() color = white while (get_x()!=bx get_y()!=by) { tx = x3.pop() ty = y3.pop() move_next(get_x(),get_y(),tx,ty) nx = get_x() ny = get_y() function go() { var tx, ty tx = x1.pop() ty = y1.pop() color = skyblue move_next(nx, ny, tx, ty) ox = nx oy = ny function move_next(tx1, ty1, tx2, ty2) { var cx, cy, td cx = tx1 - tx2 cy = ty1 - ty2 if (cx < 0) { td = 0 285

119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 if (cx > 0) { td = 2 if (cy < 0) { td = 1 if (cy > 0) { td = 3 while (get_direction()!= td) { turn_left() set_color(tx1,ty1,color) function dfs() { nx = get_x() ny = get_y() nd = get_direction() 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 save_stack() step_back() go() // 명령어를 실행하는 공간 var ox = oy = 0 var nx = ny = nd = 0 var cnt = 0 var x1 = new Array() var y1 = new Array() var x2 = new Array() var y2 = new Array() var x3 = new Array() var y3 = new Array() while (!(get_x()==10 && get_y()==9)) { dfs() 생각 뛰어넘기 위의 프로그램 코드에서는 로봇이 목표지점을 찾는 방법으로 while() 반복문을 이용합니다. 그런데 미로 찾기는 재귀 함수를 이용하기에 적절한 예제입니다. 위 프로그램을 while() 대신 재귀 함수를 이용하는 방법으로 프로그램 코드를 고쳐봅시다. 이 문제는 스택을 이용하지 않고도 풀 수 있습니다. 월드 크기와 동일한 크기의 배열을 이용해서 탐색한 칸을 체크하고, 체크된 값이 있는지를 비교해서 탐색하지 않은 쪽으로 탐색을 해나갈 수 있습니다. 스택 대신 배열을 이용하는 방법으로 프로그램 코드를 고쳐봅시다. 286

정리 및 평가 활동 정리 자신이 만든 프로그램을 발표해 봅시다. 다른 사람이 만든 프로그램과 자신이 만든 프로그램을 비교하며 새로 알게 된 점이 있다면 이야기해 봅시 다. 내용 확인 <Q> 깊이 우선 탐색에 대해 설명해볼까요? <A> 깊이 우선 탐색은 한 방향으로 최대한 깊이 들어갔다가 되돌아 나오고, 또다른 방향으로 최대한 깊이 들 어 갔다가 되돌아 나오는 방식으로 탐색하는 알고리즘입니다. <Q> 스택에 대해 설명해볼까요? <A> 스택은 데이터를 저장하고 사용하는 방법 중의 하나로, 한쪽 끝은 막혀있고 다른 한쪽은 열려 있어서 열 려 있는 쪽으로만 데이터를 입출력하는 구조입니다. 가장 나중에 넣은 데이터를 제일 먼저 꺼낼 수 있고, 반대로 가장 먼저 넣은 데이터는 가장 나중에 꺼내게 됩니다. 287

부록 학습지 288

1. 패턴 디자인하기 난이도 학습활동 1 - 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 평소 디자이너가 되고 싶었던 플레이봇은 여러 방면에 널리 활용되는 패턴디자인에 부쩍 관심이 많아 졌습니다. 색깔을 이용해서 멋진 패턴을 만들어 주세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 289

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 검정(black), 빨강(red), 녹색(green), 파랑(blue), 하늘색(skyblue), 노랑(yellow), 분홍색(pink) 학습활동 2 - 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 290

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 291

2. 심부름 하는 플레이봇 난이도 학습활동 1 - 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 엄마 심부름으로 포도, 버섯, 호박을 친구네 집으로 가져가려고 합니다. 친구네 집에 도착한 후 문을 열고 포도, 버 섯, 호박을 놓는 프로그램을 만들어 주세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 292

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 프로그램 코딩해보기 분석한 내용을 바탕으로 자기만의 프로그램 코드를 작성해봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 프로그램을 작성해 보자. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 293

학습활동 2 - 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 과일에 대한 답례로 친구 엄마가 직접 재배한 콩을 주셨다. 콩을 가지고 집에 가서 엄마에게 전달하는 내용을 보여 주는 프로그램을 만들어 보세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 294

프로그램 코딩해보기 분석한 내용을 바탕으로 자기만의 프로그램 코드를 작성해봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 295

3. 징검다리 건너기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 강원도 홍천에서 개최하는 나라꽃 무궁화축제에 참가하려고 합니다. 교통 혼잡을 피해 빨리 행사 장소로 이동하려고 홍천강 징검다리를 건너고자 합니다. 플레이봇이 강물에 빠지지 않고, 징검다리를 건널 수 있도록 프로그램을 만들어 주세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 296

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 징검다리를 건너는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 297

4. 과일 배달하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 수박 2개, 딸기 1개, 포도 3개를 주문 받았습니다. 주문받은 과일을 하늘색 집에 배달하고, 배달한 과 일의 총합을 구하는 프로그램을 만들어 보세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 298

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 배달한 과일의 총합을 구하는 프로그램을 만들어 보세요. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 299

5. 꽃 진열하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 꽃을 진열하려고 합니다. 각각의 꽃이 놓인 수만큼 꽃과 포장지를 놓을 수 있도록 도와주세요! 단, 꽃은 놓인 위치를 기준으로 같은 꽃이 하나의 세로줄에 있어야 하며, 꽃 색깔과 어울리는 바닥색을 칠해주세 요. 플레이봇이 꽃을 진열하는 프로그램을 만 들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 300

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 301

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 앞으로 이동하며 꽃을 진열하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 302

6. 체육대회 어울림마당 참가하기 난이도 첫 번 째 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 참가하는 어울림마당 주사위 던지기의 경기 규칙입니다. 주사위를 던져서 3이하가 나오면 마카롱을 받고, 그렇지 않으면 도너츠를 상품으로 받는 프로그램을 만들어 보세요. (단, 주사위 던지는 동작은 플레이봇이 숫자를 말하는 것으로 대체한다.) 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 303

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 프로그램 코딩해보기 분석한 내용을 바탕으로 자기만의 프로그램 코드를 작성해봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 프로그램을 작성해 보자. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 304

두 번 째 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 참가하는 어울림마당 주사위 던지기의 경기 규칙입니다. 주사위를 던져서 숫자가 1,2이면 쿠기를 받 고, 3,4가 나오면 수박을 받고, 5,6이 나오면 피자를 받는 프로그램을 만들어 보세요. (단, 주사위 던지는 동작은 플레이봇이 숫자를 말하는 것으로 대체한다.) 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 305

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 프로그램 코딩해보기 분석한 내용을 바탕으로 자기만의 프로그램 코드를 작성해봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 프로그램을 작성해 보자. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 306

7. 책상 개수 구하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 중학교에는 5개의 교실이 있는데, 각 교실마다 책상의 개수가 다르답니다. 플레이봇이 움직이면서 각 교실에 몇 개의 책상이 있는지 알아내고, 전체 책상수와 평균 책상수를 계산하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 307

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 308

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 교실의 책상 개수를 알아내고, 전체 책상수와 평균 책상수를 계산하는 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 309

8. 식탁보 깔기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 식탁보를 깔 수 있도록 도와주세요! 호박은 노란색 식탁보를, 토마토는 주황색 식탁보를, 포도는 분홍색 식탁보를 깔아주세요^^ 식탁보를 까는 플레이봇 프로그램을 만들어주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 310

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 311

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 물건의 종류에 따라 바닥 색을 바꾸는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 312

9. 장애물 뛰어넘기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 장애물을 감지하는 센서를 가지고 있습니다. 앞에 있는 장애물을 인식해서 문이면 열고 들어가고, 벽이면 점프하는 프로그램을 만들어 보세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 313

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 장애물의 유무에 따라 다르게 동작하는 프로그램을 만들어 보세요. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 314

10. 물고기 잡기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 물고기 잡기를 하는 중입니다. 물에 있는 물고기를 다 잡을 수 있도록 프로그램을 만들어 보세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 315

문제를 해결하기 위해 필요한 명령어를 나열해봅시다. 자신이 작성한 절차를 바탕으로 필요한 요소가 무엇인지 써 봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 같은 동작을 반복하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 316

11. 범인 위치 찾기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 월드에 도둑이 나타났어요! 범인이 남긴 발자국을 따라 도둑의 위치를 초록색으로 나타내는 프로그램을 만들어 주세요. 단, 다음 조건을 만족해야 합니다. 1. 플레이봇이 범인의 위치를 잘 찾아냈을 경우 범인의 위치가 맞습니다! 메시지가 팝업으로 뜨도록 합니다. 2. 플레이봇이 범인의 위치를 찾아내지 못했을 경우 범인의 위치가 빨간색으로 나타나며 범인의 위치가 아닙니 다. 메시지를 출력하도록 합니다. Tip> 발가락이 오른쪽을 향하는 발 모양은 동쪽발자국, 발가락이 위쪽을 향하는 발 모양은 북쪽발자국 입니다. Tip> 플레이봇의 처음 위치 좌표는 (1,1)입니다. 317

문제 분석 문제를 작은 단위로 나눠봅시다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 318

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 우리 반의 자리 배치를 월드 위에 나타내기 월드의 바닥 칸에 이름을 써 봅시다. 내 자리의 좌표는 무엇인가요? -> (2,3) 위치의 친구 이름은 무엇인가요? -> (1,1) 위치에 있는 친구가 내 자리를 찾아올 수 있도록 알려 주려면 어떻게 해야 할까요? 단, 내 자리의 좌표를 말할 수 없습니다. -> 319

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 앞으로 이동하며 범인의 위치를 찾는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 320

12. 비퍼 내려놓기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 앞으로 한 칸 이동할 때마다 비퍼를 1개씩 더 내려놓는 프로그램을 만들어 주세요. 즉, 첫 번째 칸에는 비퍼를 1개, 그 다음에는 2개, 그 다음에는 3개... 마지막에는 10개를 내려놓는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 321

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 322

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 앞으로 이동하며 비퍼를 1개, 2개, 3개... 10개 순으로 바닥에 내려놓는 프로그 램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 323

13. 다양한 크기의 사각형 그리기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 정사각형은 같은 길이의 4개의 변으로 이루어져 있습니다. 이 원리를 이용해서 월드에 사각형을 그려 봅시다. 월드의 크기가 달라져도 정사각형을 그릴 수 있도록 프로그램을 만들어 보세요. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 324

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 325

14. 농장에서 딸기 수확하기 난이도 문제 확인 하기 초기상태 목표상태 농장에서 딸기를 수확하려고 합니다. 로봇이 딸기가 달린 위치에서 딸기를 따고, 수확한 딸기의 총 개수를 알려주는 프로그램을 만들어 보세요. 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 326

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 327

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 딸기를 수확하는 프로그램을 만들어 보세요. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 328

15. 마트 주차장 관리하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 마트에 새로운 주차관리시스템이 도입되었어요. 이 시스템은 사용 중인 공간과 빈 주차 공간을 서로 다른 색깔로 알아낸답니다. 빈 주차 공간의 개수를 파악해서 숫자로 표시하는 주차관리시스템 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 329

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 330

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 주차 가능 공간을 숫자로 표시한 후, 원래의 위치로 되돌아오는 완성된 프로그램을 만들어 봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 331

16. 100m 달리기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 중학교에 가을 운동회가 열렸어요. 이번에는 100m 달리기 종목이 시작됩니다. 3대의 로봇이 경쟁적으로 달려서 순위를 정하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 332

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 333

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 로봇이 결승점 좌표에 도착했는지 확인하는 방법으로 우승자를 찾아 출력하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 334

17. 물건 배송하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 마트는 고객이 주문한 물건을 집까지 배달해주는 서비스를 제공하고 있습니다. 고객이 주문한 수건, 참외, 토마토, 포도 가 하늘색 쇼핑 카트에 들어있는데, 이것을 분홍색 고객의 집까지 무사히 배달하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 335

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 336

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 쇼핑 카트에 들어있는 물건을 고객의 집까지 배송하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 337

18. 책상 주인 찾기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 초록돼지 선생님 교실에 플레이봇이 찾아왔어요! 교실에 꽃이 놓인 자리가 있네요? 자리의 주인을 찾아 말을 거는 프로그램을 만들어 주세요. <말 거는 방법> 1. 자리에 해당하는 이름을 찾아 출력해봅시다. 2. 변수와 메시지 출력 명령어를 이용하여 하고 싶은 말을 입력하면 끝! <자리 주인 찾는 법> 1. 플레이봇의 위치를 알아야 해요! 2. 꽃이 놓인 자리로 이동해 좌석 배치표에서 이름을 찾을 수 있어야 해요. 338

문제 분석 문제를 작은 단위로 나눠봅시다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 339

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. 월드 위의 책상 위치를 고려하여 2차원 배열에 책상 주인의 이름을 써 봅시다. (단, 이름 정보를 저장할 때는 단순하더라도 자신만의 특별한 규칙을 적용하여야 합니다.) [2] [1] [0] 가로 줄 기준 세로 줄 기준 [0] [1] [2] [3] [4] < 2차원 배열에서의 이름 정보 저장하기 > 340

책상 위치와 이름 정보 저장 위치를 비교해봅시다. 책상 위치 이름 정보 저장 위치 x좌표 y좌표 세로 줄 기준 가로 줄 기준 나만의 규칙이 잘 드러나나요? 규칙을 적용하여 이름 정보를 저장할 때 필요한 수식이 있는지 생각해 봅시다. 341

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 꽃이 놓인 자리의 책상 주인을 찾아 말을 거는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 342

19. 방석 채우기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 식당에서는 테이블의 좌석마다 방석을 한 개씩 미리 준비해 두는데, 손님들이 식사를 하고 지나간 자리는 방석이 뒤죽박죽 섞이고 정리되지 않은 상태가 됩니다. 이 상태로는 다음 손님들을 맞이할 수 없기 때문에 좌석마다 방석을 다시 정리해야 합니다. 플레이봇이 테이 블을 따라 한 바퀴 돌며 방석의 개수를 확인하고 방석을 1개씩 놓는 프로그램을 만들어 주세요. 단, 비퍼는 방석을 의미하며, 플레이봇은 가방에 충분한 개수의 비퍼을 가지고 있습니다. 343

문제 분석 문제를 작은 단위로 나눠봅시다. 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 344

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 손님이 앉는 자리마다 방석을 1개씩 놓는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 345

20. 일곱 색깔 무지개 색칠하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 낡고 어두운 골목에 예쁜 벽화를 그리는 일을 담당합니다. 플레이봇이 벽에 아름다운 일곱 색깔 무지개를 칠하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 346

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 347

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 무지개의 일곱 색깔을 칠하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 348

21. 도둑 잡기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 월드에 도둑이 나타났어요! 도둑이 남긴 발자국이 유일한 단서입니다. 플레이봇이 발자국 개수만큼 발가락이 향하는 방향으로 이동하여 도둑을 잡는 프로그램을 만들어 주세요! 단, 도둑의 위치와 플레이봇의 위치가 같아지면 범인 검거 성공! 메시지를 팝업으로 띄워 주세요. 건투를 빕니다! 349

문제 분석 문제를 작은 단위로 나눠봅시다. 350

도둑을 잡기 전! 몸풀기 게임 한 번 할까요? <게임 진행 규칙> 준비물 : 안대, 스티커 1. 6~8명이 한 팀을 이루며, 팀 전으로 진행된다. 2. 게임 공간은 일정하게 정해둔다. 예) 교실 안 또는 운동장에 선을 그어 공간 표시 3. 각 팀에서 술래 한 사람을 정하고, 공격과 수비 순서를 정한다. 4. 공격 팀의 술래는 안대로 눈을 가리고, 수비 팀의 팀원은 게임 공간에 자유롭게 자리를 잡는다. 5. 수비 팀이 모두 자리를 잡으면 공격 팀의 술래가 게임 공간에 들어가 수비 팀원들을 탐색한다. 6. 2분 동안 게임이 이루어지며, 공격 팀의 술래는 수비 팀원들에게 스티커를 붙여 공격할 수 있다. 7. 공격과 수비를 바꾸어 진행한 후, 더 스티커를 많이 붙인 팀이 승리! 8. 수비 팀은 처음 자리를 잡은 후에는 이동할 수 없으며, 공격 팀의 술래를 제외한 팀원은 술래에게 말로 힌트 를 줄 수 있다. <빨강팀 공격> <파랑팀 공격> 게임을 시작하기 전, 우리 팀만의 승부 전략을 짜 봅시다. 게임을 하고 난 후, 가장 답답했던 점은 무엇이었나요? 351

우리 팀의 술래를 플레이봇으로 대신한다면 어떤 기능이 꼭 필요할까요? 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 352

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해 플레이봇이 발자국을 따라 도둑을 잡는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 353

22. 이어달리기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 월드에 운동회가 열렸어요! 플레이봇 친구들이 이어달리기에 참가하여 골인 할 수 있도록 이어달리기 프로그램을 만들어주세요^^ 단, 목표 깃발 앞에는 문이 있으니 주의하시길! 354

문제 분석 문제를 작은 단위로 나눠봅시다. 355

달려라, 플레이봇! 플레이봇 월드와 모형을 가지고 직접 플레이봇 이어달리기를 진행해봅시다. 플레이봇 주자들이 움직이는 규칙이 있나요? 규칙을 발견하였다면 적어봅시다. 플레이봇 주자 간 바톤터치가 이루어지게 하려면 어떻게 해야할까요? 주자 간 바톤터치를 플레이봇의 좌표 값을 이용하여 해결한다면 구체적인 전략을 세워봅시다. - 첫 번째 주자 플레이봇과 두 번째 주자 플레이봇은 이 일치하므로 를 같게 만들어주면 된다. - 두 번째 주자 플레이봇과 세 번째 주자 플레이봇은 이 일치하므로 를 같게 만들어주면 된다. - 세 번째 주자 플레이봇은 목표 지점과 이 일치하므로 를 같게 만들어주고, 문을 열고 들어가면 된다. 356

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 활동 tip 친구와 내용을 비교 한 후, 보완할 것이 없는지 생각해봅시다. 코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 이어달리기 하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 357

학습 자료 (인쇄물) 1) 플레이봇 월드 2) 플레이봇 3대 358

23. 메뉴 추천하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 메뉴 중에서 추천수가 가장 높은 음식을 손님에게 알려주는 일을 담당합니다. 모든 음식의 추천 수를 알아낸 후 가장 높은 추천수의 음식을 손님에게 추천하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 359

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 360

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 추천수가 가장 높은 메뉴를 손님에게 알려주는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 361

24. 방 탈출하기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇이 탈출구를 알 수 없는 방안에 갇혔어요. 방을 빠져나갈 탈출구를 찾을 수 있는 유일한 힌트는 바닥 에 놓인 숫자랍니다. 숫자가 짝수이면 왼쪽, 홀수이면 오른쪽으로 회전을 해서 한 칸씩 앞으로 가다보면 탈출구를 찾을 수 있어요. 플레이봇이 방을 탈출한 후, 총 이동한 거리를 출력하는 프로그램을 만들어 주세요. 문제 분석 문제를 작은 단위로 나눠봅시다. 362

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 363

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 바닥에 놓인 숫자를 이용해서 탈출구를 찾아 방을 탈출하는 프로그램 코드를 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 364

25. 순서대로 놓기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇은 숫자카드를 순서대로 정리하는 역할을 담당합니다. 뒤섞인 숫자카드를 오름차순으로 정렬하는 프로그램을 만드세요. 단, 비퍼는 숫자카드를 의미합니다. 문제 분석 문제를 작은 단위로 나눠봅시다. 365

문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 366

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 플레이봇이 뒤섞인 숫자카드를 오름차순으로 정렬하는 프로그램을 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 367

26. 미로 찾기 난이도 문제 상황 확인 플레이봇이 해결해야할 문제가 무엇인지 확인해 봅시다. 초기상태 목표상태 플레이봇 앞에 끝을 알 수 없는 미로가 놓여있어요. 어떻게 하면 미로를 빠져나갈 수 있을까 고민하다가 깊이 우선 탐색(DFS) 이라는 알고리즘을 사용하기로 했답니다. 깊이 우선 탐색 알고리즘에 대해 열심히 공부해서 미로를 빠져나가는 프로그램을 만들어 주세요. 이 프로그램이 완성된다면 미로가 어떤 모습으로 바뀌어도 플레이봇은 항상 미로를 빠져나갈 수 있답니다. 매우 어려운 문제지만, 도전해볼까요? 368

문제 분석 문제를 작은 단위로 나눠봅시다. 초기 상태에서 목표 상태로 목적지를 찾아 탐색하는 과정에 스택1,2,3에는 어떤 좌표들이 저장되는지 아래 표에 연필로 채워 봅시다. (스택으로부터 꺼내서 사용되는 좌표는 가로줄을 그리거나 지우개로 지웁니다) 스택 1 스택 2 스택 3 문제 해결 절차 표현 글, 그림 등을 사용하여 문제 해결 절차를 순서대로 나타내 봅시다. 369

필요한 명령어 나열 문제를 해결하는데 사용되는 명령어는 무엇이고, 어떤 목적으로 사용되는지 적어봅시다. 370

코딩 자신이 작성한 절차와 명령어를 바탕으로 문제를 해결하는 코드를 작성해 봅시다. [문제 해결 절차]와 [필요한 명령어]를 이용해서 깊이 우선 탐색과 스택을 이용해서 미로를 빠져나가는 프로그램 코드를 만들어봅시다. 오류가 발생할 경우, 오류 메시지를 자세히 읽어야 오류를 찾아서 고칠 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 371

372 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

저자 소개 안성진 2016 ~ (현) 한국보안윤리학회 회장 2015 ~ (현) 미래창조과학부 ICT인재양성 전문위원회 위원장 2015 ~ (현) 산업통상자원부 산업기술보호위원회 위원 2015 ~ (현) 금융보안원 ISMS인증위원회 위원 2015 ~ (현) 한국정책포럼 부회장 2014 ~ (현) 정보통신산업진흥원 TOPCIT 자문위원 2014 ~ (현) 네이버 소프트웨어야 놀자 자문위원 2014 ~ (현) 한국융합보안학회 부회장 2014 ~ (현) 한국산업보안연구학회 부회장 2014 ~ (현) 국가과학기술연구회 기획평가위원 2013 ~ (현) 대검찰청 디지털수사 자문위원 2012 ~ (현) 보안관제 신기술 연구회 회장 2010 ~ 2013 한국컴퓨터교육학회 회장 1999 ~ (현) 성균관대학교 컴퓨터교육과 교수 저서 : 정보통신배움터, 보안윤리, 사이버불링의 이해와 대책 외 15권 출간 황병욱 2010 제4회 공개SW 개발자대회 국내부문 금상 2003 경기도교육청 정보컴퓨터 교사 학력 : 한국교원대학교 대학원 컴퓨터교육학 석사 김학인 2015 ~ 네이버 소프트웨어 교육 중등교안개발팀 2007 ~ 선린인터넷고등학교 교사 2002 ~ 2006 경동고등학교 교사 학력 : 성균관대학교 컴퓨터교육 학사 이현아 2015 소프트웨어교육 연구학교 학생용 교재 개발 집필진, 교육부 2015 ~ 네이버 소프트웨어 교육 중등교안 개발팀 2014.09~ (현) 도담중학교 교사 학력 : 성균관대학교 컴퓨터교육, 수학교육 학사 이화정 2015 ~ 네이버 소프트웨어 교육 중등교안 개발팀 2015 소프트웨어교육 연구학교 학생용 교재 개발 집필진, 교육부 2013.03 ~ (현) 신천중학교 교사 학력 : 고려대학교 교육대학원 컴퓨터교육과 졸업,석사 권정인 2015 ~ (현) 성균관대학교 소프트웨어학과 초빙교수 2014 ~ 2015 경희대학교 연구교수 학력 : 성균관대학교 교육학박사(컴퓨터교육전공) 저서 : Computational & 창의적문제해결 방법론 집필 참여(2014)