| 응시자가 다음을 수행할 수 있어야 함: | 참고 사항 및 가이드라인 |
|---|---|
| 프로그램 흐름도(program flowchart) 또는 **구조화 영어(structured English)**로 제시된 주어진 설계로부터 **가위법(pseudocode)**을 구현하고 작성함 | |
| 가상코드 문장을 작성하시오: • 상수의 선언 및 초기화 • 변수의 선언 • 변수에 값 할당 • 키보드로 입력된 수학적 또는 논리적 연산자를 사용하는 식을 콘솔로 출력 | |
| 내장 함수와 라이브러리_argv를 사용함 | 가상코드 가이드에 명시되지 않은 모든 함수는 제공됨. 문자열 조작 함수는 항상 제공됨 |
프로그래밍
A-Level 컴퓨터 과학 · 주제 11
23:32
프로그래밍 기초
프로그램은 비밀번호를 요청해야 하며, 맞을 때까지 계속 묻습니다. 간단해 보입니다 — 하지만 어떤 루프를 사용합니까? 프로그램은 결정을 내리고 작업을 반복하며, 선택하는 것이…
영어 내레이션 · 영어 + 중국어 자막 burned-in
11.1
프로그래밍 기초
Syllabus
출처: Cambridge International syllabus


디자인에서 코드로
플로우차트(프로그램 플로우차트) 또는 구조화된 영어와 같은 디자인을 **가상 언어(pseudocode)**로, 그리고 실제 언어로 변환할 수 있어야 합니다:
- 변수와 데이터 타입을 찾습니다.
- 입력/출력 상자를
INPUT/OUTPUT로 변환합니다. - 결정 다이아몬드(결정상자)를
IF...ELSE...ENDIF(또는CASE)로 변환합니다. - 루프 화살표를
WHILE,REPEAT...UNTIL, 또는FOR로 변환합니다. - 프로세스 상자를 대입문 또는 계산식으로 변환합니다.
- 작은 입력값을 따라가며 검증합니다.

상수와 변수
**상수(constant)**는 절대 변하지 않는 값을 저장하고, **변수(variable)**는 변경될 수 있는 값을 저장합니다. 타입을 지정하여 선언합니다:

CONSTANT Pi = 3.14159
DECLARE Radius : REAL
DECLARE Area : REAL
Radius ← 5
Area ← Pi * Radius * Radius
반복되는 고정된 값(Pi, MaxScore)에는 상수를 사용하여 코드를 명확하게 하고 한 곳에서 쉽게 수정할 수 있게 하십시오.
In the exam, a constant is the answer to "identify a more appropriate way of representing" a fixed value, such as a tax rate or a maximum score, that appears at several places in the pseudocode. The benefits the scheme lists: the value is set once and cannot be changed accidentally by the program; a change is made in one place and reaches every statement that uses it; the identifier gives the value a meaning (MaxScore rather than 100), so the code is easier to read and to check; and there is less risk of a typing error in a long value such as 3.14159. A "state a value that could be replaced by a constant" question wants the literal from the pseudocode (0.2, 40), not a new name.
모든 변수는 사용되기 전에 식별자(이름)와 데이터 타입을 포함하여 한 번만 선언됩니다. 9618 가짜 코드 가이드의 여섯 가지 유형:
| 타입 | 저장 내용 | 코드 표기법 | 일반적 용도 |
|---|---|---|---|
INTEGER |
정수 | 42, -3 |
카운트, 배열 인덱스, 루프 카운터 |
REAL |
소수점 부분이 있는 숫자 | 3.75 |
가격, 평균 |
CHAR |
하나의 문자 | 'A' (단일 인용부호) |
등급 문자, 메뉴 키 |
STRING |
일련의 문자 | "Hello" (이중 인용부호) |
이름, 우편번호 |
BOOLEAN |
TRUE 또는 FALSE |
TRUE |
Found와 같은 플래그 |
DATE |
달력 날짜 | 12/05/2026 |
생일 |
"적절한 데이터 타입을 제시하시오"라는 질문은 변수가 가상의 언어에서 어떻게 사용되는지에 근거하여 답합니다: 소수점이 있는 값은 REAL; TRUE 또는 FALSE로 설정된 것은 BOOLEAN; 단일 인용부호 안의 값은 CHAR; 배열 인덱스로 사용되거나 DIV 및 MOD과 함께 사용되는 값은 INTEGER입니다. 가이드에서 정한 철자로 대문자로 타입을 쓰십시오.
해설 예제. 각 변수에 적절한 데이터 타입을 제시하시오.
Found ← FALSE
Initial ← 'K'
Price ← 12.99
Count ← Count + 1
Name ← "Li Wei"
Found은 BOOLEAN입니다 (FALSE를 저장함); Initial은 CHAR입니다 (단일 인용부호 안의 하나만의 문자); Price은 REAL입니다 (소수점 값); Count은 INTEGER입니다 (하나씩 증가하는 카운터); Name은 STRING입니다 (이중 인용부호 안의 텍스트).
대입 및 식
대입에는 ←을 사용합니다:
Total ← Total + 1
Average ← Sum / Count
식은 연산자를 사용합니다:
- 산술 연산
+ - * /, 합산DIV(정수 나눈 값) 및MOD(나머지):7 DIV 2 = 3;7 MOD 2 = 1. - 비교 연산
=,<>,<,>,<=,>=. - 논리 연산
AND,OR,NOT.
우선순위(높음에서 낮음): NOT → * / DIV MOD → + - → 비교 연산 → AND → OR. 불확실할 때는 괄호를 사용하시오.
입력 및 출력
OUTPUT "Enter your name:"
INPUT Name
OUTPUT "Hello, ", Name
내장 함수 및 라이브러리 루틴
대부분의 작업에는 미리 작성된 라이브러리 루틴이 제공되므로 직접 작성할 필요가 없습니다. Paper 2 삽입문에서는 사용 가능한 루틴을 정확한 이름, 매개변수 및 반환 타입과 함께 나열해 놓았으며, 그 외의 함수는 문제에서 명시합니다. 아래에 제시된 이름은 삽입문의 명칭입니다. VAL와 STR는 IGCSE 명칭이며 9618 문서 어디에도 등장하지 않으므로 점수를 얻을 수 없습니다. UCASE와 LCASE는 다른 사례입니다: 이 둘은 9618 표준에 속하며 Pseudocode 가이드에 정의되어 있지만 단일 **CHAR**를 accept하며, 삽입문에는 전혀 목록에 없기 때문입니다. Paper 2에서 전체 문자열에 대해 사용해야 할 루틴은 TO_UPPER입니다.
프로그램 라이브러리는 이미 작성, 컴파일 및 테스트된 루틴들을 보유하며, 프로그램은 자체 코드를 작성하는 대신 이를 호출합니다. "state three benefits"(세 가지 이점) 질문에 대한 답안에서 인정받는 이점은 다음과 같습니다: 루틴들은 이미 테스트되었으므로 오류가 포함될 가능성이 적습니다; 개발 시간을 절약할 수 있습니다; 프로그래머가 직접 작성하기 어려운 복잡한 연산(복잡한 통계, 그래픽 등)을 수행할 수 있습니다; 전문가에 의해 작성되어 여러 프로그램에서 재사용됩니다; 고정된 인터페이스를 가진 루틴은 프로그램 내 어디서나 호출할 수 있습니다.
| 루틴 | 반환값 | 예시 |
|---|---|---|
LENGTH(s) |
s에 포함된 문자의 개수 |
LENGTH("Hello") = 5 |
LEFT(s, n) / RIGHT(s, n) |
첫 번째 / 마지막 n개의 문자 |
RIGHT("Hello", 2) = "lo" |
MID(s, start, n) |
시작 위치 start로부터 n개의 문자 (위치는 1부터 세림) |
MID("Hello", 2, 3) = "ell" |
TO_UPPER(s) / TO_LOWER(s) |
대문자 / 소문자로 된 s |
TO_UPPER("ab1") = "AB1" |
NUM_TO_STR(x) / STR_TO_NUM(s) |
숫자를 문자열로 / 문자열을 숫자로 변환 | STR_TO_NUM("3.5") = 3.5 |
IS_NUM(s) |
s가 유효한 숫자일 때 TRUE 반환 |
IS_NUM("12a") = FALSE |
ASC(c) / CHR(n) |
c의 문자 코드 / 코드 n에 해당하는 문자 |
ASC('A') = 65, CHR(66) = 'B' |
INT(x) |
x의 정수 부분 |
INT(7.9) = 7 |
RAND(n) |
0 이상 n 미만(포함 안 함)의 무작실 실수 |
INT(RAND(6)) + 1는 주사위 굴림 결과 |
DAY(d), MONTH(d), YEAR(d) |
DATE의 구성 요소 |
YEAR(TODAY()) |
DAYINDEX(d), SETDATE(d, m, y), TODAY() |
요일 (1 = 일요일); 세 정수로 구성된 날짜; 오늘 날짜 | |
EOF(f) |
파일 f에 더 읽을 줄이 없을 때 TRUE 반환 |
WHILE NOT EOF("data.txt") |
문자열은 &(연결/concatenation)로 합칩니다: "A" & "BC"은 "ABC"입니다. 삽입문의 정확한 명칭을 사용하되 매개변수의 순서를 따르십시오.
날짜와 무작실 숫자는 한 줄 문장으로 표현됩니다. SETDATE(17, 11, 2007)는 2007년 11월 17일을 생성하고; 12 - MONTH(MyDOB)은 출생 월부터 해당 해 말까지의 달 수를 나타냅니다; IF DAYINDEX(MyDOB) = 5 THEN는 목요일을 검사하는데, 일요일이 1번이기 때문입니다. RAND(n)는 0 이상 n 미만(포함 안 함)의 실수를 반환하므로, Low부터 High까지의 무작실 정수는 INT(RAND(High - Low + 1)) + Low입니다: INT(RAND(21)) - 10는 -10부터 10까지 값을 제공합니다.

