| English | 의미 |
|---|---|
| selection/sɪˈlekʃn/ | 선택 구조 |
| iteration/ˌɪtəˈreɪʃn/ | 반복 |
| trace table/treɪs ˈteɪbl/ | trace table: 추적 표 |
| nested/ˈnestɪd/ | nested: 중첩된 |
| logic error/ˈlɒdʒɪk ˈerə/ | logic error: 논리 오류 |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | 카운트 제어 반복문 |
| array/əˈreɪ/ | 배열 |
| pre-condition loop/priː kənˈdɪʃn luːp/ | 전제 조건 반복문 |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | 후위 조건 반복문 |
| dry run/draɪ rʌn/ | dry run: 수동 추적 |
줄이 하나 너무 많음
- 2014년 애플은 반복되는 단일 줄 때문에 보안 업데이트를 배포했습니다. 웹사이트 인증서를 검증하는 코드 깊은 곳에서는
goto fail;가 연속으로 두 번 나타났습니다. - 두 번째 복사는 그
IF외부에 있었으므로 매번 실행되었고, 아래에 있는 검증은 절대 실행되지 않았습니다. 몇 달 동안 어떤 공격자도 임의의 웹사이트를 속일 수 있었습니다. - 선택 구조와 반복 구조는 무엇을, 얼마나 자주 실행할지 결정하는 구조입니다. 이 중 하나를 한 줄만 잘못 쓰면 프로그램은 여전히 실행되지만 틀리게 됩니다.
- 이 수업은 IF, CASE 및 세 개의 루프, 그리고 시험 전에 실수를 잡아주는 추적 표(table)를 다룹니다.
선 구조
IF age >= 18 THEN … ELSE … ENDIF
- **
ELSE**는 선택 사항이지만, **ENDIF**은 필수입니다. 모든 **IF**는 반드시 닫혀야 합니다. - 조건부(Branch)는 부울 식입니다: 비교 연산자이거나,
AND,OR,NOT로 연결된 비교 연산자들입니다.

IF … ELSE는 한 번만 테스트한 후 정확히 하나의 분기를 실행합니다
중첩 IF 및 경계값
- IF … ELSE … ENDIF를 선택할 때 사용합니다. 중첩된 IF는 각각 닫혀야 하며, CASE는 여러 조건을 한 값과 비교할 때 사용합니다. 조건들은 순서대로 검사되며, **
ENDIF**가 마지막에 오면 됩니다. - 점수가 감소하는 구간입니다. "50점 이상이면 합격"은
Mark >= 50이며,Mark > 50가 아닙니다. - 잘못된 비교는 논리 오류입니다: 프로그램이 실행되어 특정 입력에 대해错误的한 결과를 출력합니다. 경계값인 50 자체를 포함하는 추적 표는 이를 찾는 방법입니다.
"50점 이상일 경우 통과"는 IF Mark ____ 50 THEN로 작성됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
"이상"에는 50自体 포함되므로, 비교는 '이상이나 같음'이어야 합니다. >는 정확히 50점을 받은 학생에게 실패를 줄 것입니다.
CASE
CASE OF Grade … ENDCASE는 하나의 값을 여러 옵션과 비교하며 중첩된 IF 연쇄보다 깔끔합니다.- 가드(Guard)는 단일 값
"A":, 목록1, 2, 3:, 또는 범위1 TO 5:일 수 있습니다. "나머지 everything"을 위한 마지막 분기는OTHERWISE이며,> 200와 같은 조건이 아닙니다. - 가드는 순서대로 테스트됩니다.
1 TO 50:다음에40 TO 60:가 있다면 45라는 값은 첫 번째 분기를 따르므로 두 번째 분기의 할당은 실행되지 않을 수 있습니다. 이전 분기가 모든 가능한 값을 커버한다면OTHERWISE또한 실행되지 않습니다.

