키랴노프 티모페이 페도로비치

회로의 한 요소로 표시되는 기본 연산 외에 주요 알고리즘 구성은 대체 실행 및 주기입니다. 두 가지 대체 프로그래밍 옵션이 있으며 세 가지 주요 사이클 유형이 있습니다.

조건부 실행 코드

일부 작업에는 다음이 적용될 수 있습니다. 조건 연산자. 그런 다음 이 조건이 참인 경우에만 실행됩니다.

만약에<условие>
그 다음에
<действия>
모두

대안

순서도에서 조건 테스트는 대체 작업을 선택하기 위한 원칙으로 사용될 수 있습니다. 즉, 조건이 참이면 한 궤적을 따라 실행되고 거짓이면 다른 궤적을 따라 실행됩니다. KuMir 언어에서 전제 조건이 있는 루프의 형식은 다음과 같습니다.

만약에<условие>
그 다음에
<действия>
그렇지 않으면
<альтернативные действия>
모두


로봇의 조건:
왼쪽 벽
오른쪽 벽
바닥 벽
상단 벽
셀이 음영 처리됨
무료로 남겨둔
바로 무료
바닥 느슨한
탑 느슨한
케이지 청소

전제 조건이 있는 루프

전제 조건이 있는 루프는 시작 전에 지정된 일부 조건이 true인 동안 실행되는 루프입니다. 이 조건은 루프 본문이 실행되기 전에 확인되므로 본문이 한 번도 실행되지 않을 수 있습니다(처음부터 조건이 false인 경우). 대부분의 절차적 프로그래밍 언어에서는 while 문으로 구현되므로 두 번째 이름은 while 루프입니다. KuMir 언어에서 전제 조건이 있는 루프의 형식은 다음과 같습니다.

안녕<условие>
<тело цикла>
kts

사후 조건이 있는 루프

사후 조건이 있는 루프는 루프 본문이 실행된 후 조건이 확인되는 루프입니다. 본문은 항상 적어도 한 번은 실행됩니다. 파스칼에서 이 루프는 repeat..until 연산자로 구현되지만 C에서는 do...while 입니다.
KuMir 언어에서 사후 조건이 있는 루프의 형식은 다음과 같습니다.

체크 안함
<тело цикла>
cc_at<условие>

카운터가 있는 루프