s = "COMPUTER"(위치 1–8)에 작용하는 일반적인 문자열 루틴풀이 예제. Word ← "Program", Code ← 'Q', N ← 7가 주어질 때 각 식을 계산하시오.
| 식 | 값 | 이유 |
|---|---|---|
LENGTH(Word) |
7 |
7개의 문자 |
MID(Word, 4, 2) |
"gr" |
위치 4에서 시작하는 2개의 문자 |
LEFT(Word, 3) & "!" |
"Pro!" |
&으로 연결됨 |
TO_UPPER(RIGHT(Word, 2)) |
"AM" |
내부 함수가 먼저 실행됨 |
ASC(Code) - ASC('A') |
16 |
'Q'는 81이고 'A'는 65임 |
N DIV 2 + N MOD 2 |
4 |
3 + 1 |
NUM_TO_STR(N) & "th" |
"7th" |
숫자가 먼저 문자열로 변환됨 |
INT(N / 2) |
3 |
3.5가 정수 부분으로 잘림 |
안쪽에서 바깥쪽으로 계산하고, 인용부호를 유지하십시오: "7"는 문자열이고 7는 숫자입니다.
풀이 예제. 각 문장은 함수나 연산자의 사용에 오류가 있을 수 있습니다. 오류를 설명하거나 NO ERROR라고 쓰십시오. (모든 변수는 올바른 타입이라고 가정합니다.)
| 문장 | 오류 |
|---|---|
Result ← 2 & 4 |
&은 문자열을 연결합니다; 2와 4는 정수이므로 +가 필요합니다 |
SubString ← MID("pseudocode", 4, 1) |
NO ERROR: 위치 4에서 하나의 문자, "u" |
IF x = 3 OR 4 THEN |
OR은 양쪽에 부울리안이 필요합니다: IF x = 3 OR x = 4 THEN |
Result ← Status AND INT(x / 2) |
AND은 두 개의 부울리안이 필요합니다; INT(x / 2)는 정수임 |
Message ← "Done" + LENGTH(MyString) |
+은 문자열에 정수를 더할 수 없음: "Done" & NUM_TO_STR(LENGTH(MyString)) |
모든 연산자는 특정 타입에 적용됩니다: &는 문자열, + - * / DIV MOD은 숫자, AND OR NOT는 부울리안, 그리고 = <>는 같은 타입의 두 값에 적용됩니다. "each expression을 평가하거나 ERROR를 쓰라"는 표는 다음과 같이 채워집니다: LENGTH(42)와 "A" + 1는 ERROR입니다. 타입이 함수나 연산자와 일치하지 않기 때문입니다.
풀이 예제. Points ← 100, Active ← TRUE, Exempt ← FALSE가 주어질 때 각 식을 계산하시오.
| 식 | 값 | 이유 |
|---|---|---|
(Points > 99) OR Active |
TRUE |
양쪽 모두 참입니다; 하나만 해도 됩니다 |
(Points MOD 2 = 0) OR Exempt |
TRUE |
100 MOD 2는 0입니다 |
(Points <= 75) AND (Active OR Exempt) |
FALSE |
첫 번째 쪽은 거짓이고, AND는 양쪽 다 필요함 |
(Active OR NOT Active) AND NOT Exempt |
TRUE |
Active OR NOT Active는 항상 참임 |
마지막 식은 단순화된다: X이 무엇이든 상관없이 X OR NOT X은 TRUE이므로, 전체 식은 단순히 NOT Exempt이다. 괄호를 먼저 계산한 뒤, NOT, AND, OR 순서대로 계산한다.
변수는 레이블이 붙은 상자입니다
각 할당은 이름이 붙은 상자에 하나의 값을 저장하며, 동일한 이름을 다시 할당하면 덮어씁니다. 프로그램을 단계별로 추적하여 각 상자가 현재 값을 갖도록 확인하십시오.
| English | 한국어 |
|---|---|
| pseudocode/ˈsuːdəʊkəʊd/ | 가짜 코드 |
| variables/ˈveərɪəblz/ | 변수 |
| data types/ˈdeɪtə taɪps/ | 데이터 타입 |
| assignment/əˈsaɪnmənt/ | 대입 |
| constant/ˈkɒnstənt/ | constant: 상수 |
| identifier/aɪˈdentɪfaɪə/ | identifier: 식별자 |
| function/ˈfʌŋkʃn/ | 함수 |
| library routines/ˈlaɪbrəri ruːˈtiːnz/ | 라이브러리 루틴 |
| concatenation/kənˌkætəˈneɪʃn/ | 연결 |
| selection/sɪˈlekʃn/ | 선택 구조 |
| IDE/ˌaɪ diː ˈiː/ | 통합 개발 환경 |
11.2
선택 (Selection)
Syllabus
| 응시자가 다음을 수행할 수 있어야 함: | 참고 사항 및 가이드라인 |
|---|---|
| 가상코드를 사용하여 다음을 작성하시오: • ELSE 절 및 중첩 IF 문이 포함된 ‘IF’문 • ‘CASE’ 구조 • ‘카운트 제어’ 루프: • ‘후위 조건’ 루프 • ‘전위 조건’ 루프 | |
| 다른 루프 구조보다 특정 문제 해결에 더 적합한 이유를 설명하시오 |
출처: Cambridge International syllabus
선택은 어떤 단계가 실행될지 결정합니다.
IF age >= 18 THEN
OUTPUT "Adult"
ELSE
OUTPUT "Minor"
ENDIF