CASE는 가드가 값과 일치하는 첫 번째 분기를 실행함
嵌套 IF보다 CASE 문장이 깔끔한 경우는:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
CASE는 하나의 값을 여러 가능성과 일치시킵니다; 깊은 嵌套 IF는 읽기 어렵습니다.
Cambridge CASE 문장에서 효한 가드(guard)는 무엇입니까? 모든 해당 항목을 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
단일 값, 값 목록, 범위 및 OTHERWISE입니다. > 200와 같은 비교는 가드가 아니며, 커버되지 않은 것은 모두 OTHERWISE로 갑니다.
worked example: CASE 없이 CASE 재작성하기
CASE OF MySwitch를1: ThisChar ← 'a',2: ThisChar ← 'y',3: ThisChar ← '7',OTHERWISE: ThisChar ← '*'로 대체합니다.- 각 값은 IF 연쇄의 하나의 분기가 되며,
OTHERWISE는 최종ELSE가 됩니다.
IF MySwitch = 1 THEN
ThisChar <- 'a'
ELSE
IF MySwitch = 2 THEN
ThisChar <- 'y'
ELSE
IF MySwitch = 3 THEN
ThisChar <- '7'
ELSE
ThisChar <- '*'
ENDIF
ENDIF
ENDIF
- 세 개의 IF와 세 개의 ENDIF. 반대로 동일한 값을 할당하는 두 CASE 구절은 값 목록을 가진 하나의 가드로 합쳐지며,
1, 2:입니다.
세 가지 루프
- 반복(Iteration) 은 블록을 반복하며, 세 루프는 조건이 테스트되는 위치에서 다릅니다.
- 카운트 제어 루프인
FOR i ← 1 TO 10 … NEXT i은 알려진 횟수만큼 반복되며,STEP -1은 카운트다운합니다. 고정된 횟수나 배열의 모든 요소를 처리할 때 사용합니다. - 전제조건 루프,
WHILE … DO … ENDWHILE, 각 반복 전 테스트하므로 0회 실행될 수 있습니다. 사후조건 루프,REPEAT … UNTIL, 각 반복 후 테스트하므로 최소 한 번은 반드시 실행됩니다.

