세자리수 컴퓨팅에서의 goto문

  • 문제점 : 스파게티 코드 (작성 및 해석의 어려움)
  • 해결방법 : 단일 입구, 단일 출구

문장 수준의 흐름제어

  • 순차구조(암시적 형태)
  • 선택구조(IF문)
  • 반복구조(For문)

구조화 프로그래밍

- 공간적 순서가 수행 순서임

- 계층적으로 설계 (반복문 안에 반복문...가능)

 

복합문 : 여러 문장이 모여 하나의 문장을 이룬 형태

ex) ALGOL60 : begin ... end/ C언어 : { } 

 

블록 : 새로운 선언을 포함할 수 있는 복합문

ex) Pascal : begin ... end (블록 지원 안함) / C : {중괄호} , 모든 복합문은 블록임 / python : 들여쓰기

 

선택문 : 둘 이상의 경로 중 하나 선택할 수 있는 제어문

- 양방향, 다중선택 (단방향선택 , 3방향 선택)

 

단방향 선택 : (else가 없는) if문 

양방향 선택 : (then, else가 있는) if문

 

문제점 : 선택문의 중첩

일반적인 해결책 : 짝이 없는 else문 발생 -> 가장 가까운 if문과 짝을 이루자!

-> pascal, C, c++, java

 

해결책 1 : 직접 중첩 금지

Perl에서 then절과 else절이 복합문 => 바깥 if문에 if,else문 포함

 

해결책 2 : 종결어 사용

end if, fi, end 사용

-> Fortran 90, Ada, Ruby

 

해결책 3 : 들여쓰기

-> 파이썬

 

 다중 선택 구조

  • 초기 다중 선택 구조(FORTRAN)
    • 중첩된 if문, goto문으로 만들 수 있음
    • 길고 복잡 비신뢰적임
  • C의 다중 선택구조 (c++,java에서도 채택됨)
    • swith-case문 - 정수형만 가능 
    • 해당하는 조건이 맞으면 그거부터 계속 실행함
    • break문으로 빠져나옴
  • Java의 continue문
    • 이 반복을 종료해서 그 다음 반복으로 가겠다는 의미
    • 해당 반복을 빠져나와서 첫번째 반복문에서 다시 검사를 시작함
  • Java의 label break문
    • 여러 반복문을 빠져나올 수 있음
    • goto 대신 사용함
    • ex) break outerloop; // outerloop명을 가진 루프를 벗어나겠다

 

 

사용자 정의 반복 제어

 

python vs c#,java

  • c#,java는 컴파일 언어로, 변수 타입 선언 필요
  • python는 계수기 변수를 선언하여 리스트 크기를 알아서 그 만큼 반복을 진행해야함
  • c#,java는 알아서 크기 계산해줌. 계수기 필요X

 

goto문 문제점 : 스파게티 코드

goto문이 유용한 예

중첩된 반복문!

- break문을 실행하면 이 반복을 정상종료하고 나온 것인지, break를 통해서 종료된 것인지 알 수 없음

- goto를 사용하면 이해하기 쉽게 할 수 있음

 

 

 

 

 

 

+ Recent posts