두 개 이상의 경우를 처리하려면 중첩 IF를 사용할 수 있으나, 깊은 중첩은 가독성이 떨어집니다 — 여러 옵션 중 하나를 대조할 때는 CASE가 더 깔끔합니다:
CASE OF Grade
"A": OUTPUT "Excellent"
"B": OUTPUT "Good"
OTHERWISE: OUTPUT "Try again"
ENDCASE
Cambridge CASE는 단일 값, 값 목록 (1, 2, 3:), 및 범위 (1 TO 5:)를 허용합니다.
중첩 IF는 다른 IF의 분기 내에 있는 IF입니다. 각 IF에는 자체 ENDIF이 필요하며, 시험관은 모든 구성 요소가 닫혀 있는지 확인합니다:
IF Mark >= 50 THEN
IF Mark >= 80 THEN
OUTPUT "Distinction"
ELSE
OUTPUT "Pass"
ENDIF
ELSE
OUTPUT "Fail"
ENDIF
경계값에서 점수가 빠집니다. "50점 이상이면 합격"이라는 조건은 Mark >= 50이며, Mark > 50이 아닙니다; 마지막 CASE 분기는 "나머지 모든 경우"를 위해 OTHERWISE으로 작성되며, > 200과 같은 조건이 아닙니다. 여기서 잘못된 비교 연산자는 논리 오류입니다: 프로그램은 실행되지만 특정 입력에 대해 잘못된 출력을 생성하며, 50과 같은 경계값을 포함하는 추적 표는 이를 Finds하는 방법입니다.

해설 예시. CASE 구조를 사용하지 않고 동일한 기능을 갖도록 이 코드를 다시 작성하십시오.
CASE OF MySwitch
1: ThisChar ← 'a'
2: ThisChar ← 'y'
3: ThisChar ← '7'
OTHERWISE: ThisChar ← '*'
ENDCASE
각 값은 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
동일한 값을 할당하는 두 구절은 값 목록이 있는 하나의 구절로 병합됩니다: 1, 2: ThisChar ← 'a'. 가드는 순서대로 테스트됩니다: 1 TO 50:과 같은 범위가 먼저 오고 40 TO 60:가 이어질 때, 45이라는 값은 첫 번째 일치하는 분기로 들어갑니다. 따라서 나중 분기의 할당은 절대 수행되지 않을 수 있으며, 앞쪽 분기가 이미 가능한 모든 값을 커버할 경우, OTHERWISE 분기도 도달하지 못합니다.
반대로 여러 부울 variable를 테스트하는 중첩 IF는 결과별로 하나의 조건으로 작성하는 것이 더 명확합니다: IF A AND B AND C THEN CALL Sub1(), 그 다음 IF A AND B AND NOT C THEN CALL Sub2() 등. AND와 OR으로 테스트를 결합하면 중첩이 제거되고, IF A THEN이 IF A = TRUE THEN 대신 허용됩니다.
선택 (IF / ELSE)
입력을 변경하여 어떤 분기가 실행되는지 확인하세요—선택의 본질입니다.
| English | 한국어 |
|---|---|
| flowchart/ˈfləʊtʃɑːt/ | 플로우차트 |
| structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ | 구조화 영어 |
11.2
반복
반복은 블록을 여러 번 실행합니다. 세 가지 루프는 본문의 실행 횟수에 따라 다릅니다.
카운트 제어 (FOR) 루프
카운트 제어 루프 — 반복 횟수를 알고 있을 때 사용하세요:
FOR i ← 1 TO 10
OUTPUT i
NEXT i
STEP는 카운트를 변경할 수 있습니다(예: FOR i ← 10 TO 1 STEP -1). 고정된 횟수의 반복이나 배열의 각 요소를 처리하기에 적합합니다.
전조건 (WHILE) 루프
전조건 루프는 각 반복 전에 조건을 테스트하므로 0회 실행될 수 있습니다:
WHILE total < 100 DO
INPUT n
total ← total + n
ENDWHILE
후조건 (REPEAT...UNTIL) 루프
후조건 루프는 각 반복 후에 조건을 테스트하므로 최소 한 번은 반드시 실행됩니다:
REPEAT
INPUT password
UNTIL password = correctPassword
적절한 루프 선택

