본문 바로가기

컴퓨터/언어,프로그래밍

순서도의 의의와 역할

순서도의 의의와 역할

  • 순서도의 의의

    컴퓨터에 의해 처리하고자 하는 문제를 분석하여 그 처리 순서를 단계화시켜 상호간의 관계를 일정한 기호 를 사용하여 일목 요연하게나타낸 그림을 순서도라 한다.
    순서도는 사무 간소화나 작업 합리화를 위해 우리 사회에 많이 사용되어 오고 있지만 특히 컴퓨터에 의해 어떤 업무를 처리하기 위해서는 이 도표가 없어서는 안될 만큼 중요시 되고 있다. 그것은 프로그램을 작성하는데 있어서 문제 해결을 위한 논리적인 순서만 완전히 수립되면 컴퓨터 언어를 이용하여 코오딩하는 등의 나머지 작업은 대수롭지 않은 것이기 때문이다. 또한 프로그램 의 형태는 컴퓨터 기종이나 컴퓨터 언어에 따라 다르지만 이것을 유도하는 논리적인 방식에는 차이가 없어 완성된 순서도는 모든 컴퓨터에 적용될 수 있기 때문에 순서도가 업무를 처리하는데 있어서 가장 중요한 자료가 되기도 한다. 이처럼 컴퓨터에 있 어서 순서도는 프로그램을 작성하는 경우 무엇보다도 처리의 순서나 흐름이 중요하므로 이 순서도를 얼마나 잘 작성하느냐 하는 것은 곧 얼마나 우수한 프로그램이 되느냐 하는 문제 해결의 열쇠가 되는 것이다.

  • 일반적인 순서도의 역할

  1. 프로그램 코딩의 기초가 된다.

    전산처리되는 업무는 대개가 복잡하여 하루 이틀에 프로그래밍이 끝나지는 않는다. 이렇게 복잡한 업무를 순서도를 작성하지 않 고 직접 컴퓨터 언어를 이용하여 코오딩한다는 것은 무리가 따르며, 설사 코오딩이 이루어진다 해도 정확성이 없고 최대한의 능력을 발휘할 수도 없다. 이것은 초안없이 원고를 작성하는 것과 같은 불안이 따르기 때문에 반드시 순서도에 의한 코오딩이 이루 어져야 한다.

  2. 타인에게 전달하기 용이하다.

    이미 개발된 업무를 다른 사람에게 인계할 때나 매우 중요한 업무에서 경영자 등의 여러 인원에게 업무의 내용을 이해시킬 경우 도표로된 순서도를 그 자료로 사용함이 다른 자료보다 이해도가 빠르고 문제 처리의 과정을 한눈에 파악할 수 있다.

  3. 디버깅(debugging)이 용이하다.

    디버깅이란 프로그램이 완전한 것이 될 때까지 프로그램상에 있는 에러를 수정하는 작업으로 프로그램 작성에 있어서 가장 중요 한 단계이기도 하다. 시급히 요구되는 결과표를 눈앞에 두고 에러 때문에 처리 못하는 처지를 상상만 해도 알 수 있을 것이다. 순서도는 논리적인 체계를 순서에 의해 도표로 나타낸 것이기에 언어의 규칙에 따라 코오딩된 프로그램보다 정확성이 높고, 또 이해하기 빠르다는 것은 두말할 필요가 없다. 따라서 테스트 런(test run) 결과 어레가 발생할 때는 순서도를 검토 확인해서 수 정하는 것이 업무 처리에 효율적이다.

  4. 프로그램 보관시 자료가 된다.

    이미 개발된 시스템을 잘 보존하기 위해서는 프로그램의 보존이 필수적으로 따라야 하는데, 이때 카아드 덱(card deck)이나 테 이프화된 프로그램만을 보관하는 것은 원본이 없는 서류를 보관하는 것과 흡사하다. 그러므로 언어나 기종에 구애받지 않는 순서 도를 보관하여 어떠한 경우에도 완전하도록 대처해야 한다.
    이상의 순서도의 역할을 미루어 볼 때 순서도를 작성한다는 것은 프로그래밍에 있어서 가장 중요한 위치를 차지한다고 볼 수 있다.



