코스 E - 반복 2 - 중첩 반복 실행 구조와 스코어보드

이 레슨에서는 복합적인 반복 실행 구조에 대해서 소개합니다.

  • Computer-science
  • Looping
Print lesson
  • 대상 연령 9+
  • 65+ 예상 시간(분)
  • Javascript Blocks

소개

이 레슨에서는 복합적인 반복 실행 구조에 대해서 소개합니다. 이 레슨을 시작하기 전에, 반복과 관련한 첫 번째 레슨인 '반복과 애니메이션' 을 먼저 완료할 것을 권장합니다. 이 레슨을 배우는 과정에서 어려움이 있다면, 이전 레슨을 먼저 살펴보세요.

'반복과 애니메이션' 레슨에서는 1 개의 반복 실행 구조만 사용했습니다. 이 레슨에서는 중첩 반복과 단일 반복을 사용합니다.

이 레슨에서는 점수판을 만들 것입니다. 점수판에서는 LED 불빛을 켜 점수를 나타냅니다. 만약 4 개의 LED 가 켜졌다면, 그 점수는 4 를 의미합니다.

선생님은 중첩 반복 구조와 관련한 다음과 같은 도전 과제를 생각해 볼 수 있습니다.

  1. 학생들에게 바깥쪽 반복 변수와 안쪽 반복 변수의 값이 어떻게 변하는지 따라갈 수 있도록 합니다. 선생님이 코드의 실행 순서를 따라갈 때, 학생들은 종이, 연필, 버튼 등을 사용할 수 있습니다. 반복 구조에서 사용되는 카운트 값이 0 부터 시작된다는 것을 확실하게 이해할 수 있도록 해서, 학생들의 혼란을 줄입니다.
  2. 중첩 반복 구조를 설명하는 여러 가지 방법들이 있습니다. 관련해서 설명할 수 있는 것 중 하나는, 10 의 자리의 숫자와 연관시켜 설명하는 것입니다. 10 의 자리 숫자를 바깥쪽 반복 구조로 생각하고, 1 의 자리의 숫자는 안쪽 반복 구조로 비유해 설명하는 방법을 사용할 수 있습니다. 바깥쪽 반복 구조가 1 번 실행될 때마다, 안쪽 반복 구조는 10 번 실행이 될 것입니다. 필요한 경우 이 예시 를 살펴보세요.:
  3. 
    basic.forever(() => {
        for (let Tens = 0; Tens <= 9; Tens++) {
            for (let Ones = 0; Ones <= 9; Ones++) {
                if (Ones + 1 < 10) {
                    basic.showNumber(Ones + 1)
                }
            }
            basic.clearScreen()
            basic.pause(500)
            basic.showNumber(Tens + 1)
            basic.showString(" Tens")
        }
    })
          
  4. 양치질과 같은 실생활에서의 예시들을 이용해 설명하는 방법도 있습니다. 대부분의 사람들을 하루에 세 번 양치질을 합니다. 바깥쪽 반복 구조는 일주일의 각 하루이고, 안쪽 반복 구조는 하루에 3 번 하는 양치질로 설명할 수 있습니다. 바깥쪽 반복 구조는 7 번 실행되고, 안쪽 반복 구조는 3 번 실행되는 것입니다.
  5. 도전과제와 퀴즈 질문들은 학생들이 한 가지 답을 얻어내도록 유도할 것입니다. 예를 들어, 점수를 출력하고 오른쪽에 LED 불빛도 함께 출력하도록하는 질문이 가능합니다. 하지만, 이러한 경우를 무시하면 점수판에 점수를 출력하는 방법이 적어도 2 가지가 있습니다. 가장 왼쪽의 가장 윗쪽은 점수가 나타나는 가장 명확한 방향과 위치입니다. 점수가 나타나는 위치를 바꾸고, 원하는 점수를 출력하는 방법을 바꾸도록 학생들에게 도전과제를 제시할 수도 있습니다. 그렇게 하면, 자기주도 연습에서 학생들이 해야할 것을 미리 준비하는데 도움이 될 수 있습니다. 전체적인 목표는 학생들이, 이러한 반복 실행 구조들이 어떻게 다른 부분들과 함께 동작하는지 이해하고 경험할 수 있도록 하는 것입니다. 같은 질문에 대해서 여러 가지 답변을 받는 방법 만큼, 더 좋은 방법이 있을까요?
  6. 점수와 함께 관련 그림을 함께 보여주는 방법을 원할 수도 있습니다. 실제로 점수를 따는 경기를 하고, 학생들이 자신들의 점수 스코어를 만들어 상대편에게 보여줄 수 있도록 할 수 있습니다. 그렇게 하면, 경기에서 얻은 점수와 관련한 이야기들을 만들어낼 수 있을 것입니다.