- 초기에 카운트가 알려짐 → FOR.
- 0회 실행 가능함 → WHILE.
- 최소 한 번은 반드시 실행됨 → REPEAT...UNTIL.
선택의 근거는 카운트가 알려진지 여부와 본문이 최소 한 번 실되어야 하는지 여부입니다. 일반적인 문제에서는 시나리오("올바른 비밀번호를 입력할 때까지 물어야 하지만 최소 한 번은 물어봐야 함")를 제시하여 어떤 루프가 적합한지 묻습니다.
The two marks are for the name of the loop and the reason, in the scheme's words: count-controlled, because the number of iterations is known before the loop starts; post-condition, because the loop body must be executed at least once; pre-condition, because the loop may not need to execute at all. A loop over the four elements of an array that has been written as a WHILE with a counter is "not the most appropriate": the count, four, is known, so a FOR loop fits.
해설 예시. 각 작업에 적합한 루프는 무엇인가? (a) 12의 곱셈표 출력; (b) 사용자가 0을 입력할 때까지 숫자 계속 읽기; (c) 비밀번호를 맞출 때까지 요청. 본문이 얼마나 자주 실행되는지와 테스트가 언제 일어나는지 묻음으로써 선택하시오. (a) 카운트는 사전에 알려져 있다(12), 따라서 FOR 루프를 사용. (b) 카운트는 알 수 없으며, 첫 번째 입력이 이미 0일 수 있음—따라서 본문 앞에 테스트가 와야 함: WHILE 루프, 0회 이상 실행. (c) 카운트는 알 수 없으나, 테스트할 대상이 생기기 전에 최소 한 번은 반드시 물어야 함—따라서 본문 뒤에 테스트가 와야 함: REPEAT...UNTIL, 1회 이상 실행. 결정적 질문은 본문이 최소 한 번 실행되어야 하는지 여부임: WHILE은 0회 실행 가능, REPEAT은 항상 한 번 실행됨.
추적 표를 이용한 수작업 행(Dry running)
추적 표는 알고리즘을 수작업으로 실행(손으로 따라 감)할 때 각 변수의 값을 기록합니다. 종이에 루프를 테스트하는 방법이며, 대부분 Paper 2의 6점 문제입니다.
DECLARE Count, Total : INTEGER
Count ← 1
Total ← 0
WHILE Total < 10
Total ← Total + Count * 2
Count ← Count + 1
ENDWHILE
OUTPUT Count, Total
| 카운트 | 합계 | 합계 < 10 | 출력 |
|---|---|---|---|
| 1 | 0 | TRUE | |
| 2 | 2 | TRUE | |
| 3 | 6 | TRUE | |
| 4 | 12 | FALSE | 4, 12 |
Rules that earn the marks: one column per variable, in the order the question gives; write a value only when it changes; start a new row each time the loop repeats; evaluate the condition with the current values, and stop the moment it is FALSE; put the output in its own column, exactly as it would appear. Trace the algorithm as written, not the one you think was intended — if it never stops, say so.
해설 예시. 각 줄에는 어떤 구조가 사용되는가—선택, 반복, 또는 서브ROUTINE 호출?
| 가식코드 | 선택 | 반복 | 서브ROUTINE |
|---|---|---|---|
| IF Ready = TRUE THEN |
CALL Start()
ENDIF
| FOR I ← 1 TO 20 ... NEXT I | | yes | |
| WHILE NOT IsFull() ... ENDWHILE | | yes | yes |
| CASE OF Key ... OTHERWISE ... ENDCASE | yes | | |
IF 및 CASE은 선택; FOR, WHILE 및 REPEAT은 반복; 괄호를 따르는 이름 — Start(), IsFull() —은 조건 내부에 있는 경우를 포함하여 프로시저 또는 함수의 호출을 의미합니다.
루틴을 단계별로 추적하십시오
추적 표(trace table)는 루프의 각 반복 후 모든 변수를 기록합니다. 카운터 i가 증가하고 누적 합계가 쌓이는 과정을 확인하세요 — 이것이 시험 추적 문제에서 채우도록 요구하는 내용과 정확히 일치합니다.
루프 추적
루프를 한 단계씩 진행하며 매 반복 시 변수가 어떻게 변하는지 관찰하십시오 — 이것이 바로 트레이스 표가 기록하는 내용입니다.
| English | 한국어 |
|---|---|
| array/əˈreɪ/ | 배열 |
| operators/ˈɒpəreɪtəz/ | operators: 연산자 |
| precedence/ˈpresɪdəns/ | 우선순위 |
| iteration/ˌɪtəˈreɪʃn/ | 반복 |
| dry run/draɪ rʌn/ | dry run: 수동 추적 |
11.3
프로시저와 함수
Syllabus
| 응시자가 다음을 수행할 수 있어야 함: | 참고 사항 및 가이드라인 |
|---|---|
| 절차(procedure) 를 정의하고 사용함 | |
| 알고리즘 구성 시 절차를 사용하는 것이 적절한 위치를 설명하시오 | |
| 매개변수 사용 | 절차는 매개변수가 없거나 하나 이상일 수 있음. 매개변수는 참조 또는 값으로 전달될 수 있음 |
| 함수(function) 를 정의하고 사용함 | |
| 알고리즘 구성 시 함수를 사용하는 것이 적절한 위치를 설명하시오 | 함수는 식에서 사용되며, 예로 반환값이 호출을 대체함 |
| 절차 및 함수와 관련된 용어를 사용함 | 절차/함수 헤더, 절차/함수 인터페이스, 매개변수, 인자(argument), 반환값(return value) 포함 |
| 효율적인 가상코드를 작성함 |
출처: Cambridge International syllabus
구조적 프로그래밍은 각기 하나의 임무를 수행하는 작은 서브루틴(subroutines) 으로 프로그램을 구성합니다.
프로시저
프로시저는 작동을 수행하는 명명된 블록으로, 파라미터를 받을 수 있지만 값을 반환하지 않습니다.
PROCEDURE Greet(name : STRING)
OUTPUT "Hello, ", name
ENDPROCEDURE
CALL Greet("Ada")
함수
함수는 프로시저와 유사하지만 값을 반환하며, 이返回值가 식의 일부가 됩니다.
FUNCTION Square(x : INTEGER) RETURNS INTEGER
RETURN x * x
ENDFUNCTION
result ← Square(5) + 1 // result = 26
서브루틴이 작업을 수행할 때는 프로시저를 사용하고, 호출자에게 값을 계산해 줄 때는 함수를 사용합니다.
교과과정은 알고리즘 구성의 어디에서 각각이 적절한지를 묻습니다. 프로시저는 동일한 단계 그룹이 여러 지점에서 필요한 곳에 적합합니다(입력 검증, 메뉴 인쇄, 두 값 교체): 단계는 한 번 작성되어 이름으로 CALL됩니다. 함수는 총합, TRUE/FALSE 결과, 두 숫자 중 더 큰 수치 등 단일 값을 계산하여 식에서 사용해야 할 때 적합합니다. 이는 반환 값이 호출을 대체하기 때문입니다: IF IsValid(Code) THEN.