카운터가 있는 루프는 일부 변수가 주어진 초기 값에서 일부 단계를 거쳐 최종 값으로 값을 변경하고 이 변수의 각 값에 대해 루프 본문이 한 번 실행되는 루프입니다. 대부분의 절차적 프로그래밍 언어에서는 연산자에 의해 구현됩니다. ~을 위한, 카운터(소위 " 루프 변수”), 필요한 패스 수(또는 카운터의 한계값), 그리고 가능하면 카운터가 변경되는 단계. KuMir 언어에서 카운터가 있는 주기의 형식은 다음과 같습니다.

전부의
nc 0에서 9까지
... 루프 본체
kts

다른 프로그래밍 언어에서는 이 변수가 카운터로 사용된 루프의 끝에서 변수 값에 대한 질문이 다르게 해결됩니다.

프로그래밍의 기본을 마스터하는 Kumir 프로그램에 대해 알고 있습니다.

여기에서 학생들은 Robot, Draftsman, Aquarius, Grasshopper, Turtle과 같은 연주자와 함께 작업하여 알고리즘을 만들고 디버깅하는 실용적인 기술을 습득할 수 있습니다.

컴퓨터 과학의 가장 어려운 부분 중 하나인 "알고리즘과 프로그래밍"을 공부할 때.

개발 목적 :

다운로드:


시사:

정보학의 체계적인 개발.

주제: "정보학 수업에서 KuMir 프로그램의 로봇 수행자"

기술 교사 "정보 및 ICT"

설명

개발 목표: KUMIR 환경을 사용하는 특정 실행 로봇의 예에서 프로그래밍 가능성을 연구합니다. 연주자와 함께 작업할 수 있는 실용적인 기술을 제공합니다.

체계적인 개발정보학 수업을 위해 편집컴퓨터에서 연습: 알고리즘의 교육 집행자와 협력; 실행기를 관리하기 위한 선형, 분기 및 순환 알고리즘 작성; 복잡한 구조의 알고리즘 작성; 보조 알고리즘(절차, 서브루틴)의 사용.

학생들이 알아야 할 사항:

  • 연기자는 무엇입니까? SKI 로봇, 수요일 공연 로봇;
  • 알고리즘이란 무엇입니까?알고리즘의 주요 속성은 무엇입니까?
  • 알고리즘 작성 방법: 순서도, 교육용 알고리즘 언어;기본 알고리즘 구성: 다음, 분기, 루프; 구조
  • 알고리즘; ⇒ 보조 알고리즘 할당; 복잡한 알고리즘을 구축하기 위한 기술:

학생들은 다음을 할 수 있어야 합니다.

  • 학습 알고리즘 언어의 알고리즘 설명을 이해합니다.
  • 알려진 수행자에 대한 알고리즘 추적을 수행합니다.
  • 로봇 실행기를 위한 선형, 분기 및 순환 제어 알고리즘을 구성합니다. 하위 작업을 할당합니다. 보조 알고리즘을 정의하고 사용합니다.

세션 1(2시간) 레슨 1.

퍼포머 로봇.실행 명령 시스템.

강의 계획.

  1. 실행기의 환경인 실행기의 UCS에 대한 설명입니다.

2. 일반적인 로봇 알고리즘 분석.

수업 중.

수행자에 대한 설명을 고려하십시오.

실행자 환경: 출연자 로봇은 세포로 분할된 평면에 그려진 미로를 통해 이동할 수 있습니다.

스키로봇 : 간단한 명령: 위, 아래, 왼쪽, 오른쪽, 채우기.

논리 명령: (상태 확인)

상단 무료 하단 무료

왼쪽 자유 오른쪽 무료.

논리적 연결: AND, NOT, OR:

예: (왼쪽이 비어 있지 않음) 또는 (오른쪽이 비어 있지 않음)

분기 명령: 순환 명령:

조건이라면 그런 다음 nts 동안 조건

일련의 명령 일련의 명령

모든 kts

(2009년 CIM에서는 로봇의 명령이 어린이에게 익숙한 명령과 달라서착란 :)

분기 명령: 순환 명령:

조건이라면 그런 다음 조건이 수행하는 동안 nts

일련의 명령 일련의 명령

끝 끝

Kumir 프로그램 창의 일반 보기. 로봇의 그래픽 환경:

KIM에서 데모 버전 2010 명령 형식이 다음으로 변경됨습관적인

알고리즘 생성 순서:

1.팀 도구 - 시작 환경 편집로봇 필드에 벽을 그리고 로봇을 초기 위치로 설정합니다.

2.명령어 로봇 - 시작 환경 변경새로운 환경을 저장합니다.

3.명령어 붙여넣기 - 로봇 사용아티스트를 지정합니다.

4. 문서 창에서 메뉴를 사용하여 알고리즘을 작성하십시오.끼워 넣다.

5. 명령 실행 - 알고리즘을 지속적으로(또는 단계별로) 실행합니다.

6. 알고리즘 실행 결과를 고려하고 필요한 경우 디버그합니다.

1과(2시간) 2과.

실무 "선형 알고리즘의 편집.

작업: 1. 필드의 임의 지점에서 로봇. 시작 위치의 위, 아래, 오른쪽에 있는 셀에 색을 지정합니다.

  1. 필드의 임의 지점에 있는 로봇. 로봇 4칸을 오른쪽으로 이동하고 그 위에 그림을 그립니다.
  2. 보드에 4칸 정사각형을 그려 새로운 시작 환경을 만듭니다. 환경을 시작으로 저장하십시오.
  3. 필드의 벽에 통로가 있는 복도를 그려 새로운 시작 환경을 만듭니다. 환경을 obst2.fil로 저장합니다. 시작 환경을 새로 생성된 환경으로 변경합니다.

세션 2(2시간) 레슨 1.

주제 : 알고리즘의 분기 및 순차적 개선.

로봇 실행기를 사용한 CIM 작업 분석.

로봇을 사용하다

알그 김 2009

일찍

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

범죄자

로봇을 사용하다

알그 킴 2010

일찍

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

바닥이 느슨하지 않다면

그럼 오른쪽으로

모두

범죄자

등. 노예. 14번. 분기 알고리즘의 컴파일 및 디버깅

작업. 첨부 파일을 참조.

수업 3. 순환 알고리즘. 1-2과

표적: 알고리즘에서 주기 개념의 본질을 밝히고, 알고리즘에서 쓰기 주기의 형태를 보여주고, 순환 알고리즘을 만들고 작성하는 기술을 제공합니다.

등. 노예. 15번. 순환 알고리즘의 컴파일 및 디버깅

1. 벽에 인접한 모든 내부 셀을 그리는 알고리즘을 만듭니다.

로봇을 사용하다

일찍

nc 오른쪽 무료

페인트 칠하다; 오른쪽

kts

nc 바닥이 비어 있는 동안

페인트 칠하다; 아래로

kts

nc 바닥이 느슨해질 때까지

페인트 칠하다; 왼쪽으로

kts

범죄자

2. 로봇과 벽 사이의 모든 셀을 채우는 알고리즘을 만듭니다. 벽까지의 거리는 불명.

로봇을 사용하다

일찍

nc 오른쪽 무료

오른쪽; 칠하다

kts

범죄자

3. 두 벽 사이의 모든 셀을 칠하는 알고리즘을 만듭니다.

로봇을 사용하다

알 uch3

일찍

nc 아직(상단이 느슨하지 않음) 또는 (하단이 느슨하지 않음)

오른쪽

if (상단 무료 아님) 및 (하단 무료 아님)

그 다음에

칠하다

모두

kts

범죄자

4. 직사각형 벽 주위의 모든 셀을 채우는 알고리즘을 만듭니다.

알 uch4

일찍

페인트

오른쪽 느슨해질 때까지 nc

페인트;업;

kts

페인트; 오른쪽

nc 바닥이 느슨해질 때까지

페인트; 오른쪽;

kts

칠하다;아래로

느슨하게 남을 때까지 nc

페인트;다운;

kts

페인트; 왼쪽

nc 상단이 느슨해질 때까지

페인트 칠하다; 왼쪽;

kts

범죄자

로봇을 사용하다

알 uch5

일찍

오른쪽

nc 바닥이 느슨해질 때까지

페인트 칠하다; 오른쪽

kts

페인트 칠하다; 아래로

무료로 남아있는 동안 nc

페인트 칠하다; 왼쪽으로

kts

느슨하게 남을 때까지 nc

페인트 칠하다; 아래로

kts

페인트; 왼쪽; 페인트; 위로;

nc 동안 최고 무료

페인트 칠하다; 위로

kts

nc 상단이 느슨해질 때까지

페인트 칠하다; 왼쪽으로

kts

범죄자

활동 4 1과

도우미 알고리즘.

표적: 주요 개념을 소개하고 보조 알고리즘; 보조 알고리즘 사용 규칙을 설명합니다. 보조 도구를 사용하여 알고리즘의 예를 구문 분석합니다.

강의 계획

1.신규 용어 소개(주 및 보조 알고리즘, 호출) 및 신개념 설명.

2. 보조 알고리즘을 사용하여 문제를 해결하는 예 분석.

일부 문제를 해결할 때 각 하위 작업을 독립적인 알고리즘으로 설계할 수 있는 더 작은 하위 작업으로 나누는 것이 편리합니다. 이 경우 보조 알고리즘에 대한 호출이 나중에 추가되는 하위 작업을 해결하는 데 사용되는 소위 기본 알고리즘이 먼저 컴파일됩니다. 이러한 종류의 솔루션을순차적 정제 방법.이를 통해 프로그래머 그룹이 프로젝트에서 작업하는 동안 각자가 자신의 하위 작업을 해결할 수 있습니다.

문제를 해결하는 과정에서 각 보조 알고리즘은 필요한 경우 더 작은 보조 알고리즘으로 나눌 수 있습니다.

보조 알고리즘을 실행하는 명령이 호출됩니다.도전 메인 알고리즘의 본문에 작성됩니다.

하나의 동일한 알고리즘이 다른 알고리즘과 관련하여 주 및 보조로 간주될 수 있습니다. 알고리즘 언어에서는 주 알고리즘이 먼저 작성되고 보조 알고리즘이 아래 행에 작성됩니다.

작업 1:

로봇은 필드의 왼쪽 상단 모서리에 있습니다. 벽이나 음영 셀이 없습니다. 보조 알고리즘을 사용하여 하나의 수평선에 4개의 십자가를 그리는 알고리즘을 구성합니다. 로봇의 최종 위치는 임의적일 수 있습니다.

해결책

보드에 대한 분석:

작업2. 로봇은 필드의 왼쪽 상단 모서리에 있습니다. 벽이나 음영 셀이 없습니다. 바둑판 패턴으로 8 x 8 정사각형을 그리는 알고리즘을 작성하십시오. 로봇의 최종 위치는 임의적일 수 있습니다.

활동 4 2과

PC에서 실제 작업 "보조 알고리즘을 사용한 문제 해결".

표적 : 순차적인 정제 방법으로 알고리즘을 구성하는 실무 능력을 함양한다.

강의 계획

1. PC에서 작업을 완전히 완료합니다. 학생들은 과제를 받고 Kumir 소프트웨어 환경에서 완료합니다. 작업 결과는 추후 확인을 위해 파일로 저장됩니다.

작업1 . 로봇은 필드의 왼쪽 하단 모서리에 있습니다. 벽이나 음영 셀이 없습니다. 6개의 셀에 같은 길이의 세로 줄무늬 6개를 그리는 알고리즘을 작성하십시오. 로봇의 최종 위치는 임의적일 수 있습니다.

작업2 .보조를 사용하여 숫자 1212를 형성하는 셀 위에 그림을 그리는 알고리즘을 만듭니다.

숙제: 다음 이미지를 그리는 알고리즘을 생각해 보세요. 두 가지 보조 알고리즘을 적용하여 문제를 해결합니다.

활동 5 1-2과

테스트

"실행 로봇의 환경에서 알고리즘 컴파일".

표적: Kumir 소프트웨어 환경에서 알고리즘을 생성하고 분석하는 능력에 대해 습득한 지식을 테스트합니다.

에 대한 작업 제어 작업난이도별로 나누어져 있으며 실행 로봇과 함께 3가지 작업을 포함합니다(작업 1 및 2 - 분기 및 루프용, 작업 3 - 보조 알고리즘 사용). 작업 텍스트는 부록에 나와 있습니다.

초기 및 최종 조건과 생성된 알고리즘은 파일로 기록됩니다.

과제의 난이도에 따라 등급이 결정됩니다. 학생은 과제 유형을 선택할 권리가 있습니다.

1. 소개

이 전자 버전의 교과서에서 소개할 시스템 "KuMir"(이름은 "Set of Educational Worlds"에서 따옴)입니다.
"KuMir" 언어의 개발자는 현대 프로그래밍 기술을 충족하고 프로덕션 사용을 허용하는 컴퓨터 과학의 초기 과정을 위한 간단한 언어를 만드는 목표를 추구했습니다. 학교 알고리즘 언어를 기초로 삼았습니다. 언어는 교육에서 생산으로 전환하는 몇 가지 기능으로 보완되었습니다. 언어에는 다음이 있습니다.
유형 전체, 사물, 조명; 이러한 유형의 데이터에 대한 기존 작업 집합(문자열 및 표준 세트수학 함수);
배열( ) 지정된 유형; 주기, 분기 등의 구조적 제어 구조
Kumir는 개방적입니다. 외부 실행기를 연결하면 데이터베이스 관리 및 기하학적 개체 작업에서 유효한 숫자 유형 세트 확장에 이르기까지 새로운 기능으로 언어가 풍부해집니다(이 경우 언어는 표현식에서 새 유형을 기존 숫자 유형과 혼합할 수 있음).
현대 기술프로그래밍은 프로그램을 하위 프로그램뿐만 아니라 더 큰 단위, 즉 공통 데이터에서 작동하는 프로그램 집합으로 나누는 방법을 가르쳐줍니다. 에 다른 언어들프로그래밍에서 이러한 단위는 다르게 호출되며 KuMir에서는 이러한 단위를 "Executor"라고 합니다. 수행자 개념은 실제 작업에서 매우 중요하며 훈련의 가능한 초기 단계에 도입되어야 합니다.
교육 및 교육 소프트웨어 개발에 KuMir를 사용한 경험은 언어가 배우기 쉬우면서도 동시에 광범위한 생산 작업을 확장하기에 충분히 강력하다는 것을 보여주었습니다.
KuMir는 E-workshop과 마찬가지로 다음을 포함하는 통합 시스템입니다. 텍스트 에디터, 응답 시간이 0인 증분 컴파일러와 간단하고 편리한 디버거. 좋은 이름이런 종류의 시스템 - "Editor-Compiler": 프로그램을 입력하는 동안 컴파일러는 이를 처리하고 언제든지 프로그램을 약간의 지연 없이 실행할 준비가 됩니다.

2. 가치의 이름과 유형. 쿠미르 오퍼레이션

숫자뿐만 아니라 러시아어 및 라틴 알파벳의 모든 문자를 변수 이름 작성에 사용할 수 있습니다. 이름은 숫자로 시작하면 안 됩니다. KuMir 시스템의 이름 길이에 대한 엄격한 제한은 없지만 편집의 용이성과 라인 오버플로를 방지하기 위해 변수 및 알고리즘에 너무 긴 이름을 지정해서는 안 됩니다. 일반적으로 알고리즘의 용도를 이해할 수 있도록 이름이 선택됩니다. 프로그램을 편집할 때 철자가 유사한 러시아어와 라틴 문자는 컴퓨터로 구별된다는 점도 기억해야 합니다. 예를 들어, A라는 이름의 변수를 설명할 때 사용자가 라틴 알파벳으로 "A"를 입력하고 알고리즘 텍스트에서 러시아 알파벳으로 이름을 입력하여 이 변수에 액세스하려고 하면 이 줄에서 " name is not defined" 메시지가 "fields"에 나타납니다.
KuMir 프로그래밍 시스템의 알고리즘 언어는 세 가지 유형의 수량을 사용합니다. 정수( 전부의), 진짜 ( 물건) 및 문자( 리타스).
값 유형- 값이 취할 수 있는 값 집합과 이 값으로 수행할 수 있는 작업 집합을 정의합니다.
이름, 값 및 유형이 있는 단일 정보 개체입니다.

상수 값(상수)은 알고리즘 실행 중에 값을 변경하지 않습니다.
변수는 알고리즘 실행 중에 값을 변경할 수 있습니다.
표현- 값에 대한 일련의 작업을 정의하는 레코드입니다. 표현식에는 상수, 변수, 연산 기호, 함수가 포함될 수 있습니다.
다음 기호는 Kumir에서 표현식을 작성하는 데 사용됩니다.

징후를 나타내기 위해 논리 연산기호가 사용됩니다.
= 같음;
< >같지 않다;
< меньше;
> 더;
< = меньше или равно;
> = 크거나 같음;
기록을 위해 어려운 조건다음과 같은 작업: 그리고, 또는 아니요.
그리고 -
위 조건의 동시 충족(Х > 0 및 Х< = 2);
또는- 조건(X > 0 또는 Y > 0) 중 적어도 하나의 충족
아니다- 거부.

3. KuMir 언어의 내장 기능

다음은 내장 함수의 예입니다.

항소

기능

유형

논쟁

기능

죄(엑스) 코사인(엑스) T.G.(엑스) 경험치(엑스) LN(엑스) ABS(엑스) SQRT(엑스) 모드(ㅏ,비) 정수(엑스) 파이

사인 x 코사인 x 접선 x
지수 x(예시) 자연. 로그 x
모듈 x
제곱근 x
나눗셈의 나머지(A에서 B)
숫자의 정수 부분
숫자 "파이" - 3.14159

물건
물건
물건
물건
물건
물건
물건
물건, 대상
물건
물건

물건
물건
물건
물건
물건
물건
물건
전부의
전부의
인수 없음

알고리즘 언어로 산술 표현식을 작성하는 예:

4. INPUT / OUTPUT 명령

알고리즘을 실행하는 과정에서 사람과 컴퓨터 사이의 정보 교환("대화")을 구성하는 것이 종종 필요합니다. 이를 위해 알고리즘 언어에는 컴퓨터 메모리에서 화면으로의 OUTPUT 정보와 키보드에서 (사람에서) 컴퓨터 메모리로의 INPUT 정보에 대한 특수 명령이 있습니다.
Enter 명령 -입력 장치(키보드)를 통해 변수의 값을 설정하는 명령.
출력 명령- 값의 값이 컴퓨터의 출력 장치(모니터 화면)에 반영되는 명령.
값은 정보를 저장하기 위해 알고리즘 언어로 사용되기 때문에 입력/출력 명령은 값을 표시(화면에 표시)하거나 입력(컴퓨터 메모리에 기억)해야 하는 수량의 이름을 나타냅니다.
예시:

관계 NS (새로운 라인) 정보가 새 줄에 출력되어야 함을 컴퓨터에 알립니다.

5. 할당 명령. 선형 구조 프로그램 작성 및 편집

수량의 값을 기억하거나 변경하기 위해 알고리즘 언어에 특별한 명령이 있습니다. 과제 지시, 다음과 같이 작성됩니다.

값 이름: = 표현식

기호 ":="(콜론 다음에 등호)를 기호라고 합니다. 과제 "할당"으로 읽습니다(예: "n:=e" 명령은 "n 할당 e"로 읽음). 할당 명령을 실행할 때 컴퓨터는 먼저 오른쪽에 쓰여진 표현식을 계산하고(수량의 이름을 값으로 대체), 그 표현식의 결과 값을 메모리에 씁니다.

단순한 일련의 동작인 알고리즘을 선형 구조 알고리즘이라고 합니다.
생성 과정을 고려하십시오 선형 알고리즘표현식 계산의 예 :
1. 두 숫자의 합 계산
2. 두 다리가 주어진 직각삼각형의 빗변을 구하는 프로그램을 작성하십시오.
3. 정육면체의 면을 알면 부피 구하기

6. 분기 구조 프로그램 생성 및 편집

문제 해결이 항상 선형 알고리즘으로 표현될 수는 없습니다. 조건에 따라 일련의 작업을 수행하는 선택을 구성해야 하는 작업이 있습니다. 이러한 알고리즘을 분기 구조 알고리즘. KuMir 프로그래밍 시스템에서 분기 구조에 대한 알고리즘을 생성하기 위해 "IF - THEN - ELSE - ALL" 및 "CHOICE - IF - ALL" 구성이 제공됩니다.

분기 명령: IF - THEN - ELSE - 모두

분기 명령 - 일부 조건에 따라 알고리즘을 두 개의 경로로 분할합니다. 그런 다음 알고리즘의 실행은 공통 연속으로 진행됩니다. 분기는 완전하고 불완전합니다.

건설의 그래픽 구성표 " 만약에"

서비스 문구 " 만약에", "그 다음에", "그렇지 않으면"는 일반적인 의미를 가지고 있습니다. 단어 " 모두"는 공사의 끝을 의미합니다. 사이 " 그 다음에" 그리고 " 그렇지 않으면" - 하나 이상의 라인에서 - 알고리즘 언어의 명령 시퀀스가 ​​작성됩니다(시리즈 1). " 사이 그렇지 않으면" 그리고 " 모두"다른 일련의 명령이 기록됩니다(시리즈 2). 서비스 단어와 함께 시리즈 2" 그렇지 않으면"가 누락되었을 수 있습니다. "를 실행할 때 만약에"컴퓨터는 먼저 " 사이에 쓰여진 조건을 확인합니다. 만약에" 그리고 " 그 다음에". 확인 결과, , 또는 아니.가능하다면 예,그런 다음 SERIES 1이 실행되고 아니, -그런 다음 시리즈 2(있는 경우) .
조건이 충족되지 않으면( 아니) 및 시리즈 2"와 함께 그렇지 않으면"가 없으면 컴퓨터는 즉시 "라는 단어 뒤에 쓰여진 명령을 실행합니다. 모두".

7. KuMir 프로그래밍 시스템의 사이클 유형

개별 동작이 여러 번 반복되는 알고리즘을 순환 구조의 알고리즘이라고 합니다. 반복과 관련된 알고리즘의 일련의 동작을 주기라고 합니다.
루프 명령어떤 조건에 따라 일련의 명령(루프 본문)의 반복 실행을 제공합니다.
KuMir 프로그래밍 시스템에서 순환 구조의 프로그래밍 알고리즘을 위해 두 가지 유형의 루프가 제공됩니다. 즉, 전제 조건이 있는 루프( while 루프)와 매개변수가 있는 루프(for 루프)입니다.

전제 조건이 있는 루프(while 루프)

전제 조건이 있는 루프(while 루프)는 루프 조건이 true인 동안 실행이 반복되는 루프입니다. 서비스 단어 체크 안함(주기 시작) 및 KC(주기의 끝) 엄격하게 하나 아래에 작성되고 연결됩니다. 수직 막대. 이 줄의 오른쪽에는 반복되는 명령 시퀀스(루프 본문)가 기록됩니다.

실행될 때 컴퓨터는 주기적으로 다음 작업을 반복합니다.
a) 단어 뒤에 쓰여진 수표 안녕상태;
b) 조건이 충족되지 않으면(조건이 false임) 사이클 실행이 종료되고 컴퓨터가 다음에 작성된 명령을 실행하기 시작합니다. KC. 조건이 충족되면(조건이 참) 컴퓨터는 루프 본문을 실행하고 조건을 다시 확인하는 등의 작업을 수행합니다.
루프의 조건이 안녕처음부터 관찰되지 않으면 루프 본문이 실행되지 않습니다.
논평. 루프 실행 안녕조건이 항상 참이면 종료되지 않을 수 있습니다(이 상황을 루프라고 함). 따라서 이러한 상황을 피하기 위해 루프의 본문에는 조건을 변경하는 명령이 포함되어야 합니다.