마이크로비트 코스 레슨들은 Code.org CS 기초 과정에서 배운 지식들을 적용하는 내용들로 맞춰져 있습니다. 이 코스 레슨들을 시작하기 전에, 학생들이 모든 CS 기초 지식들을 먼저 완료하기를 권장합니다. 학생들은 Code.org CS 기초 과정들을 통해, 반복 실행 구조에 대해서 잘 알고 있어야 합니다.

배경

학생들은, 다음을 먼저 완료하는 것이 매우 좋습니다.

선생님은, 다음을 먼저 완료하는 것이 매우 좋습니다.

교사용 가이드

Open

활동

준비물

  • BBC 마이크로비트 1대
  • USB 케이블 1개
  • AAA 배터리 팩 (옵션)
  • AAA 배터리 2개 (옵션)

수업 자료

for (let index = 0; index <= 4; index++) {}

반복(for)

원하는 코드를 원하는 횟수만큼 반복 실행 시킵니다.

basic.forever(() => {})

무한 반복 실행

원하는 코드를 백그라운드 모드로 무한 반복 실행시킵니다.


let item = 0
item = 0
            

값 저장

등호 기호를 사용하면, 변수에 어떤 수나 문자열을 저장할 수 있습니다.

led.plot(0, 0)

plot

원하는 결과를 출력하기 위해서 LED 불 빛을 켭니다.

4 단계

따라해보기

마이크로비트를 위한 단계별 설명이나 온라인 코드를 제공할 예정입니다. https://makecode.microbit.org 로 접속해보세요.

let Column = 0
let Row = 0
Row = 1
Column = 4
basic.forever(() => {
    for (let RowCounter = 0; RowCounter <= Row; RowCounter++) {
        for (let ColumnCounter = 0; ColumnCounter <= Column; ColumnCounter++) {
            led.plot(ColumnCounter, RowCounter)
        }
    }
})

코드에는 2 개의 반복 실행 구조가 포함되어있습니다.

중첩 반복 실행 구조로 만들어져있습니다. 하나의 반복 실행 구조 안에 다른 반복 실행 구조가 들어있다는 것을 의미합니다.

바깥쪽 반복 실행 구조는 LED 스크린의 가로줄 번호를 의미합니다. 현재 상태에서는, 코드가 2 번(0-1) 반복해 실행될 것입니다.

마지막으로, 안쪽 반복 실행 구조는 LED 스크린의 세로줄 번호를 의미합니다. 현재 상태에서는, 각 줄(0-4) 에 있는 5 개의 LED 들의 불을 켤 것입니다.

우리의 목표는 점수를 메기는 것입니다. 어떤 점수를 메기고, 어떤 주제로 나타낼지 결정해야 합니다! 아무 컨테스트나 대회이어도 되며, 그 활동에서 학생들을 보다 활동적으로 만들 수 있는 주제를 선택하면 됩니다. 예를 들어, 파도 타기 대회, 야구 경기, 애완견 대회, 빵굽기 컨테스트와 같은 것들이 모두 가능합니다. 마이크로비트가 점수판으로 사용될 것입니다. 점수들은 LED 스크린의 불을 키는 방식으로 출력될 것입니다.