파라미터
파라미터는 서브_neighbor가 입력을 받기 위해 선언하는 변수입니다. 호출자가 제공하는 값들은 인자입니다. 두 가지 전달 방법:
- 값 전달(pass by value) —_argv가 복사본을 얻으므로, 내부에서의 변경은 호출자에 영향을 미치지 않습니다. 읽기 전용 입력에 사용합니다.
- 참조 전달(pass by reference) —_argv가 호출자의 변수에 대한 참조(references) 를 얻으므로, 변경사항이 callers에게 반영됩니다. 파라미터를 업데이트해야 할 때 사용합니다.

PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
DECLARE temp : INTEGER
temp ← a
a ← b
b ← temp
ENDPROCEDURE
Cambridge 가짜코드(pseudocode)는 각 파라미터 앞에 헤더에 모드를 명시하며, BYVAL 또는 BYREF을 표기합니다. 어느 것도 표기되지 않으면 BYVAL이 기본값으로 간주되므로, 호출자의 변수를 변경해야 하는 routine — Swap 또는 누적 합계를 업데이트하는 프로시저 — 은 헤더에 BYREF이 필요합니다.
작업 예제. 출력은 무엇입니까?
PROCEDURE Adjust(BYREF X : INTEGER, BYVAL Y : INTEGER)
X ← X + Y
Y ← Y * 2
ENDPROCEDURE
A ← 5
B ← 3
CALL Adjust(A, B)
OUTPUT A, B
X은 A에 대한 참조이므로, A은 8로 변합니다. Y은 B의 복사본이므로, Y을 두 배로 만들어도 B은 여전히 3에 머물러 있습니다. 출력은 8, 3입니다. 만약 헤더에 BYVAL X이라고 적었다면, A은 여전히 5이었을 것입니다.
로컬 변수 vs 글로벌 변수
로컬 변수(local variable) 는 서브루틴 내부에서 선언되며 실행 중에만 존재합니다. 글로벌 변수(global variable) 는 외부에서 선언되어 어디에서나 볼 수 있습니다. 로컬 변수와 파라미터를 선호하십시오: 글로벌 변수의 과도한 사용은 코드의 추적을 어렵게 만들고 테스트하기 불편하게 만듭니다. (이름이 보이는 영역을 그 스코프(scope) 라고 합니다.)
일행 차이: 전역 변수는 프로그램 어디에서나 접근할 수 있지만, 로컬 변수는 이를 선언한 서브_neighbor 내부에서만 접근할 수 있습니다. 로컬 변수의 장점은 scheme에서 인정합니다: 동일한 식별자를 다른 서브_neighbor에서 사용할 수 있어 충돌이 발생하지 않습니다; 값이 프로그램의 다른 부분에 의해 실수로 변경되지 않습니다; 서브_neighbor가 종료되면 메모리가 해제됩니다; 그리고 서브_neighbor가 자기 완결적이므로 개별적으로 테스트할 수 있고 다른 프로그램에서 재사용할 수 있습니다.
로컬 변수는 서브루틴이 호출될 때마다 생성되고 반환되면 파괴되므로, 한 호출에서 다음 호출으로 값을 전달할 수 없다. 반복적인 호출을 통해 문자열을 쌓아 올리는 절차에서는 해당 문자열이 글로벌(또는 BYREF으로 전달됨)이어야 한다. 만약 MyString이 글로벌에서 MyOutput() 내부에 선언된 로컬로 변경된다면, 모든 호출이 새로운 빈 MyString으로 시작하게 되어 이전 호출에 의해 추가된 텍스트가 사라지며, 절차가 "예상대로 작동하지 않게" 된다.


서브루틴 사용 시기
다음과 같은 경우에 서브루틴을 사용하십시오:
- 동일한 로직이 여러 곳에 나타날 때 — 한 번 작성하고 여러 번 호출하십시오.
- 블록이 명확한 명명된 목적을 가질 때 — 이름이 무엇을 하는지를 문서화합니다.
- 프로그램이 복잡할 때 — 부분으로 나누십시오 (분해(decomposition)).
- 특정 부분을 독립적으로 테스트하고 싶을 때.
호출 비용이 내부 작업보다 더 크도록 너무 작게 만들지 마십시오.
용어
- 정의 definition —
PROCEDURE ... ENDPROCEDURE(또는 함수) 블록. - call — 호출 위치. argument — 전달되는 값. parameter — 이를 받는 변수입니다.
- 반환 값 return value — 함수가 다시 보내는 것.
- 프로시저/함수 헤더 procedure/function header — 이름과 파라미터를 주는 첫 번째 줄 (
PROCEDURE Name(params)또는FUNCTION Name(params) RETURNS type). - 절차/함수 인터페이스 / 서명 — 이름 + 매개변수 + 반환 유형: 호출자가 이를 사용하기 위해 알아야 할 내용입니다.
해설 예제. 헤더 FUNCTION Pass2(Count : INTEGER) RETURNS BOOLEAN에 사용된 각 용어를 설명하십시오.
| 용어 | 의미 |
|---|---|
FUNCTION |
값을 반환하는 하위 절차 |
Pass2 |
이를 호출하기 위해 사용되는 식별자 |
Count |
매개변수: 전달된 인수를 받아들이는 식별자 |
INTEGER |
매개변수의 데이터 타입 |
RETURNS BOOLEAN |
함수가 반환하는 값의 데이터 타입 |
PROCEDURE MyProc(Count : INTEGER, Message : STRING)의 두 식별자는 파라미터입니다: 이들은 프로시저가 호출될 때 전달되는 값을 받아들이며, 내부에서 로컬 변수처럼 사용됩니다.
절차를 함수로 변환하려면: PROCEDURE를 FUNCTION로 변경하고 RETURNS <type>을 추가하며; 결과를 외부로 전달하던 OUTPUT(또는 BYREF 매개변수)를 RETURN 문장으로 교체합니다. 또한 모든 호출 지점에서 반환된 값을 사용하도록 하여, Result ← Unpack(Text) 대신 CALL Unpack(Text, Result)이 되도록 변경해야 합니다. "헤더 작성" 문제의 경우 전체 줄을 작성합니다: FUNCTION Calculate(Expression : STRING) RETURNS INTEGER. 배열 매개변수는 참조(joint reference) 방식으로 전달되므로, 배열에 값을 쓰는 절차는 호출자의 배열을 직접 변경합니다.
프로그램이 새로운 모듈을 추가할 때, 먼저 합의되는 것이 인터페이스입니다: 이름, 매개변수(수, 순서, 타입), 반환 유형, 그리고 모듈이 읽거나 Writes하는 모든 글로벌 데이터. 만료일 전 알림을 보내는 모듈은 레코드(또는 인덱스)를 매개변수로 필요로 하며 아무 것도 반환하지 않으므로 절차입니다; 메인 프로그램은 레코드마다 한 번씩 이를 호출합니다.
Paper 2용 모듈 작성
Paper 2의 절반은 "모듈 X에 대한 가짜 코드를 작성"입니다. 평가 기준은 기능당 점수를 부여하므로, 완성되지 않은 모듈도 올바른 부분마다 점수를 받습니다. 검사가 확인하는 부분:

- 헤더: 질문에서 설명한 대로:
PROCEDURE Name(Param : TYPE)또는FUNCTION Name(Param : TYPE) RETURNS TYPE, routine이 인수를 Must change해야 하는 곳에BYREF. - 로컬 선언문:
DECLARE모든 로컬 변수와 그 타입, 카운터와 총합을 초기화 (Count ← 0). - 모든 요소를 방문하는 루프: 크기가 주어진 배열에는
FOR Index ← 1 TO 50; 파일에는WHILE NOT EOF(...). - 조건문: 올바른 비교와 경계, 올바른 항목에 대해:
IF Score[Index] > Limit THEN. - 브랜치 내부 업데이트: 카운터 증가, 값 저장, 또는 메시지 출력.
- 마무리: 함수에서는 루프 후 한 번
RETURN;ENDFUNCTION또는ENDPROCEDURE; 그리고 모든IF,FOR및WHILE를 닫음.
작업 예제. 전역 배열 Score : ARRAY[1:50] OF INTEGER가 시험 점수를 저장하고 있습니다. 점수가 Limit보다 많은 개수를 반환하는 함수 CountAbove(Limit : INTEGER)를 작성하십시오.
FUNCTION CountAbove(BYVAL Limit : INTEGER) RETURNS INTEGER
DECLARE Index, Count : INTEGER
Count ← 0
FOR Index ← 1 TO 50
IF Score[Index] > Limit THEN
Count ← Count + 1
ENDIF
NEXT Index
RETURN Count
ENDFUNCTION
점수: 매개변수와 RETURNS INTEGER가 있는 헤더; declared되고 0로 설정된 Count; 모든 50개의 요소를 순회하는 루프; 비교문 > Limit (>=이 아님); IF 내부에서 카운터 업데이트; 루프 후 RETURN Count. 메인 프로그램은 표현식이나 출력에서 반환값을 사용합니다: OUTPUT "Above 70: ", CountAbove(70).
해설 예제. Code가 대문자 두 개 뒤에 숫자 네 개를 따르는 양식 AB1234일 때 TRUE를 반환하고 그렇지 않을 때는 FALSE를 반환하는 함수 IsValid(Code : STRING)를 작성하십시오.
FUNCTION IsValid(BYVAL Code : STRING) RETURNS BOOLEAN
DECLARE Index : INTEGER
DECLARE Ch : STRING
IF LENGTH(Code) <> 6 THEN
RETURN FALSE
ENDIF
FOR Index ← 1 TO 6
Ch ← MID(Code, Index, 1)
IF Index <= 2 THEN
IF Ch < "A" OR Ch > "Z" THEN
RETURN FALSE
ENDIF
ELSE
IF Ch < "0" OR Ch > "9" THEN
RETURN FALSE
ENDIF
ENDIF
NEXT Index
RETURN TRUE
ENDFUNCTION
길이 검증이 먼저 이루어지므로, MID는 존재하지 않는 위치를 요청받지 않습니다. 이러한 검증은 호출자가 IF IsValid(Entry) THEN ... ELSE OUTPUT "Invalid code" ENDIF를 Writes할 수 있도록 BOOLEAN를 반환합니다: 사용자에게 보낼 메시지는 호출자가 Output하며, 함수는 계산하고 절차는 Action을 수행합니다.
해설 예제. Word가 뒤집었을 때 똑같이 읽히는 경우, 예를 들어 "RACECAR"과 같이, TRUE를 반환하는 함수 IsPalindrome(Word : STRING)를 작성하십시오.
두 끝에서 문자를 비교하며 안쪽으로 이동합니다: 위치 Index는 위치 Len - Index + 1와 짝을 이루며, 첫 번째 반쪽만 테스트하면 됩니다.