양의 정수가 주어졌을 때 N. 이 숫자의 계승을 계산합니다. N! = 1 * 2 * 3 * ... * N.

매개변수가 있는 루프(loop for)

매개변수가 있는 루프(loop for) - 정수 매개변수가 초기(i1)에서 최종(in)까지의 모든 값 세트를 실행하는 동안 루프 본문의 반복 실행:

여기서 i는 루프 매개변수라고 하는 정수 유형의 변수입니다. i1, in은 루프 매개변수의 초기 및 최종 값으로, 임의의 정수 또는 정수 값이 있는 표현식으로 지정할 수 있습니다. h - 사이클 매개변수 값을 변경하는 단계, 단계 값은 정수(양수 및 음수 모두)일 수 있습니다. 첫 번째 줄의 "단계 h" 항목이 아예 없을 수도 있지만 단계의 기본값은 1입니다.
루프를 실행할 때 을 위한,그 본체는 i = i1, i = i1 + h, i = i1 + 2*h, 에 대해 실행됩니다. . . , 나는 = 안으로. 알고리즘 언어의 규칙에 따라 정수 i1, in, h를 지정할 수 있습니다. 특히, in은 i1보다 작을 수 있습니다. 또한, h의 값이< 0, то цикл выполняется нужное количество раз, а если h имеет положительное значение, то этот случай не считается ошибочным - просто тело цикла не будет выполнено ни разу, а ЭВМ сразу перейдет к выполнению команд, записанных после KC. h = 0인 경우 루핑이 발생합니다.