순서도의 종류

  • 순서도의 기호와 그 사용 예

    컴퓨터 처리에 있어서 사용되는 순서도는 일반적으로 표시 정도의 세분도에 의하여 구분되며, 크게 시스템 플로우챠트(system flowchart)와 프로그램 플로우챠트(program flowchart) 두 종류로 나누어진다.
    시스템 플로우챠트는 자료의 흐름을 중심으로하여 시스템 전체의 작업 내용을 총괄적으로 도시한 것을 말하며 주로 시스템 분석 가가 시스템 설계나 분석을 할 때에 작성된다.
    프로그램 플로우챠트는 시스템 전체의 작업, 즉 시스템 플로우챠트 중에서 컴퓨터 처리를 하는 부분을 중심으로 자료 처리에 필 요한 모든 조작의 순서를 도시한 것으로서 주로 프로그래머가 작성하게 된다.

  1. 순서도의 기호

    순서도는 원래 프로그램 작성을 위한 안내자 역할을 하기 때문에 작성자 자신만이 이해하고 사용하는 자신의 전용물로만 생각해서는 안된다. 그러므로 자신의 작업 능률을 높이는 목적 이외에 작업에 관계되는 모든 사람이 이해할 수 있고 누구나 식별할 수 있는 일정한 기호를 사용하는 것이 좋다.
    여기서는 국제 표준화 기구(International Organization for Standardization)에서 추천한 기호를 소개한다.

    단말(terminal)

    시작, , 중단 등과 같은 것을 나타내는 기호이다.

    천공 카아드(punched card)

    입출력 매개체가 천공된 카아드임을 나타내는 기호이다.

    입출력(input/output)

    일반적인 입력과 출력 처리를 나타내는 기호이다.

    서류(document)

    각종 원시 데이터가 기록된 서류나 종이 매체에 출력되는 결과 및 문서화된 각종 서류를 나타내는 기호이다.

    종이 테이프(paper tape)

    종이로 된 천공 테이프 매체에 의한 입력과 출력을 나타내는 기호이다.

    자기 테이프(magnetic tape)

    자기 테이프 매체에 의한 입력과 출력을 나태는 기호이다.

    자기 디스크(magnetic disk)

    자기 디스크 매체에 의한 입력과 출력을 나태는 기호이다.

    자기 드럼(magnetic drum)

    자기 드럼 매체에 의한 입력과 출력을 나태는 기호이다.

    디스켓(diskette)

    지정된 작동, 각종 연산, 값이나 기억 장소의 변화, 데이터의 이동 등 모든 처리를 나타내는 기호이다.

    처리(process)

    지정된 작동, 각종 연산, 값이나 기억 장소의 변화, 데이터의 이동 등 모든 처리를 나타내는 기호이다.

    표시(display)

    결과나 필요한 메시지를 온라인으로 연결된 영상표시 장치, 콘솔 등에 출력하는 것을 나타내는 기호이다.

    준비(preparation)

    기억 장소의 할당, 초기값 설정 등의 준비 작업을 나타내는 기호이다.

    비교 판단(decision)

    주어진 조건과 비교하여 해당되는 조건을 찾아서 흐름이 결정되게 할 때 사용되는 기호이다.

    연결(connector)

    주어진 조건과 비교하여 해당되는 조건을 찾아서 흐름이 결정되게 할 때 사용되는 기호이다.

    흐름 방향(flow direction)

    처리의 흐름을 표시하는데 사용되는 기호이며, 위에서 아래로 혹은 왼족에서 오른족으로가 아닌 경우 화살표가 필요하다.

    주석(annotation)

    기능을 좀더 알기 쉽게 부가적인 설명이 필요할 때 사용되는 기호이다.

    페이지 연결(page connector)

    순서도가 다음 페이지로 연결되어 사용되고 있다는 것을 나타내는 기호이다.

    정의된 처리(predetermined process)

    이미 다른 순서도에서 정의되고 명령된 처리 순서나 방법을 다시 처리할 필요가 없을 때 사용하는 기호이다.

    수작업(manual operation)

    사람의 손으로 조작되는 각종 데이터 처리 작업을 나타내는 기호이다.

    보조 작업(auxiliary operation)

    중앙 연산 처리 장치의 통제를 직접 받지 않는 장치에서 행해지는 작업을 나타내는 기호이다.

    통신 연결(communication link)

    통신을 이용한 정보의 전송 기능을 나타내는 기호이다.

    오프라인 저장(off-line storage)

    정보나 자료를 컴퓨터 외부 저장시켜 두는 기능을 나타내는 기호이다.

    병합(merge)

    정렬된 두 개 이상의 파일을 하나로 합치는 작업을 나타내는 기호이다.

    추출(extract)

    만들어진 파일—서 필요한 부분만을 분리하여 새로운 파일을 만드는 작업을 나타내는 기호이다.

    수작업 입력(manual input)

    컴퓨터 내부에서 처리되는 중에 키보드 또는 스위치 등의 수작업 방법에 의해 필요한 정보를 넣어서 입력하는 기능을 나타내는 기호이다.

    온라인 저장(on-line storage)


    온라인으로 접근 가능한 각종 보조 기억 장치에 의한 입출력 기능을 나타내는 기호이다
    .

    분류(sort)

    일정한 순서없이 배열된 데이터를 일정한 기준에 따라 순서대로 배열하는 작업을 나타내는 기호이다
    .

    템플리트(template): 순서도를 작성하는 경우 이들 기호의 규격을 통일하여 쉽게 순서도를 작성할 수 있도록 하기 위해 사용되는 자로서, 여기에는 자주 사용되는 순서도 기호가 새겨져 있다.

  2. 자주 쓰이는 순서도 기호 사용 예

    단말(terminal) 작업의 시작과 끝을 나타내는 기호이므로 다음과 같은 요령으로 사용된다.


    준비(preparation) 작업을 하기 위한 준비로 필요한 기억 장소의 확보 및 배열(array) 확보 또는 초기치를 정해주는데 사용된다.


    입출력(I/O symbol)

    처리(process) 자료의 이동 또는 연산 내용을 기호 내에 서술한다.


    비교 판단(decision)

  3. 몇가지 알아두면 좋은 사항

    기억 장소 내용의 교환
    기억 장소 A의 내용과 B의 내용을 바꾸려 할 경우 예1)의 경우는 결과적으로 A,B 모두 B의 초기치를 갖게 된다. 그 결과를 보완 한 것이 예2)와 같다.

    기억 장소 A의 내용을 1씩 증가시키는 요령
    A A+1
    의 정의는 기억 장소 A의 값과 1을 합하여 얻어진 값을 다시 기억 장소 A에 저장시킴을 의미한다. A의 값이 기존값에 비해 1 증가된 결과가 된다. 이를 반복 수행하면 A1씩 증가하기를 한없이 수행한다. 이를 무한 루우핑(looping)이라 한다. A가 초 기치 0을 갖고 있었다면 A값은 1부터 계속 증가될 것이다. 또한 순서도는 시작과 끝이 반드시 존재해야 하기 때문에 위의 형태는 옳지 않다. A값을 1부터 100까지 변화시키기 위한 기본 형태는 다음과 같이 보완될 수 있다.

    위의 순서도는 단지 A값을 변화시켜 본 것에 불과하나 변화되는 A값을 찍기 위해 출력 명령을 다음a, b와 같이 추가했을 때 결 과는 어떤가를 생각해 보라.

    순서도 a에서 출력 지시는 단 1회에 국한되나 b의 경우 A값을 출력하는 명령은 조건을 만족할 때까지 반복함을 알 수 있다.

    두 가지 작업의 교대 수행
    지금 한 번은 작업 a를 다음번에는 작업 b를 하기를 반복하려고 한다. 다음 순서도는 조건을 만족할 때까지 이를 수행할 것이다 .

    그러나 이를 수행하기 위한 다음 방식은 오히려 복잡하여도 그 기법을 알고 있으면 응용 범위는 넓힐 수 있다.


