d라이브러리









퍼스널컴퓨터 교실⑦ 중첩구조와 배열의 분류

문제를 해결하기 위하여 프로그래밍을 하다보면 여러가지 구조를 갖는 프로그램문장(Program Statement)이 생기게 마련이다. 예를들면 FOR loop문 내에서 또다른 FOR loop문을 수행해야 하는 경우가 자주 있는데 일언 문장을 특히 중첩(nested) loop문이라고 한다.
 

이번호에서는 프로그램 문장의 중첩구조는 어떤 형태로 되어 있으며 지난호에서 배운 배열(arrays)은 어떤 방법으로 분류(sorting)하는지 알아보기로 하자.

 

중첩 Loop문


중첩된 loop(특히 중첩된 FOR loop)문은 아마 가장 복잡한 구조로, 프로그램을 작성하거나 읽고 수정하기가 매우 까다롭다 할 수 있겠다. 이해를 돕기 위해 (그림1)을 먼저 보기 바란다. 그림에서 단계3은 자체가 loop문인데, 이것은 바깥쪽loop를 매번 수행할 때마다 이 안쪽의 loop 전체를 수행한다는 뜻이다.
 

(그림1) 중첩 LOOP문으 흐름도


중첩 구조의 문장을 작성할 때 조심해야 할 점은 중첩하는 문장이 서로 겹치지(overlap) 않도록 하는 것인데 이를테면 (그림2)와 같이 겹쳐진 문장은 잘못된것이다.
 

(그림2) 잘못 작성된 중첩구조


(가)에서는 안쪽loop의 끝 (NEXTJ)이 바깥쪽loop의 끝(NEXT I)보다 앞에 있어야 하며 (나)의 ELSE는 (IF문이 허위인 경우 처리) FOR loop문 밖에 위치해야옳은것이다.
 

(보기1)

아래에 보인 프로그램은 FOR loop가 두번 중첩된 예를 설명하고 있다. 바깥쪽loop의 I가 각각 1, 2, 3일때 안쪽loop는 I의 값이 횟수만큼 프린트하는데 여러분은 이제 이프로그램을 읽을 수 있을 것이다.
 

(자료표)



20  A=1
30  PRINT " ", "I", "J"
40  FOR I=1 TO 3
50      PRINT "OUTER", I
60      FOR J=A TO I
70          PRINT "INNER", I, J
80      NEXT J
90  NEXT I
100 END
RUN

 
 
     I   J
OUTER  1
INNER   1  1
OUTER  2
INNER   2  1
INNER   2  2
OUTER  3
INNER   3  1
INNER   3  2
INNER   3  3


(문제1)

배열 F의 각 원소를 차례로 읽어서 그 값의 수만큼 별표를 프린트해서 막대그래프로만드는 프로그램을 작성해 보자.

만약 F(1)=2, F(2)=5이면 그래프는 다음과 같이 되어야 한다.

번호 원소의 값에 해당하는 별표
 

1  I **

2  I *****
 

(설명)

각 원소에 대한 처리는 바깥쪽loop로, 각 원소의 별표를 프린트하는 과정은 안쪽loop로 사용하는 점에 착안하면 되겠다.
 

(그림3) 문제1의 프로그램과 결과

 

복수 선택 판단문


지금까지 우리가 다루었던 판단문(IF문)은 대개 1~2개의 조건(conditions) 중에서 하나를 선택하거나 판단문이 중첩되는 형태로 사용된다. 여러분의 이해를 돕기 위해 먼저 복수선택 판단문(multiple alternative decision stucture)의 흐름도와 그 예인 (그림4)를 보기 바란다.

 

(그림4) 복수선택 판단문의 흐름도와 그 예


이 흐름도에서 여러분은 프로그램이 다음과 같이 실행된다는 것을 알 수 있을 것이다.
 

(1) 판단문 내의 조건(마름모꼴 부분)은 위에서부터 아래로 한 가지씩 조사 된다.

(2) 만약 조건(i)가 참이라면 (위에서 부터 첫번째 참인 경우) 처리(i)를 실행한 후 곧바로 출구를 빠져나간다.

(3) 만약 참인 경우가 하나도 없으면 처리 (D)를 실행한다.
 

또한 (그림5)에는 판단문이 여러번 중첩된 예를 보였는데 이것은 좀더 복잡해보이지만 실제로 많이 사용되므로 그 사용법을 잘 익혀 두기 바란다.
 

(그림5) 중첩된 판단문(IF)의 예


그럼, 이번에는 판단문(IF문)을 사용하지 않고 다음 실행할 프로그램 문장을 선택하는 방법을 소개하겠다. 이것은 ON-GOTO문으로서 어느 정해진 값을 계산하여 그 결과에 따라서 다음 실행할 문장을 결정하는데, 판단문에 비해서 처리속도가 더 빠르다.

 