예: 양의 정수 N이 주어졌을 때 이 숫자의 계승을 계산하십시오: N! = 1 * 2 * 3 * ... * N.

8. 반복 표현식을 위한 알고리즘

수학 및 컴퓨터 과학에는 종종 각 후속 항이 이전 항을 통해 계산되는 시퀀스가 ​​있습니다.
산술 진행, 예를 들어 다음 각 항은 이전 항과 같으며 진행의 차이만큼 증가합니다.

아이 =AI-1 +

순서대로 1, 1, 2, 3, 5, 8, 13, ... ( 그것을 피보나치 수열이라고 한다) 각 다음 항은 이전 두 항의 합과 같습니다. 이 시퀀스의 경우

ai = ai-1 + ai-2 , a1 = a2 =1

하나 이상의 이전 요소로 시퀀스의 다음 요소를 표현하는 공식 반복 관계.

9. 테이블 값 및 작업

많은 양의 정보로 작동하는 알고리즘을 기록하기 위해 알고리즘 언어에는 테이블(배열)이라는 특수한 테이블 형식 값이 있습니다.
테이블 값은 요소라고 하는 다른 값, 일반적으로 정수 또는 실수 값으로 구성됩니다. 테이블의 요소는 다양한 방식으로 정렬할 수 있습니다. KuMir 프로그래밍 시스템의 알고리즘 언어는 가장 일반적인 두 가지 유형의 테이블인 선형 및 직사각형 테이블을 사용합니다.