완성된 코드는 여기 에서 살펴볼 수 있습니다.

도전과제

도전과제 1

점수를 9 로 변경해보세요. 점수를 표시할 때, 마이크로비트의 화면에 최대한 왼쪽으로 붙여 표시하세요.

View code

let Column = 0
let Row = 0
Row = 2
Column = 2
basic.forever(() => {
    for (let RowCounter = 0; RowCounter <= Row; RowCounter++) {
        for (let ColumnCounter = 0; ColumnCounter <= Column; ColumnCounter++) {
            led.plot(ColumnCounter, RowCounter)
        }
    }
})
          

완성된 코드는 여기 에서 살펴볼 수 있습니다.

도전과제 2

점수를 15 로 변경해보세요. 점수를 표시할 때, 마이크로비트의 화면에 최대한 왼쪽으로 붙여 표시하세요.

View code

let Column = 0
let Row = 0
Row = 4
Column = 2
basic.forever(() => {
    for (let RowCounter = 0; RowCounter <= Row; RowCounter++) {
        for (let ColumnCounter = 0; ColumnCounter <= Column; ColumnCounter++) {
            led.plot(ColumnCounter, RowCounter)
        }
    }
})
          

완성된 코드는 여기 에서 살펴볼 수 있습니다.

도전과제 3

점수를 16 으로 변경해보세요.

View code

let Column = 0
let Row = 0
Row = 3
Column = 3
basic.forever(() => {
    for (let RowCounter = 0; RowCounter <= Row; RowCounter++) {
        for (let ColumnCounter = 0; ColumnCounter <= Column; ColumnCounter++) {
            led.plot(ColumnCounter, RowCounter)
        }
    }
})
          

완성된 코드는 여기 에서 살펴볼 수 있습니다.

도전과제 4

점수를 만점인 25 로 변경해보세요! 모든 LED 들이 켜져야 할 것입니다! 점수를 표시할 때, 마이크로비트의 화면에 최대한 왼쪽으로 붙여 표시하세요.

View code

let Column = 0
let Row = 0
Row = 4
Column = 4
basic.forever(() => {
    for (let RowCounter = 0; RowCounter <= Row; RowCounter++) {
        for (let ColumnCounter = 0; ColumnCounter <= Column; ColumnCounter++) {
            led.plot(ColumnCounter, RowCounter)
        }
    }
})
          

완성된 코드는 여기 에서 살펴볼 수 있습니다.

자기주도 연습

점수를 선택하고, 선생님에게 자신의 목표를 이야기하세요. 서로 다른 두 가지 방법으로 그 수를 출력해보세요. 두 가지 방법을 생각한 후, 그렇게 출력할 수 있도록 작성하세요. 자신이 만든 방법을 선생님에게 확인 받으세요. 경기나 대회에서 그 두 가지 방법을 사용하고, 점수와 연관된 이야기를 만드세요.

퀴즈

질문 1

중첩 반복 구조와 관련해서 실생활에서의 예시를 들어보세요.

Show answer

다양한 답변이 나올 수 있습니다. 한 가지는 노래 부르기 입니다. 노래 가사의 절은 바깥쪽 반복이고, 후렴은 안쪽 반복입니다. 노래의 1절, 2절을 부를 때, 후렴구를 반복해 부릅니다.

질문 2

홀 수를 출력하는 것은 쉬운가요?

Show answer

네. 다양한 답변이 가능합니다. 가로줄 한 개나, 세로줄 한 개를 사용할 수도 있습니다. 그렇게 하면 5 를 표현할 수 있습니다.

질문 3

반복 실행 구조는 왜 사용할까요?

Show answer

반복 실행 구조는 프로그램의 일부분을 여러 번 반복해서 실행시키기 위해서 사용됩니다.

더 알아보기