ON-GOTO 문


(보기2) ON-GOTO문의 사용


(보기2) ON-GOTO문의 사용


이 프로그램에서 문번호 110-145 까지는 문제를 제시하고 150번에서 정답을 입력한다. 이 정답에 따라서(1, 2, 3) 문번호 180, 220, 260중 하나가 결정되는 것이다. W는 틀린사람의 수, R은 정답을 맞힌 사람의 수를 표시하며 290번 문이 실행된후에는 바로 그다음의 문장으로 계속된다.

ON-GOTO문과 비슷한 기능을 하는 것으로 또한 ON-GOSUB가 있다. 이 명령어의 다른점은 다음과 같다.
 

1) 문번호 목록에 표시한 서브루틴 중 하나를 선택하여 실행이 계속된다.

2) 서브루틴을 다 실행한 후에는 ON-GOSUB문의 바로 다음 문장부터 계속된다.
 

(보기3)

다음에서 E=2이면 2000번에 있는 서브루틴에서 부터 계속된다.

ON E GOSUB 1000, 2000, 3000

 

배열(array) 분류하기(sorting)


배열(aray)에 대해서는 지난 호에서 상세히 공부하였는데 다시한번 복습하면, 아래와 같은 배열에서 배열명은 M, 원소는 5개이며 첫번째 원소는 60, 두번째 원소는42, …이다. 또M(1), M(2)와 같이 ( )안에 표시한 숫자는 몇 번째 원소인가를 나타내는 것으로서 첨자(subscripts)라고 하였다.

 

배열(array) 분류하기(sorting)


그런데 이 그림에서 보는 것처럼 이 배열의 원소들은 크기 순서대로 나열되어 있지 않다. 그렇다면 이 원소들을 크기순으로 나열할 수 있는 방법은 없을까?
 

이와 같이 배열의 원소들을 크기의 순서나 또는 종류가 같은 것끼리 다시 나열하는 것을 분류한다(sorting)고 하며 프로그램에서 많이 사용되는 중요한 기법중의 하나이다.
 

원소의 크기순으로 분류하는 경우에, 작은 것 부터 큰 것의 순으로 하는 것을 오름차순(ascending order)분류라고 하며 그반대의 순으로 하는 것을 내림차순(descending order)분류라고 한다.
 

(그림6) 버블분류의 과정


(문제2) 분류(sorting)프로그램

원소가 정수이고 크기의 순서에 관계없이 나열된 배열(array) 이 있다. 이것을 오름차순으로 분류할 수 있는 프로그램을 작성 해 보자. 이프로그램을 적절히 응용하면 유사한 목적으로 분류하는 업무에도 적용할 수 있을 것이다.
 

(설명)

분류를 하기 위한 알고리즘(algorithms)은 여러가지가 있을 수 있는데 여기에서는가장 간단한 '버블(bubble)'분류에 대해서 알아보기로 한다.

이것은 자장 값이 작은 자료를 순서의 맨끝쪽으로 보내는 성질이 있는데 그래서 '버블'이란 이름을 갖게 되었다. 그러면 버블분류란 어떤 방법으로 하는 것인지 아래의 (그림6)을 통해서 설명하겠다.
 

1) ①은 배열의 처음 상태이다.

그런데 처음 한쌍의 원소는 서로 바뀌어있으므로(즉 큰 값이 앞에, 작은 값이 뒤에 있으므로) 순서를 교환하여야 한다. 그 결과는 ②이다.

2) M(2)가 M(3)보다 작으므로 순서의 교환이 없다.

3) 그래서 이번에는 M(3)과 M(4)를 비교하는데 M(4)가 M(3)보다 작으므로순서를 교환한다. (②와 ③)

4) 이번에는 M(4)와 M(5)를 비교해서 M(5)가 M(4)보다 작으므로 순서를 교환 하는데(③과 ④) 여기까지가 1단계이다.

5) 다시 처음 한 쌍의 원소부터 시작하여 1)~4)를 반복한다. 만약 순서를 교환할 원소가 하나도 없는 단계이면 끝마친다.

(그림7) 문제2의 흐름도
 

(그림7) 문제2의 흐름도


(그림8) 그림7의 단계를 구체화 한것


​(그림8) 그림7의 단계를 구체화 한것


(그림9) 문제2의 주(main)프로그램과 서브루틴


(그림10) 문제2의 서브루틴과 결과

 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1987년 02월 과학동아 정보

  • 전문철 연구원

🎓️ 진로 추천

  • 컴퓨터공학
  • 소프트웨어공학
  • 정보·통신공학
이 기사를 읽은 분이 본
다른 인기기사는?