선형 테이블 작업(1차원 배열)

어떤 가치처럼 선형 테이블컴퓨터 메모리의 한 장소를 차지하고 이름, 값 및 유형이 있습니다. KuMir는 정수(celtab) 및 실수(vehtab) 유형의 테이블을 사용합니다. 예를 들어:

celtab A [ 1:5 ] 레코드는 값 A가 정수(정수)로 구성된 테이블(탭)이며 이 테이블의 요소에는 1(하한)에서 5(상한)까지의 인덱스가 있음을 의미합니다. A의 값은 5개의 정수(3, 15, 0, -10.101)입니다.
테이블 요소에는 별도의 이름이 없습니다. 테이블 A의 i 번째 요소를 지정하기 위해 레코드 A [ i ]가 사용됩니다. 예를 들어, 명령 A [ 3 ] : = A [ 2 ] + A [ 4 ]를 실행할 때 컴퓨터는 A [ 2 ] 및 A [ 4 ] 대신 테이블 A의 두 번째 및 네 번째 요소 값을 대체합니다. , 즉 숫자 15와 -10을 더하고 결과 값을 세 번째 요소에 할당하므로 테이블의 세 번째 요소 자리에 0 대신 값 5가 나타납니다.
0뿐만 아니라 모든(양수 및 음수) 정수를 테이블 경계 값으로 사용할 수 있습니다. 하위 경계의 값은 상위 경계의 값보다 작아야 합니다. 같으면 테이블은 구성된 것으로 간주됩니다. 한 요소의. 표 설명에서 오타로 인해 하한이 상한보다 큰 것으로 판명되면(예: celtab [ 3:1]) 이는 오류로 간주되지 않으며 알고리즘을 입력할 때 , "필드"에 메시지가 표시되지 않습니다. 이 경우 이 테이블에는 단일 요소가 없는 것으로 간주되며 이 테이블에 처음 액세스할 때 "bad index"라는 메시지가 나타납니다.

작업.

직사각형 테이블 작업(행렬)

선형 테이블과 마찬가지로 행렬은 컴퓨터 메모리의 공간을 차지하며 이름, 값 및 유형이 있습니다. KuMir는 정수(celtab) 및 실수(vehtab) 유형의 테이블을 사용합니다.

celtab A [ 1:5, 1:2 ] 표기법은 값 A가 정수(정수) 숫자로 구성된 테이블(탭)임을 의미하며, 이 테이블의 요소는 (첫 번째 열, 첫 번째 행)에서 (마지막 열, 마지막 줄). A의 값은 10개의 정수입니다: 3, 15, 0, -10, 101, 200, -45, 50, 10, 222.
테이블 요소에는 별도의 이름이 없습니다. 테이블 A의 i 번째 요소를 지정하기 위해 레코드 A [ i, j ]가 사용됩니다. 예를 들어, A [ 3, 1 ] : = A [ 2, 1 ] + A [ 4, 1 ] 명령을 실행할 때 컴퓨터는 A [ 2, 1 ] 및 A [ 4, 1 ] 값 대신 ​테이블 A의 첫 번째 열의 두 번째 및 네 번째 요소, 즉 숫자 15와 -10을 더하고 첫 번째 행의 세 번째 요소에 결과 값을 할당하여 0 대신 값 5가 되도록 합니다. 표에서 첫 번째 행의 세 번째 요소 대신 가 나타납니다.
0뿐만 아니라 모든(양수 및 음수) 정수를 테이블 경계 값으로 사용할 수 있습니다. 하위 경계의 값은 상위 경계의 값보다 작아야 합니다. 같으면 테이블은 구성된 것으로 간주됩니다. 한 요소의. 표 설명에서 오타로 인해 하한이 상한보다 큰 것으로 판명되면(예: celtab [ 3:1, 5:2]) 이는 오류로 간주되지 않으며 알고리즘을 입력할 때 "필드"에 메시지가 표시되지 않습니다. 이 경우 이 테이블에는 단일 요소가 없는 것으로 간주되며 이 테이블에 처음 액세스할 때 "bad index"라는 메시지가 나타납니다.

작업.주어진 테이블 B에서 최대 요소의 인덱스와 값을 결정하십시오.

부록: 작업

선형 알고리즘

작업 #1

두 숫자의 합 찾기 - 및 b
해결책:

합집합
일찍 물건 에이, ㄴ, ㄷ
결론 "2 숫자의 값을 입력하십시오"
입력 에이, ㄴ
c:= a + b
결론 ns , "숫자의 합",a,"및",b,"같음",c
범죄자

작업 #2

두 숫자의 차이 찾기
해결책:

차이점
일찍 물건 에이, ㄴ, ㄷ
결론 "변수 값을 입력하십시오."
입력 에이, ㄴ
c:= a - b
출력 ns, "숫자의 차이",a,"그리고",b,"같음",c
범죄자

작업 #3

임의의 두 자연수의 곱 찾기
해결책:

전부의 에이, ㄴ, ㄷ

