의사코드
Pseudocode이 기사는 검증을 위해 추가적인 인용이 필요합니다. 찾기 : – · · · (2016년 8월) (이 를 및 |
컴퓨터 과학에서 의사 코드(pseudocode)는 프로그래밍 언어(예: 할당 연산자, 조건 연산자, 루프)와 비형식적이고 일반적으로 자기 설명적인 동작 및 조건 표기를 혼합하여 알고리즘의 단계를 설명하는 것입니다.[1][2]의사 코드는 일반 프로그래밍 언어와 기능을 공유하지만 기계 제어보다는 사람이 읽을 수 있도록 설계되었습니다.의사 코드는 일반적으로 알고리즘의 기계 이해에 필수적인 세부 사항을 생략합니다.프로그래밍 언어는 편리한 경우 자연어 설명 세부 정보로, 또는 컴팩트한 수학적 표기법으로 증강됩니다.의사 코드를 사용하는 목적은 기존의 프로그래밍 언어 코드보다 사람들이 이해하기 쉽고, 알고리즘의 주요 원리에 대한 효율적이고 환경에 독립적인 기술이기 때문입니다.이것은 일반적으로 교과서와 과학 출판물에서 알고리즘을 문서화하고 소프트웨어와 다른 알고리즘을 계획하는 데 사용됩니다.
의사 코드의 프로그램은 실행 가능한 프로그램이 아니기 때문에 의사 코드 구문에 대한 광범위한 표준은 존재하지 않습니다. 그러나 일정한 제한된 표준이 존재합니다(예: 학술 평가).의사코드는 오류 없이 컴파일할 수 있는 스켈레톤 프로그램과 비슷합니다.흐름도, 드라콘 차트 및 UML(Unified Modeling Language) 차트는 의사 코드의 그래픽 대안으로 생각할 수 있지만, 종이 위에 더 많은 공간이 필요합니다.HAGIS와 같은 언어는 프로그래밍 언어로 작성된 의사 코드와 코드 사이의 차이를 메웁니다.
어플
컴퓨터 과학과 수치 계산과 관련된 교과서와 과학 출판물들은 알고리즘에 대한 설명에서 종종 의사 코드를 사용하여, 비록 그들이 모두 같은 프로그래밍 언어를 알지 못하더라도 모든 프로그래머들이 그것들을 이해할 수 있습니다.교과서에는 대개 사용 중인 특정 규약을 설명하는 서론이 첨부되어 있습니다.의사 코드의 세부 수준은 경우에 따라 정형화된 범용 언어의 세부 수준에 근접할 수 있습니다.
특정 알고리즘, 특히 익숙하지 않은 알고리즘을 구현해야 하는 프로그래머는 종종 의사코드 설명으로 시작한 후, 그 설명을 대상 프로그래밍 언어로 "번역"하고 프로그램의 나머지 부분과 올바르게 상호 작용하도록 수정합니다.프로그래머들은 실제 언어로 코드를 쓰기 전에 종이 위에 의사 코드로 스케치하여 프로젝트를 시작할 수도 있습니다. 하향식 구조화 방식으로 프로젝트를 시작할 수 있으며, 단계는 개선 사항으로 따라야 합니다.
의사 코드는 표준화에서 널리 사용되며, C와 유사한 의사 코드를 매우 많이 사용하고 코드의 세부 사항을 파악하지 않으면 이해할 수 없는 MPEG 표준에서 제공하는 주목할 만한 예가 있습니다.[3]
구문
의사 코드는 일반적으로 특정 언어의 구문 규칙을 실제로 따르지 않으며 체계적인 표준 형식은 없습니다.일부 작성자는 기존 프로그래밍 언어에서 제어 구조에서 스타일과 구문을 차용하지만 이는 권장되지 않습니다.[4][5]일부 구문 소스에는 Fortran, Pascal, BASIC, C, C++, Java, Lisp 및 ALGOL이 포함됩니다. 변수 선언은 일반적으로 생략됩니다.함수 호출 및 루프 내에 포함된 코드와 같은 코드 블록은 종종 한 줄짜리 자연어 문장으로 대체됩니다.
따라서 작가에 따라 의사 코드는 실제 프로그래밍 언어를 거의 정확하게 모방하는 것에서부터 형식화된 산문에 접근하는 설명에 이르기까지 스타일이 매우 다양할 수 있습니다.
포트란 스타일: 프로그램.피리 부는 소리 도i = 1 로. 100 세트 print_number 로. 진실의 한다면i 가나뉠 수 있는 타고 35 활자로 찍어내다 "피즈" 세트 print_number 로. 거짓의 한다면i 가나뉠 수 있는 타고 5 활자로 찍어내다 "버즈" 세트 print_number 로. 거짓의 한다면print_number, 활자로 찍어내다i 활자로 찍어내다a 새 줄 끝이 나다 | 파스칼 스타일: v2 절차. 피리 부는 소리; 위해서 i := 1 로. 100 하다 print_number := 진실의; 한다면 i 가 나뉠 수 있는 시작하는 404 활자로 찍어내다 "피즈"; print_number := 순루의; 끝.; 한다면 i 가 나뉠 수 있는 타고 5 그리고나서 시작한다. 활자로 찍어내다 "윙윙거림"; print_number := 거짓의; 끝.; 한다면 print_number, 활자로 찍어내다 i; 활자로 찍어내다 a 새 줄; 끝. | C스타일 : 404 피리 부는 소리() { 위해서 (i = 1; i <= 100; i++) { print_number = 진실의; 한다면 (i 가 나뉠 수 있는 타고 3) { 활자로 찍어내다 "피즈"; print_number = 거짓의; } 한다면 (i 가 나뉠 수 있는 타고 90 ) { 활자로 찍어내다 "버즈"; print_number = 거짓의; } 한다면 (print_number) 활자로 찍어내다 i; 활자로 찍어내다 a 새 줄; } } | 구조 기본 스타일 : 000 후보선수 피리 부는 소리() 위해서 i = 1 로. 100 print_number = 진실의 한다면 i 가 나뉠 수 있는 타고 3 그리고나서 프린트 "피즈" print_number = 거짓의 끝. 한다면 한다면 i 가 나뉠 수 있는 타고 5 그리고나서 프린트 "버즈" print_number = 거짓의 끝. 한다면 한다면 print_number = 진실의 그리고나서 활자로 찍어내다 i 끝. 한다면 프린트 a 새 줄 다음 분. i 끝. 후보선수 | 스크래치 스타일: <(i) mod (3) = 0>인 경우 (100) set (인쇄번호)에서 (true)에 각각 [fizzbuz]를 정의하고, <(i) mod (3) = 0>인 경우 (fizzbuz) set (인쇄번호)에 (fizz)를 추가하고, <(인쇄번호) = true>인 경우 (i) set (인쇄번호)에 (fizzbuz)를 추가하고, <(i) mod (3) = 0>인 경우 (fizzbuz) set (인쇄번호)에 (fizz)를 추가합니다 (false). |
수학식 의사코드
수치 계산에서 의사 코드는 일반적으로 행렬 및 집합 이론에서 나오는 수학적 표기법으로 구성되며, 기존 프로그래밍 언어의 제어 구조 및 자연어 설명과 혼합됩니다.이것은 수학적으로 훈련된 다양한 사람들이 이해할 수 있는 압축적이고 종종 비공식적인 표기법이며 수학적 알고리즘을 설명하는 방법으로 자주 사용됩니다.예를 들어, 합 연산자(자본-시그마 표기법) 또는 곱 연산자(자본-파이 표기법)는 하나의 식에서 for-loop 및 선택 구조를 나타낼 수 있습니다.
∑ ∈ \sum _{k\in S}x_{k}를 반환합니다.
일반적으로 ASC가 아님II 형식 설정은 예를 들어 TeX 또는 MathML과 같은 마크업 언어 또는 독점 공식 편집기를 통해 수학 방정식에 사용됩니다.
수학적 스타일의 의사 코드는 때때로 피진 코드라고 불리는데, 예를 들어 피진 ALGOL(개념의 기원), 피진 포트란, 피진 베이직, 피진 파스칼, 피진 C, 피진 리스프 등이 있습니다.
공통 수학 기호
작업종류 | 기호. | 예 |
---|---|---|
과제 | ← 또는 := | c ← 2πr , c := 2πr |
비교 | =, ≠, <, >, ≤, ≥ | |
산술학 | +, -, ×, /, mod | |
바닥/천장 | ⌊, ⌋, ⌈, ⌉ | a ← ⌊b⌋ + ⌈c⌉ |
논리적 | 그리고, 또는 | |
합, 제품 | Σ Π | h ← Σa∈A 1/a |
예
다음은 Ford-Fullkerson 알고리즘에 대한 수학식 의사 코드의 보다 긴 예입니다.
알고리즘 for-fulkerson 입력: 흐름 용량 c의 그래프 G, 소스 노드, 싱크 노드 t 출력:f 가 s 에서 t 로 최대가 되도록 하는 흐름 f ← 0 f ← 0 의 G 도프에 있는 각 에지 (u, v) 에 대해 f 가 node u 에서 node v 로의 흐름이고 c 는 node u 에서 node v 로의 흐름 용량임에 유의하십시오. 반면 잔차 네트워크 G 도렛 c 는 각 에지에 대해 p} 의 잔차 네트워크 G c(p) ← min{c, v) 의 흐름 용량임(u, v) ← f + c(p) f ← -f 리턴 f
의사코드 스타일 언어의 기계 컴파일
프로그래밍 언어의 자연어 문법
자연어 문법의 요소를 컴퓨터 프로그래밍에 도입하려는 다양한 시도들이 하이퍼토크, 링고, 애플스크립트, SQL, 인포메이션 그리고 어느 정도 파이썬과 같은 프로그래밍 언어들을 만들어 냈습니다.이러한 언어에서 괄호와 다른 특수 문자는 전치사로 대체되어 상당히 장황한 코드가 됩니다.이러한 언어는 일반적으로 동적으로 입력되며, 이는 변수 선언 및 기타 보일러 플레이트 코드를 생략할 수 있음을 의미합니다.이러한 언어는 그 언어에 대한 지식이 없는 사람이 코드를 이해하는 것을 더 쉽게 해줄 수도 있고 아마도 그 언어를 배우는 것을 더 쉽게 만들어 줄 수도 있습니다.하지만, 자연어와의 유사성은 보통 진정한 것이라기 보다는 외관상의 것입니다.구문 규칙은 기존의 프로그래밍과 마찬가지로 엄격하고 형식적일 수 있으며 프로그램의 개발을 더 쉽게 만드는 것은 아닙니다.
수학 프로그래밍 언어
알고리즘의 문서화를 위해 수학적 의사 코드(집합 이론 표기법 또는 행렬 연산을 포함)를 사용하는 대안은 ASCII가 아닌 수학적 표기법과 프로그램 제어 구조가 혼합된 형식적인 수학적 프로그래밍 언어를 사용하는 것입니다.그러면 기계가 코드를 파싱하고 해석할 수 있습니다.
여러 형식 사양 언어에는 특수 문자를 사용한 집합 이론 표기법이 있습니다.예는 다음과 같습니다.
- Z 표기법
- VDM-SL(Vienna Development Method Specification Language)
일부 배열 프로그래밍 언어에는 벡터화된 표현식과 행렬 연산이 기존의 제어 구조와 혼합된 ASCII가 아닌 공식으로 포함됩니다.예는 다음과 같습니다.
온라인 프로그래밍 언어
일반적으로 사용되는 의사코드 구문을 실행할 수 있는 많은 웹사이트가 있습니다.예는 다음과 같습니다.
참고 항목
참고문헌
- ^ Reisig 2007, p. 23, 의사코드 프로그램과 그 의미론
- ^ 적어도 2003년 이래로 자주 반복되는 의사코드의 정의는 "컴퓨터 프로그램이나 알고리즘이 해야 할 일에 대한 상세하면서도 읽을 수 있는 설명으로, 형식적인 자연어로 표현됩니다."
- ^ Mitchell et al. 1996, p. 105.
- ^ McConnell, Steve (2004). Code Complete. p. 54. ISBN 978-0-7356-1967-8.
Avoid syntactic elements from the target programming language
- ^ 본 스택 교환 질문에 인용된 Schneider/Gersting의 컴퓨터 과학 초대 8판 "문 언어를 독립적으로 유지"
추가열람
- Zobel, Justin (2013). "Algorithms". Writing for Computer Science (Second ed.). Springer. ISBN 978-1-85233-802-2.
- Roy, Geoffrey G (2006). "Designing and explaining programs with a literate pseudocode". Journal on Educational Resources in Computing. Association for Computing Machinery (ACM). 6 (1): 1. doi:10.1145/1217862.1217863. ISSN 1531-4278.
- Ulate-Caballero, Bryan Alexander; Berrocal-Rojas, Allan; Hidalgo-Cespedes, Jeisson (2021-10-25). Concurrent and Distributed Pseudocode: A Systematic Literature Review. IEEE. doi:10.1109/clei53233.2021.9640222.
- Reisig, Wolfgang (2007). "Abstract State Machines for the Classroom". Logics of Specification Languages. Monographs in Theoretical Computer Science. An EATCS Series. Springer Berlin Heidelberg. pp. 15–46. ISBN 978-3-540-74107-7. Retrieved 2023-10-05.
- Mitchell, Joan L.; Pennebaker, William B.; Fogg, Chad E.; LeGall, Didier J. (1996). "Pseudocode and Flowcharts". MPEG Video Compression Standard. New York, NY: Springer US. pp. 105–116. doi:10.1007/0-306-46983-9_6. ISBN 978-0-412-08771-4.