조건이 위치하는 곳이 본체가 실행되는 횟수를 결정함
각 루틴을 사용할时机와 매칭하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
FOR = 카운트 제어; WHILE = 조건을 먼저 테스트 (0+ passes); REPEAT = 조건을 나중에 테스트 (1+ passes).
REPEAT...UNTIL은 본문을 실행한 후 조건을 테스트하므로 본문은 항상 최소 한 번 실행됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
이 후조건 테스트가 0회 실행될 수 있는 WHILE과의 차이입니다.
루프 선택: 2점 답안
- 이름으로 1점, 이유로 1점,scheme의 용어를 사용해야 합니다.
- 카운트 제어, 반복 횟수가 루프 시작 전에 이미 알려지기 때문입니다. 사후조건, 루프 본체가 최소 한 번은 실행되어야 하기 때문입니다. 전제조건, 루프가 아예 실행될 필요가 없을 수 있기 때문입니다.
- 카운터가 있는
WHILE로 작성된 배열의 네 요소를 처리하는 루프는 "가장 적절한 방법이 아닙니다"; FOR 루프가 적절합니다. 왜냐하면 횟수가已知하기 때문입니다.
문제가 "더 적절한 루틴을 식별하고 그 이유를 제시하라"고 묻는 2점 문제를 고려하십시오. 두 점이 주어지는 것은 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
루틴에 1점, 이유에 1점: 카운트는 알고, 바디는 반드시 한 번 실행되어야 하거나, 루틴이 전혀 실행되지 않을 수 있습니다.
worked example: 각 작업에 적합한 루프는?
- 12의 곱셈표 출력: 카운트는 사전에 알려져 있으므로 FOR 루프입니다.
- 사용자가 0을 입력할 때까지 숫자 계속 읽기: 카운트는 불확실하고 첫 입력이 이미 0일 수 있으므로 테스트가 본체 앞에 와야 합니다: WHILE 루프입니다.
- 비밀번호가 맞을 때까지 요청: 사용자는 최소 한 번은 물어야 하므로 REPEAT … UNTIL 루프입니다.
- 두 가지 질문: 몇 번이나, 그리고 첫 테스트 전에 본체가 실행되어야 하는가?
"비밀번호를 맞출 때까지 계속 물어보되, 최소 한 번은 반드시 물어보라." 어떤 루틴이 적합합니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
최소 한 번은 물어봐야 하므로, 후조건 REPEAT...UNTIL이 자연스러운 선택입니다.
추적 표(Trace tables)
- 추적 표는 알고리즘을 손으로 드라이 런(dry run) 할 때 변수의 모든 값을 기록합니다. 이는 종이에 루프를 테스트하는 방법이며, 대다수 Paper 2의 6점 문제입니다.
- 변수마다 한 열, 출력물이 있다면 그额外列을 하나 더 두세요. 값이 변경될 때만 새로운 줄을 쓰고, 루프가 해당 지점에 도달했을 때 루프 조건을 평가하세요.
- 조건이 루프를 종료할 때까지 계속하고, 최종 출력을 기록하세요.
루틴을 단계별로 추적하십시오
추적 표는 루틴의 각 passes마다 각 변수를 기록합니다. 카운터 i가 올라가고 누적 합이 커지는 것을 보십시오 —这正是 시험 추적 문제에서 채우라고 하는 것입니다.
total = 0; FOR i = 1 TO 5: total = total + i 이후, total의 값은 무엇입니까?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
1+2+3+4+5 = 15 —这正是 추적 표가 pass-by-pass로 쌓아 올리는 값입니다.
worked example: 채워진 추적 표
Count <- 1
Total <- 0
WHILE Total < 10 DO
Total <- Total + Count
Count <- Count + 1
ENDWHILE
OUTPUT Count
- (Count, Total) 행: (1, 0) → (2, 1) → (3, 3) → (4, 6) → (5, 10).
- Total = 10일 때 조건
Total < 10가 거짓이 되어 루프가 종료되고, 출력은 5입니다. - 마지막 줄이 가장 자주 틀리는 곳입니다: 출력을 쓰기 전에 조건을 한 번 더 확인하세요.
작은 추적에서 루틴은 Total = 10, Count = 5로 끝나므로, 출력은 5입니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
네 번째 pass 후 Total이 10에 도달하고, 조건 Total < 10가 거짓이 되며, Count는 5로 증가했습니다.
놓칠 수 있는 점
>=와>은 다른 답입니다. 비교를 쓰기 전에 경계값을 머릿속으로 테스트하세요.OTHERWISE는 키워드이지 조건이 아닙니다. 그리고 모든IF,CASE,WHILE및FOR은ENDIF,ENDCASE,ENDWHILE또는NEXT로 끝납니다.WHILE는 0회 실행될 수 있지만,REPEAT는 그럴 수 없습니다. 첫 테스트 전에 본체가 한 번 실행되어야 하는지에 따라 선택하세요.- 추적 표에서 값이 변하지 않으면 다시 쓰지 않으며, 출력물은
OUTPUT줄이 실행될 때만 기록됩니다.
이해했습니다
- IF … ELSE … ENDIF로 선택을 처리하고, 중첩된 IF는 각각 닫아야 하며, CASE는 하나의 값을 여러 조건과 비교할 때 사용합니다. 조건들은 순서대로 검사되며, **
OTHERWISE**가 마지막에 옵니다. - FOR 카운트 known · WHILE before tests, may run zero times · REPEAT … UNTIL after tests, runs at least once
- 루프를 이름과 이유로 정당화: known count, may not run, must run once
- trace table 알고리즘을 드라이런하여 변경마다 한 줄; 최종 출력 전에 조건을 한 번 더 확인