일하다
일찍
결론
" 두 개의 숫자를 입력하세요"
입력
ㅏ,c:=+
출력 ns,
"
숫자의 곱",a,"및",b"같음",c
범죄자

작업 #4

두 자연수의 몫 구하기
해결책:

물건 에이, ㄴ, ㄷ

사적인
일찍
결론 "
배당금과 제수 입력"
입력
에이, ㄴ
c:= a / b
출력 ns,
"몫",a,"및",b,"같음",c
범죄자

작업 #5

임의의 5개 숫자의 산술 평균 찾기
해결책:

물건 a, b, c, d, e, f

산수
시작하다 a, b, c, d, e, f
결론 "5개의 숫자를 입력하세요"
입력 에이 비 씨 디이
f:=(a + b + c + d + e)/ 5
결론 ns ," 5개의 숫자의 산술 평균은", f
범죄자

분기

작업 #1

3개의 정수 중 가장 큰 정수 찾기 (숫자는 임의)

최고
조기 목표 a BC
결론 "난수 3개 입력"
입력 a BC
만약에 > b > c
그러면 결론은 ns , "최대 수는"이고
모두
만약에 ㅏ<б>와 함께
그러면 결론은 ns ," 최대 수는 ", b
모두
만약에 ㅏ<б<с
그러면 결론은 ns , "최대 수는",
모두
범죄자

작업 #2

두 개의 임의의 숫자가 제공됩니다. 첫 번째 숫자가 두 번째 숫자보다 크면 합을 두 번째 숫자에 할당하고 곱을 두 번째 숫자에 할당합니다. 두 번째 숫자가 첫 번째 숫자보다 크면 첫 번째 숫자에 곱을 할당하고 두 번째 숫자에 합을 할당합니다.

상태
시작하다 에이, ㄴ
결론 "숫자 2개 입력"
입력 에이, ㄴ
만약에 > 나
그 다음에 a:= a + b
b := a * b
그렇지 않으면 a:= a * b
b := a + b
결론 ns , 에이, ㄴ
범죄자

작업 #3:

4개의 임의의 숫자 중에서 최소값 찾기
해결책:

최저한의
시작하다 b, c, e
결론 "4개의 난수를 입력하세요"
입력 에이, ㄴ, 에. 이자형
만약에 > b > c > e
그러면 결론은 ns ," 최대 수-" 및
모두
만약에 ㅏ<б>c>e
그러면 결론은 ns ,"최대 수 -",b
모두
만약에
ㅏ<б<с>이자형
그러면 결론은 ns ," 최대 수 -", s
모두
만약에
ㅏ<б<с<е
그러면 결론은 ns , "최대 수 -", e
모두
범죄자

작업 #4

이등변 삼각형의 다리 2개(2cm와 2cm)와 밑변(2.82cm)이 주어집니다. 삼각형이 직각 삼각형인지 확인하십시오.
해결책:

삼각형
시작하다 나,에,에스
나는:= 2
시간:= 2
c:= 2.82
만약에 c**2= (i**2)+(h**2)
그런 다음 출력 "진실"
그렇지 않으면 출력 " 거짓"
모두
범죄자

작업 #5

두 음수의 곱이 0보다 크면 메시지 "true"를 인쇄하고, 그렇지 않으면 메시지 "false"를 인쇄합니다.
해결책:

부정적인
시작하다 나, 시, 에스, 엠
결론 "음수 두 개 입력"
입력 나는 h
c:=0
m := i*h
만약에 m>s
그러면 결론은 ns , "진실"
그렇지 않으면 출력 ns ,"거짓"
모두
범죄자

루프 "for"

작업 #1

찾다 계승자연수N ( 자연수의 계승 n은 1과 1 사이의 모든 자연수의 곱입니다. N ) 해결책:

계승
시작하다
ㅏ. 비
전부의
n, 그리고
결론

입력
N
:= 1
에 대한 nc
그리고 ~에서 1 ~ 전에 N
결론 ns,
"번호를 입력하세요"
입력

a:= a * b
kts
결론 ns
,
"factorial",n,"정수는"이고
범죄자

작업 #2

중에서 최대값을 구합니다.n - 정수
해결책:

최고
시작하다
에이, ㄴ
전부의
안에
결론
"비교할 정수의 수를 입력하십시오"
입력
N
a:=0
에 대한 nc
그리고 ~에서 1 ~ 전에 N
결론 ns,
"번호를 입력하세요"
입력

만약에
ㄴ>아
그 다음에
a:=b
모두
kts
결론 ns,
"데이터 중 최대 개수는 숫자"이며,
범죄자

작업 #3

중에서 찾기음수의 n-정수
해결책:

우연의 일치
시작하다
에이, ㄴ, ㄷ
전부의
n, 나, s
결론 "
자연수의 수를 입력하십시오"
입력
N
결론 ns,
"번호를 입력하세요"
입력

n:= n - 1
시간:= 0
에 대한 nc
그리고 ~에서 1 ~ 전에 N
결론 ns,"
번호를 입력하세요"
입력
와 함께
만약에
c = b
그 다음에
s:= s + 1
모두
kts
결론 ns
,

범죄자

작업 #4

n-정수를 순차적으로 입력합니다. 첫 번째 숫자와 일치하는 수 찾기
해결책:

시작하다 에이, ㄴ, ㄷ
전부의
n, 나, s
결론
"자연수의 수를 입력하십시오"
입력
N
결론 ns,
"번호를 입력하세요"
입력

n:= n - 1
시간:= 0
에 대한 nc
그리고 ~에서 1 ~ 전에 N
결론 ns,
"번호를 입력하세요"
입력
와 함께
만약에
c = b
그 다음에 s:= s + 1
모두
kts
결론 ns
,
"첫 번째 숫자와 일치하는 수는", z
범죄자

작업 #5

n-정수를 순차적으로 입력합니다. 주어진 숫자의 최대값과 최소값의 차이 찾기
해결책:

차이점
시작하다
ㅏ. b, s, d
전부의
n, 그리고
결론
"숫자 입력"
입력
N
:= 0
c:=0
에 대한 nc
그리고 ~에서 1 ~ 전에 N
결론 ns,
"번호를 입력하세요"
입력

만약에
전자>
그 다음에
c:=d
모두
만약에
디<а
그 다음에
에이:= d
모두
kts
b:= c - a
결론 ns,
"최소값과 최대값의 차이는 같음", b
범죄자

동안 루프

작업 #1

1과 5 사이의 모든 숫자의 합 구하기
해결책:

번호
시작하다 에이, ㄴ
결론 "두 번째 숫자가 첫 번째 숫자보다 크도록 두 개의 숫자를 입력하세요."
입력 에이, ㄴ
안녕 ㅏ<б
a:= a + 1
kts
결론 ns
, ㅏ
범죄자

작업 #2

두 번째 숫자가 첫 번째 숫자보다 크도록 두 개의 숫자가 주어집니다. 첫 번째 숫자에 1을 더하여 두 번째 숫자와 같아질 때까지 모니터에 표시해야 합니다.
해결책:

합집합
시작하다 에이, ㄴ, ㄷ
결론 "합계 간격 입력"
입력 에이, ㄴ
c:=
안녕 ㅏ< б
a:= a + 1
c:= c + a
kts
결론 ns
, "주어진 간격의 숫자의 합은",
범죄자

작업 #3

두 개의 임의의 숫자가 제공됩니다. 그들의 곱이 100보다 작으면 각 숫자를 2씩 늘리고 모니터에 최종 숫자를 표시합니다.
해결책:

일하다
시작하다 에이, ㄴ, ㄷ
결론 "난수 두 개 입력"
입력 에이, ㄴ
c:= 100
안녕 ㄱ*ㄴ< с
a:= a + 2
b := b + 2
kts
결론 ns
, 에이, ㄴ
범죄자

1차원 배열

작업 #1

배열을 난수로 채우고 해당 요소를 출력합니다. 솔루션:

어레이 2
조기 목표
엔,나
물건
b, 최대
옷걸이
[ 1:n ]
결론
"배열 채우기"
입력
N
최대:= 0
에 대한 nc
~에서 1 ~ 전에 N
결론 ns,
"배열 요소 입력"
입력

만약에
b > 최대
그 다음에 최대:=b
모두
kts
결론 ns
,

범죄자

작업 #2

어레이의 최대 요소를 찾아 모니터에 표시합니다. 솔루션:

어레이 2
일찍
전부의엔,나
물건
b, 최대
옷걸이 [ 1:n ]
결론
"배열 채우기"
입력
N
최대:= 0
에 대한 nc
~에서 1 ~ 전에 N
결론 ns,
"배열 요소 입력"
입력

만약에
b > 최대
그 다음에 최대:=b
모두
kts
결론 ns
,
"이 배열의 최대 요소는", 최대
범죄자

작업 #3

1차원 배열의 요소 합 찾기 솔루션:

합집합
일찍 전부의
엔,나
옷걸이
[ 1:n ]
물건
ㄴ, z
결론
" 배열 요소의 수를 입력하십시오 "
입력
N
z:= 0
에 대한 nc ~에서 1 ~ 전에 N
결론 ns,
"배열 요소 입력"
입력

z:= z + b
kts
결론 ns
,
"합",n,"배열 요소가 같음", z
범죄자

작업 #4

1차원 배열 솔루션의 요소 곱 찾기:

일하다
조기 목표
안에
물건
에스, 디
옷걸이
[ 1:n ]
결론
"배열 요소의 수를 입력하십시오"
입력
N
d:= 1
에 대한 nc
~에서 1 ~ 전에 N
결론 ns,
"번호를 입력하세요"
입력
에스
d:= d*s
kts
결론 ns
,"
제품", n, " 요소가 같음", d
범죄자

배열

작업 #1


난수로 행렬 채우기 솔루션:

배열은 2차원
전부의
n, j, h, v
옷걸이 시작

결론
"테이블의 요소 수를 입력하십시오"
입력
N
시간:= 0
v:= 0
결론 ns,
"배열 채우기"
입력

에 대한 nc
제이 ~에서 1 ~ 전에 N
만약에 a > 0
그 다음에
h:= h + 1
그렇지 않으면
v:= v + 1
kts
결론 ns,

범죄자


작업 #2


행렬 솔루션의 첫 번째 행에 있는 양수 및 음수 요소의 수를 계산합니다.

어레이 2
일찍
물건 b, x, z
전부의
안에
결론

입력
N x:=0
z:= 0
에 대한 nc
~에서 1 ~ 전에 N
결론
ns, "번호를 입력하세요"
입력

만약에
b > 0
그 다음에
x:= x + 1
그렇지 않으면
z:= z + 1
모두
kts
결론 ns
,

결론 ns,

범죄자


작업 #3


각 행의 요소 합을 계산합니다. 솔루션:

어레이 3
시작하다
b, x, z, y
전부의
안에
옷걸이
에이[ 1:n, 1:n]
결론
"열 수 입력"
입력
N x:=0
z:= 0
에 대한 nc
~에서 1 ~ 전에 N
결론 ns,
"배열 채우기"
입력
에이[ 1:n, 1:n]
b:= a[ 1,i ]+a[ n, i ]
kts
결론 ns
,
"양수의 개수는",x
결론 ns,
"음수의 개수는", z
범죄자


작업 #4


3x3 행렬 솔루션의 두 번째 행에 있는 세 숫자의 합을 계산합니다.

행렬
일찍 전부의
안에
옷걸이 에이[1:3, 1:3]
결론 "배열 채우기"
입력 에이[1:3, 1:3]
n:=0
체크 안함 ~을 위한 ~에서 1 ~ 전에 3
n:= n + a[ 2,i]
kts
결론 ns,
"배열의 두 번째 행에 있는 숫자의 합은 다음과 같습니다.", n
범죄자

나선을 그리는 알고리즘:

서랍 사용

일찍
. 지점으로 이동(3,3)
. 펜을 내리다
. 코일(1); 코일(3); 코일(5); 코일(7); 코일 (9)
. 펜을 들어
범죄자
알그 턴(arg w)
일찍
. 벡터로 이동(a, 0)
. 벡터로 이동(0, -a)
. 벡터로 이동(-a-1.0)
. 벡터로 이동(0, a+1)
범죄자

명령 블록에 주의하십시오.

코일(1); 코일(3); 코일(5); 코일(7); 코일 (9)

보조 알고리즘 "coil(arg thing a)"은 5번 호출되지만 "N times" 루프에서는 호출될 수 없습니다. 다른 값논쟁.

그러나 인수의 값이 1에서 9로 변경되고 매번 2씩 증가하는 것을 볼 수 있습니다. 그래서 우리가 도울 수 있습니다 카운터가 있는 루프. 또한 이러한 주기를 "for" 주기라고 합니다.

카운터가 있는 루프- 어떤 변수가 주어진 초기 값에서 어떤 단계를 거쳐 최종 값으로 값을 변경하는 루프이며, 이 변수의 각 값에 대해 루프의 본문이 한 번 실행됩니다.

일반적으로 이 루프는 일부 값을 반복하고 각각에 대해 일부 작업을 수행해야 하는 경우에 사용됩니다.

카운터가 있는 주기의 일반적인 보기:

에 대한 nc<счетчик>~에서<нач. знач.>~ 전에<кон. знач.>[단계<знач.>]
<тело цикла (последовательность команд)>
kts

단계를 표시할 필요는 없으며 지정하지 않으면 1과 동일한 것으로 간주됩니다.

이제 "나선형" 알고리즘을 다음과 같이 다시 작성할 수 있습니다.

서랍 사용

