목차 기초편 (교재 구성) 응용편 (활동하는 플레이봇) 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