[복습 예제]

  • 순차 구조

    그림 6-2 순차구조

    순 차구조는 처리하는 방법이 하나하나 순서적으로 처리되는 것을 말합니다. 순차구조는 일방 처리구조라고 볼 수 있습니다. 일반적으로 프로그램을 짤 때 step by step으로, step, step. step by step으로 가는 것을 sequence structure. , 순차구조라고 이야기합니다. 별것 아닌 것 같지만, 이것은 굉장히 중요한 구조입니다. 그림 6-2에서 보듯이 Command1 다음에 Command2를 순서적으로 수행하는 것을 의미합니다. 프로그래밍에 가장 기본적이 구조라고 볼수 있습니다.


  • 분기 구조

    분기 구조는 조건에 따라서 서로 다른 항목들을 수행하는 부분을 의미합니다. 그림 6-3은 분기구조를 보여줍니다.

    그림 6-3 분기구조

    마름모로 되어 있는 곳에서 비교를 해서 맞으면(Yes) command2를 실행하고, 비교를 해서 틀리면 (No) command1을 실행합니다. 그림6-3을 소스로 다시 작성해 보면,

void main()
{

   if(comp)
   {
     command2;
   }
   else
   {
      command1;
   }
}

과 같이 쓸 수 있습니다. if를해서 comp라는 (compare의 약자) 조건에 맞으면 command2를 실행하고, 이 조건에 맞지 않으면 command1을 실행하라는 의미가 됩니다. 순서도 하나, 하나를 이렇게 C언어로 옮겨주고, C언어와 순서도를 동시에 그림으로 느낄 수 있는 버릇들을 들이게 되면 앞으로 프로그램밍을 하시는데 많은 도움이 되시리라고 생각합니다. 여러분들은 앞으로 어떤 프로그램 구조를 순서도로 만들고 나서 ‘이것이 코딩이 되면 실제 소스는 이렇게 될 것이다.‘라고 느껴져야만 됩니다. 객체지향(Object-Oriented Programming) 프로그램에서 순서도가 필요 없을 것 같다고 생각하는 사람들도 있을 것입니다. 하지만 그것은 위험한 생각입이다. 객체지향 프로그램에서는 모듈 안에 순서도들은 항상 포함됩니다. 그래서, 그 객체의 메소드(객체의 안에 구동되는 내용)들은 순서도로 설명하는 것이 가장 좋습니다. 다시 한번 강조하지만, 순서도와 소스를 동시에 머릿속으로 그릴 수 있는 연습을 하도록 노력하시기 바랍니다.

  • 다중 분기

    그림 6-4 다중 분기 구조

    start terminal에서부터 비교(comp)를 해서 case1일 경우, case2일 경우, case3일 경우를 (이때는 원래 마름모꼴을 쓰지 않고 다른 기호를 쓰기도 하지만 중요한 것은 이렇게 봐도 알아 볼 수도 있으니까 아까 말했던 5가지 기호만 가지고 설명을 드리는 것입니다.) switch문을 이용해서 case1일 때는 command1을 실행하고, case2일 경우에는 command2를 실행하고, case3일 경우 command3을 실행하라는 의미입니다. 이것을 소스로 나타내 보면,


void main()
{

  switch(comp)
  {
    case1;
          command1;
          break;

    case2;
          command2;
          break;

    case3;
          command3;
          break;
  }
}

과 같이 됩니다.

이 렇게 순서도를 보면서, 이런 소스가 머릿속에 동시에 떠오르십니까? 아직 안되었더라도 걱정하지 마세요. 시간은 충분히 있습니다. 연습을 하면서도 틀리더라도 될 수 있으면 책을 안보고 하는 것이 좋습니다. 그래야 프로그래밍 구조를 배울 수가 있고, 그렇게 그려진 구조대로 프로그래밍을 할 수가 있습니다. 물론, 처음부터 이렇게 되는 것은 아니지만, 자꾸 양쪽으로 생각하려고 노력하면서 보면 나도 모르게 어느 샌가 그런 구조화적인 프로그램의 개념을 느낄 수 있으실 것입니다.


[3개 이상의 case를 갖는 switch문]

사용자 삽입 이미지

출처 :http://mgoons.tistory.com/34





제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...