일찍
. 지점으로 이동(3,3)
. 펜을 내리다
. 전체 크기
. nc 사이즈 1 ~ 9 2단계
. . 코일(크기)
. kts
. 펜을 들어
범죄자
알그 턴(arg w)
일찍
. 벡터로 이동(a, 0)
. 벡터로 이동(0, -a)
. 벡터로 이동(-a-1.0)
. 벡터로 이동(0, a+1)
범죄자

이 예에서 카운터 변수 "size"는 1, 3, 5, 7, 9 값을 받습니다. 즉, 루프는 5번 실행됩니다. "size" 변수의 각 값에 대해 루프 본문은 한 번 실행됩니다. 이 예에서는 보조 알고리즘 "coil(arg thing)"에 대한 호출입니다.

변수를 처음 사용하기 전에 변수가 어떤 유형인지 선언해야 합니다. 이것은 "정수 크기" 행에서 우리 프로그램에서 수행됩니다. 즉, "크기" 변수를 사용하여 정수를 저장하므로 이에 대한 메모리를 할당해야 함을 나타냅니다. 변수에 대해서는 잠시 후에 더 이야기하겠습니다.

이러한 알고리즘의 블록 다이어그램은 다음과 같습니다.

다른 예를 살펴보겠습니다.

먼저 점 (x, y)에 정사각형을 그리는 보조 알고리즘을 기억하고 작성해 보겠습니다. 도면을 변경하려면 다음 명령을 사용합니다. 벡터로 이동(이전 예에서는 포인트로 이동했습니다).

알고리즘은 다음과 같을 수 있습니다.

alg 정사각형(arg x, y, 측면)
일찍
. 지점으로 이동(x, y)
. 벡터로 이동(-측면/2, 측면/2)
. 펜을 내리다
. 벡터로 이동(측면, 0)
. 벡터로 이동(0, -측)
. 벡터로 이동(-측, 0)
. 벡터로 이동(0, 측면)
. 펜을 들어
범죄자

이러한 보조 알고리즘을 사용하여 다음 그림을 그립니다.

이를 위해 "for" 루프를 사용합니다. 예제 프로그램을 공부하십시오:

서랍 사용
그림 1
일찍
. 정수 z
. nc for z 2에서 10까지 2단계
. . 정사각형(0, 0, z)
. kts
범죄자
alg 정사각형(arg x, y, 측면)
일찍
. 지점으로 이동(x, y)
. 벡터로 이동(-측면/2, 측면/2)
. 펜을 내리다
. 벡터로 이동(측면, 0)
. 벡터로 이동(0, -측)
. 벡터로 이동(-측, 0)
. 벡터로 이동(0, 측면)
. 펜을 들어
범죄자

이 예에서 변수 "z"는 2, 4, 6, 8, 10 값을 받습니다. 즉, 루프는 5번 실행됩니다. 각 "z" 값에 대해 루프 본문이 한 번 실행됩니다. 이 예에서는 보조 제곱 알고리즘에 대한 호출입니다.

변수를 처음 사용하기 전에 변수가 어떤 유형인지 선언해야 합니다. 이것은 "integer z" 행에서 우리 프로그램에서 수행됩니다. 즉, 변수 "z"를 사용하여 정수를 저장하므로 이에 대한 메모리를 할당해야 함을 나타냅니다. 변수에 대해서는 잠시 후에 더 이야기하겠습니다.

알다시피 알고리즘은 숫자뿐만 아니라 대수식, 수식(예: "-side/2"). 컴퓨터 과학에서는 이러한 표현을 산수. 언어의 규칙은 알고리즘을 작성할 때 숫자를 쓸 수 있는 곳이면 어디든지 임의의 산술식을 쓸 수 있도록 합니다.

다음 문제를 고려하십시오.

프로그램에 대한 입력은 2 * 10 9 를 초과하지 않는 자연수입니다. 이 숫자의 자릿수의 합을 결정하십시오.

언뜻보기에 작업은 매우 간단합니다. 숫자에서 숫자를 일관되게 선택하고 합계에 추가해야합니다. 동시에 숫자의 자릿수가 변경될 수 있으므로 에 대한 주기 매개변수의 최종 값이 정의되지 않고 적용에 어려움이 있음이 분명합니다.

순환 알고리즘명령어 세트가 시작되기 전에 특정 명령어 세트의 반복 횟수를 얻을 수 없는 경우 조건부 루프가 사용됩니다.

동안 루프

Kumir 프로그래밍 언어의 이러한 구성 중 하나는 다음과 같습니다. 싸이클 바이. 흔히 말하는 이 주기는 전제 조건이 있는 루프, 형식은 다음과 같습니다.

  • NC 바이 조건
  • 루프 바디

뒤에 쓰여진 조건 관계동안은 부울 표현식입니다.

루프는 다음과 같이 실행됩니다.

  1. 논리식의 값이 평가됩니다.
  2. 계산 결과가 no 이면 루프가 종료되고 Kumir는 while 루프 이후의 첫 번째 명령으로 이동합니다. 계산 결과가 yes이면 루프 본문이 실행된 후 표현식의 값이 새 값으로 다시 계산됩니다.

중요한! 루프의 본문에서 루프의 끝을 보장하기 위해 조건과 관련된 일부 값은 여전히 ​​변경되어야 합니다. 그렇지 않으면 루프가 영원할 수 있습니다.

이제 while 루프를 사용하여 문제를 해결해 보겠습니다.

  • 입력 번호
  • nc 동안 num > 0
  • 합계:= 합계 + mod(num, 10 )
  • 숫자:= div(숫자, 10)
  • 인출 금액

따라서 루프 본문을 실행할 때마다 숫자의 마지막 숫자가 금액에 추가된 다음 숫자가 10배로 줄어듭니다. 분명히, 결국 num은 0이 되고 그 후에 루프가 종료됩니다.

그때까지 사이클

Idol에는 다음과 같은 형식을 가진 until 루프라고 하는 조건부 루프의 또 다른 변형이 있습니다.

  • 루프 바디
  • 상태의 kc

루프의 본문 전에 조건이 검사되는 동안 루프에 있는 경우 루프에서 then - 이후까지. 따라서 이 주기를 흔히 사후 조건이 있는 루프. 이러한 루프의 본문은 항상 적어도 한 번 실행됩니다.

그때까지 루프 작업은 다음과 같이 진행됩니다.

  1. 루프 본문이 실행됩니다.
  2. 논리식의 값이 평가됩니다. 계산 결과가 no 이면 루프의 본문이 다시 실행되기 시작하는 식으로 계산 결과가 yes 이면 루프가 종료되고 Kumir는 이후 다음 명령의 실행을 진행합니다. 루프.

작업. 프로그램에 대한 입력은 0으로 끝나는 정수 시퀀스입니다. 시퀀스에서 음수의 개수를 찾습니다. 시퀀스에 0이 아닌 숫자가 하나 이상 포함되어 있음이 보장됩니다.

(프로그램 코드 스니펫)

  • 입력 번호
  • 숫자 0이면
  • 다음 k:= k + 1
  • kts at num = 0
  • 출력 k