i와 위치 Len - i + 1를 짝을 이루고 중간에서 멈춥니다FUNCTION IsPalindrome(BYVAL Word : STRING) RETURNS BOOLEAN
DECLARE Len, Index : INTEGER
Len ← LENGTH(Word)
FOR Index ← 1 TO Len DIV 2
IF MID(Word, Index, 1) <> MID(Word, Len - Index + 1, 1) THEN
RETURN FALSE
ENDIF
NEXT Index
RETURN TRUE
ENDFUNCTION
동일한 세 가지 도구 — 위치를 순회하는 FOR, 한 문자를 읽는 MID(s, i, 1), 새로운 문자열을 만드는 & — 는 Exam Paper 2의 대부분의 문자열 모듈 문제를 해결합니다: 특정 문자가 나타나는 횟수 세기(IF MID(s, i, 1) = Ch THEN Count ← Count + 1), 모든 instances의 문자 교체(각 위치마다 NewChar 또는 원본 문자를 NewString에 추가), 카드 번호의 마지막 4자리 외 숨기기(Len - 4까지의 모든 위치마다 '*'를 추가), 또는 Start부터 Start + Length - 1까지의 문자들을 결합하여 자체적으로 MID()를 작성하기. MID에 문자열의 끝을 초과하는 위치를 요청하면 런타임 오류가 발생하므로, 먼저 LENGTH를 확인해야 합니다.
파일. 변수의 값은 프로그램 종료 시 사라지므로, 다음 실행 시 데이터를 유지해야 하는 모듈은 파일을 Write합니다: OPENFILE "scores.txt" FOR WRITE, 루프 내에서 매 WRITEFILE "scores.txt", NUM_TO_STR(Score[Index]) 라인당, 그리고 루프 후 한 번 CLOSEFILE "scores.txt"; 다시 Reads하는 것은 FOR READ, READFILE 및 WHILE NOT EOF("scores.txt")를 사용합니다. Topic 10에는 완전한 파일 섹션이 있습니다; 여기서는 올바른 모드 Open, 루프 내 Reads 또는 Writes, 그리고 루프 후 한 번 Close에 대한 점수가 주어집니다.
콜 스택: 호출 시 push, 반환 시 pop
서브루틴을 호출하면 새로운 프레임이 상단에 적재되며, 리턴할 때 해당 프레임을 제거하고 값을 호출자에게 반환합니다. 현재 실행 중인 호출은 항상 최상단 프레임입니다.
| English | 한국어 |
|---|---|
| procedure/prəˈsiːdʒə/ | 절차 |
| structured programming/ˈstrʌktʃəd ˈprəʊɡræmɪŋ/ | structured programming: 구조화 프로그래밍 |
| subroutines/ˈsʌbruːtiːnz/ | 서브루틴 |
| return value/rɪˈtɜːn ˈvæljuː/ | 반환 값 |
| arguments/ˈɑːɡjuːmənts/ | arguments: 실제 인자 |
| pass by value/pæs baɪ ˈvæljuː/ | 값 전달 |
| pass by reference/pæs baɪ ˈrefrəns/ | 참조 전달 |
| global variable/ˈɡləʊbl ˈveərɪəbl/ | 전역 변수 |
| local variable/ˈləʊkl ˈveərɪəbl/ | 로컬 변수 |
| scope/skəʊp/ | 범위 |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | 분해 |
| signature/ˈsɪɡnɪtʃə/ | signature: 서명 |
| format/ˈfɔːmæt/ | 포맷 |
| Validation/ˌvælɪˈdeɪʃn/ | 검증 |
| run-time error/rʌn taɪm ˈerə/ | 실행 중 오류 |
11.3
효율적인 가짜 코드 작성
"세 가지 특징을 나열하라"는 질문에 대한 답으로, 가상어法를 이해하기 쉽게 만드는 세 가지 특징은 의미 있는 식별자(Total, t가 아님), 각 구조체 내부의 문장을 들여쓰기하는 것, 그리고 목적을 설명하는 주석(// ...)입니다. 대문자로 표기된 키워드, 줄마다 하나의 문장, 섹션 사이의 빈 줄도 허용됩니다. 효율적인 가사어法는 다음과 같이 더 발전합니다:
- 루프 바깥으로 불변량(invariant) 이동 — 루프 카운터와 관계없이 변하지 않는 값(불변량)은 루프 실행 전에 한 번만 계산합니다.
- 조기 종료 — 정답을 찾았을 때 루프를 즉시 종료합니다(타겟이 나타나는 즉시 선형 탐색(linear search) 을 멈춥니다).
- 중복 작업 방지 — 결과를 저장하여 다시 계산하지 않고 재사용합니다.
- 적절한 데이터 구조 선택 — 항목들이 함께 묶여 있다면 여러 개의 개별 변수보다 배열(array)이 유리합니다.
- deep nested IF를 CASE로 교체 — 한 값을 여러 조건에서 테스트할 때 사용합니다.
- 의도를 주석으로 남기기 — 메커니즘(
// validate the postcode)이 아닌 의도(// loop 6 times)를 설명합니다. - 의미 있는 이름 사용 (
numberOfPupils,n이 아님) 및 사용 전에 변수 초기화.

| English | 한국어 |
|---|---|
| nested/ˈnestɪd/ | nested: 중첩된 |
| logic error/ˈlɒdʒɪk ˈerə/ | logic error: 논리 오류 |
| invariant/ɪnˈveərɪənt/ | 불변량 |
| linear search/ˈlɪnɪə sɜːtʃ/ | 선형 탐색 |
| syntax error/ˈsɪntæks ˈerə/ | 문법 오류 |
11.3
테스트 및 오류
세 가지 종류의 오류가 있으며, 각각 다른 방식으로 발견됩니다:
| 오류 | 정의 | 예시 | 발견 방법 |
|---|---|---|---|
| 구문 오류 | 언어 규칙을 위반하는 문장 | ENDIF이 누락됨; OUTPT "Hi" |
프로그램 실행 전, 번역기 |
| 실행 중 오류 | 프로그램은 실행되지만 특정 문장을 수행할 수 없음 | 0으로 나누기; 배열 인덱스 0 또는 51; 유효하지 않은 매개변수로 함수 호출; 루프가 끝나지 않아 프로그램이 "멈춤(freeze)"됨 | 실행 중: 프로그램이 중단되거나 갇힘(hang) |
| 논리 오류 | 프로그램은 끝까지 실행되지만 출력이 틀림 | >이 필요했던 곳에 >=; 합계가 0로 설정되지 않음 |
추론 표(trace table)와 선택된 테스트 데이터로 검증 |
IDE는 마지막 두 오류를 찾는 데 도움이 됩니다: 브레이크포인트(breakpoint) 은 지정된 라인에서 프로그램을 일시정지하고, 단일 스텝(single stepping) 은 문장을 하나씩 순차적으로 실행하며, 리포트(또는 감시) 창은 해당 시점의 각 변수 값을 표시하므로 값이 잘못된 라인을 직접 확인할 수 있습니다. 테스트 방법과 테스트 데이터는 주제 12에 있습니다.
| English | 한국어 |
|---|---|
| trace table/treɪs ˈteɪbl/ | trace table: 추적 표 |
| breakpoint/ˈbreɪkpɔɪnt/ | 브레이크 포인트 |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | 단위 실행 |
11.3
출제자가 인정하는 정의
정의형 질문은 고정된 용어에 따라 채점됩니다. 이를 정확히 암기하십시오.
| 용어 | 정의 |
|---|---|
| 프로시저(procedure) | 과제를 수행하는 단계의 서열을 실행하지만 값을 반환하지 않는 하위程序(subroutine); CALL로 호출함 |
| 함수(function) | 호출된 지점으로 단일 값을 반환하므로 식(expression) 내에서 사용할 수 있는 하위程序(subroutine) |
| 매개변수 | 서브루틴 호출 시 값을 받거나 주소를 전달받는 서브루틴 헤더 내 식별자 |
| 인자(argument) | 호출 시 제공되는 값(또는 변수)으로, 매개변수와 대응됨 |
| value 전달(passing by value) | 인자의 값 사본을 하위程序(subroutine)에 전달하므로 내부에서의 변경은 원본 변수에 영향을 주지 않음 |
| reference 전달(passing by reference) | 변수의 주소가 하위程序(subroutine)에 전달되므로 내부에서의 변경이 원본 변수에도 반영됨 |
| 헤더(header) | 하위程序(subroutine) 정의의 첫 번째 줄: 이름, 매개변수, 그리고 함수인 경우 반환 타입 |
| 인터페이스(interface) | 하위程序(subroutine)를 사용하기 위해 호출 프로그램이 알아야 하는 내용: 이름, 매개변수(수, 순서, 타입), 반환 타입 |
| 반환 값(return value) | 함수가 호출한 식에 다시 전달하는 값 |
| 로컬 변수(local variable) | 하위程序(subroutine) 내부에서 선언됨; 하위程序(subroutine)가 실행되는 동안에만 존재하며 내부에서만 사용 가능 |
| 글로벌 변수(global variable) | 모든 하위程序(subroutine) 외부에서 선언됨; 프로그램 내 어디에서나 사용 가능 |
| 카운트 제어 루프(count-controlled loop) | 고정된 횟수만큼 반복되며, 카운터(FOR ... NEXT)에 의해 제어됨 |
| 전제 조건 루프(pre-condition loop) | 각 반복 시작 전에 조건을 검사하므로 본체가 절대 실행되지 않을 수 있음 (WHILE ... ENDWHILE) |
| 후방 조건 루프(post-condition loop) | 각 반복 완료 후에 조건을 검사하므로 본체가 최소 한 번은 실행됨 (REPEAT ... UNTIL) |
| 상수(constant) | 프로그램 실행 중 변경할 수 없는 명명된 값 |
| 하위程序(subroutine) | 과제를 수행하는 자체 독립적인 코드 블록으로, 이름으로 호출됨: 프로시저 또는 함수 |
| 라이브러리 routine | 이미 작성되고 테스트되어 프로그램에서 호출할 수 있는 하위程序(subroutine) |
| English | 한국어 |
|---|---|
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | 카운트 제어 반복문 |
| pre-condition loop/priː kənˈdɪʃn luːp/ | 전제 조건 반복문 |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | 후위 조건 반복문 |
11.3
시험 팁
- 프로시저(반환 값 없음)와 함수(값 반환)를 구분하고, value 전달 vs reference 전달을 숙지해야 합니다.
- 적절한 루프 선택: 반복 횟수가 알려졌을 때는 카운트 제어(FOR), 그렇지 않을 때는 조건 제어(WHILE/REPEAT) 를 사용하십시오.
- 로컬 vs 글로벌 변수와 스코프(scope)를 구분하고, 재사용 가능한 모듈에서는 로컬 변수를 선호하십시오.
- 삽입(insert)의 정확한 routine명과 매개변수 순서를 사용하십시오.
VAL와STR는 IGCSE 용어이며 채점이 안 되며,UCASE와LCASE는 Pseudocode Guide의 실제 9618 routine이지만 한 문자(one character) 에만 작용하므로 Paper 2에서는 전체 문자열에TO_UPPER또는TO_LOWER가 필요합니다. - "가변식 작성(write pseudocode)" 문제의 답안에는 헤더, 선언, 루프, 조건, 업데이트, 그리고
RETURN이 각각 1점을 부여받습니다: 한 부분이 확실치 않더라도 여섯 부분 모두 작성하십시오.
흔한 실수
- 함수를 호출하고 반환된 값을 사용하지 않음. 결과를 할당하거나 식(output)이나 출력(output)에서 사용하십시오:
Sorted ← BubbleSort(MyArray, 7). - 길이 1을 넘겨줌: 7개의 요소가 있는 배열에 대해
6, 혹은 길이를 요청했을 때 마지막 인덱스. 매개변수가 길이인지 인덱인지 결정하고, 마지막 요소가 방문되었는지 확인하십시오. - 파일을 읽는 루프 내부에서 파일을 닫음. 한 번 열고, 루프 이후에 한 번 닫으십시오.
- 입력값을 파일명으로 직접 사용함. 문제가 제시한 확장자를 추가하십시오:
FileName ← Choice & ".txt". - 구조체(construct)를 열려 있게 두는 것. 모든
IF에는 그ENDIF이 필요하고, 모든FOR에는 그NEXT이 필요하며, 모든WHILE에는 그ENDWHILE이 필요하고, 모든 함수에는 그RETURN이 필요합니다; 이 방식은 이에 대한 채점이 있습니다. - 경계 조건 오류: "최소(at least)"를 의미하는
>(이는>=에 해당) 또는,[1:50]로 선언된 배열에 대해0에서 시작하는FOR사용. - A counter or total that is never set to
0before the loop. - 추적 표(trace table)에서 매 행에 모든 변수를 다시 적거나, 값을 변경하는 문장이 실행되기 전에 값을 변경하는 것입니다.
- 조건식(conditional)의 절반만 사용하는 것:
IF x = 3 OR 4—OR과AND의 양쪽 모두 완전한 비교여야 합니다. 그리고+은 문자열을 연결하지 않으며,&가 연결합니다. - 호출 간에 존재해야 할 값을 로컬로 선언하는 것. 누적 합계나 여러 호출에 걸쳐 구축되는 문자열은 글로벌이거나
BYREF이어야 합니다.
| English | 한국어 |
|---|---|
| insert/ˈɪnsɜːt/ | insert: 삽입 |
| parameters/pəˈræmɪtəz/ | parameters: 매개변수 |
| program library/ˈprəʊɡræm ˈlaɪbrəri/ | 프로그램 라이브러리 |
이 주제에 대한 인터랙티브 수업
즉시 체크 기능 exercises를 통해 단계별로 진행하세요.