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

프로그램에 대한 입력은 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

나선을 그리는 알고리즘:

서랍 사용

일찍
. 지점으로 이동(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"). 컴퓨터 과학에서는 이러한 표현을 산수. 언어의 규칙은 알고리즘을 작성할 때 숫자를 쓸 수 있는 곳이면 어디든지 임의의 산술식을 쓸 수 있도록 합니다.

작업 카드

    키보드에서 입력한 n - 정수 중에서 음수를 찾습니다.

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

    n - 정수를 순차적으로 입력합니다. 시퀀스에서 5의 수 찾기

    n - 정수를 순차적으로 입력합니다. 최대값과 최대값의 차이를 찾으십시오. 최소값주어진 숫자

    키보드에서 입력한 n - 정수 중에서 음수를 찾습니다.

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

    n - 정수를 순차적으로 입력합니다. 시퀀스에서 5의 수 찾기

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

    키보드에서 입력한 n - 정수 중에서 음수를 찾습니다.

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

    n - 정수를 순차적으로 입력합니다. 시퀀스에서 5의 수 찾기

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

    키보드에서 입력한 n - 정수 중에서 음수를 찾습니다.

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

    n - 정수를 순차적으로 입력합니다. 시퀀스에서 5의 수 찾기

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

KUMIR 시스템의 중첩 루프 및 분기

컴퓨터 과학의 기본 개념 중 하나는 알고리즘의 개념입니다. "알고리즘"이라는 용어의 기원은 수학과 관련이 있습니다. 이 단어는 중세 동양의 뛰어난 수학자 Muhammad al-Khwarizmi (787-850)의 이름의 라틴어 철자 인 Algorithmi에서 유래했습니다. 그의 책 "인디언 계정에 관하여"에서 그는 아라비아 숫자를 사용하여 자연수를 작성하는 규칙과 열에서 자연수를 사용하는 규칙을 공식화했습니다.

미래에 알고리즘은 초기 데이터에서 필요한 결과를 얻을 수 있도록 하는 일련의 작업을 결정하는 정확한 처방이라고 부르기 시작했습니다.

알고리즘은 사람 또는 자동화된 장치에 의해 실행되도록 설계될 수 있습니다. 가장 단순한 알고리즘일지라도 알고리즘을 만드는 것은 창의적인 과정입니다. 생명체에게만 제공되며, 오랫동안인간에게만 해당되는 것으로 여겨진다. XII 세기에. 그의 수학 논문의 라틴어 번역이 만들어졌으며 유럽인들은 소수 자릿수 시스템과 여러 자릿수 산술 규칙에 대해 배웠습니다. 이러한 규칙을 당시에는 알고리즘이라고 했습니다.

위에 주어진 알고리즘의 정의는 엄격한 것으로 간주될 수 없습니다. "정확한 처방" 또는 "원하는 결과를 얻을 수 있도록 하는 일련의 작업"이 무엇인지 완전히 명확하지 않습니다. 따라서 알고리즘을 다른 명령어와 구별할 수 있도록 하는 알고리즘의 몇 가지 일반적인 속성을 공식화하는 것이 일반적입니다.

이러한 속성은 다음과 같습니다.

불연속 (불연속성, 분리) - 알고리즘은 문제를 해결하는 프로세스를 간단한(또는 이전에 정의된) 단계의 순차적 실행으로 나타내야 합니다. 알고리즘에서 제공하는 각 작업은 이전 작업의 실행이 종료된 후에만 실행됩니다.

확실성 - 알고리즘의 각 규칙은 명확하고 모호하지 않아야 하며 임의의 여지가 없어야 합니다. 이 속성으로 인해 알고리즘 실행은 본질적으로 기계적이며 해결 중인 문제에 대한 추가 지침이나 정보가 필요하지 않습니다.

능률 (유한성) – 알고리즘은 유한한 단계의 문제 해결을 이끌어야 합니다.

매스 캐릭터 - 문제 해결을 위한 알고리즘은 일반적인 형태로 개발된다. 즉, 초기 데이터만 다른 특정 부류의 문제에 적용할 수 있어야 한다. 이 경우 알고리즘의 적용 영역이라고 하는 특정 영역에서 초기 데이터를 선택할 수 있다.

알고리즘을 작성하는 방법

알고리즘을 작성하는 데 다양한 수단이 사용됩니다. 수단의 선택은 실행 중인 알고리즘의 유형에 따라 결정됩니다.

알고리즘을 작성하는 주요 방법은 다음과 같습니다.

- 언어 적 알고리즘이 인간(자연) 언어로 설명될 때. 자국어는 자연어(러시아어, 영어, 독일어 등)입니다.

- 상징적 알고리즘이 기호 집합을 사용하여 설명되고 프로그램인 경우(프로그램은 프로그래밍 언어를 사용하여 작성됨)

- 그래픽 집합을 사용하여 알고리즘을 설명할 때 그래픽 이미지(블록 다이어그램).

일반적으로 사용되는 녹음 방법은 다음과 같습니다.그래픽 표기법 순서도를 사용하고문자 표기법 일부 알고리즘 언어 사용 - 프로그램.

~에 그래픽 방식기록, 순서도가 컴파일되고, 사용 기호(기하학적 수치)는 알고리즘의 다양한 부분을 나타냅니다. 블록 다이어그램의 요소는 그림에 나와 있습니다.

프로그래밍 시스템 KUMIR

알고리즘 주제를 마스터할 때 KUMIR 프로그래밍 시스템을 사용합니다.

KuMir(교육 MIR 세트)는 중등 및 고등 학교에서 초등 컴퓨터 과학 및 프로그래밍 과정을 지원하도록 설계된 프로그래밍 시스템입니다.

KuMir 시스템은 러시아어 어휘가 포함된 학교 알고리즘 언어와 내장 실행기 Robot 및 Draftsman 등을 사용합니다.

프로그램을 입력할 때 KuMir는 탐지된 모든 오류에 대한 프로그램 마진을 보고하여 정확성을 지속적으로 완전히 제어합니다.

에서 프로그램을 실행할 때 단계별 모드 KuMir는 할당 작업의 결과와 논리식의 값을 필드에 표시합니다. 이를 통해 프로그래밍의 기본을 마스터하는 프로세스의 속도를 높일 수 있습니다.

그래픽 아티스트 로봇

그래픽 실행기 Robot을 사용하면 프로그래밍의 기본을 마스터하고 주요 알고리즘 구조의 작동을 이해할 수 있습니다.

그래픽 아티스트제어 개체입니다. 팩우리는 그들을 지배할 것입니다.

로봇 수행자는 일부시작 환경 - 셀로 분할된 직사각형 필드 사이에 벽이 있을 수 있습니다.

로봇은 벽을 우회하고 세포 위에 페인팅을 하여 필드 주위를 이동할 수 있습니다. 로봇은 벽을 통과할 수 없지만 옆에 벽이 있는지 확인할 수 있습니다. 로봇은 필드를 경계로 하는 사각형을 넘어갈 수 없습니다.

아르 자형
봇은 명령을 실행할 수 있습니다
: 위, 아래, 오른쪽, 왼쪽, 위에 페인트.

로봇은 상태를 확인할 수 있습니다 : 상단 자유, 하단 자유, 우측 자유, 좌측 자유, 입자 추가 ~ 아니다 조건을 뒤집습니다. 위로부터 자유롭지 않고, 아래로부터 자유롭지 않고, 우로부터 자유롭지 않고, 좌로부터 자유롭지 않다.

기본 알고리즘 구조

    세 가지 기본 알고리즘 구조(구성)가 있습니다.-선형(다음), 분기 그리고 주기, 모든 알고리즘을 구성할 수 있습니다.각 알고리즘 구조에는 하나의 진입점과 하나의 종료점이 있습니다.

    우리는 학교 언어와 블록 다이어그램 형태로 알고리즘을 작성할 것입니다.

선형 구조

선형 구조 가장 간단한 알고리즘 구성 - 명령은 차례로 순차적으로 실행됩니다.

예시:

순환 구조(주기)

    순환 구조(주기) 동일한 명령의 다중 실행을 제공합니다. 순환 구조에는 여러 유형이 있습니다.

    모든 순환 구조는 두 부분으로 구성됩니다.헤더그리고 사이클 바디.

    루프를 실행하는 동안 반복되는 명령 집합을 호출합니다.사이클 바디.

    헤더 루프 본체의 반복 횟수를 결정합니다.

반복 횟수(회)에 대한 루프

체크 안함 N 한 번

<команда>

kts

예시:

사용 로봇

일찍
.
체크 안함 5 한 번
. . 칠하다
. . 위로
.
kts

범죄자

전제 조건이 있는 루프(아직)

(입력 알고리즘 언어)

체크 안함 안녕 <условие>

<команда>

에게

예시:

사용 로봇

일찍

체크 안함 안녕 탑 느슨한
칠하다
위로
kts

범죄자

사후 조건이 있는 루프(at)

(알고리즘 언어의 표기법)

N

<команда>

cc_at <условие>

예시:

사용 로봇

일찍
체크 안함

페인트 칠하다; 위로

cc_at 무료로 남겨둔

범죄자

분기 구조.

    분기 구조. 일부 문제를 해결하려면 특정 조건의 충족에 따라 다른 조치가 필요합니다. 이러한 경우 알고리즘 분기에 대해 이야기합니다.

    "분기" 구조를 구현하기 위해 학교 EL의 두 가지 구조화된 명령(if 및 선택)이 사용되며, 각 명령은 완전하거나 불완전할 수 있습니다.

    순서도 및 학교 언어로<условие>둘 중 하나를 초래할 수 있는 부울 표현식입니다. 가능한 값 - 진실또는 거짓. 학교 언어에서 이러한 값은 예 및 아니오로 작성됩니다. 프로그래밍 언어는 종종 값을 사용합니다진실그리고 거짓. 컴퓨터는 이러한 값을 1과 0으로 저장합니다.

풀 브랜치

(알고리즘 언어의 표기법)

이자형 만약에 <условие>
. .
그 다음에 <команда1>
. .
그렇지 않으면 <команда2>
모두

예시:

사용 로봇
branching_full

일찍
.
만약에 탑 느슨한
. .
그 다음에 위로
. .
그렇지 않으면 아래로
.
모두

범죄자

불완전한 가지

(알고리즘 언어의 표기법)

이자형 만약에 <условие>
. .
그 다음에 <команда1>
모두

예시:

사용 로봇
분기_불완전

일찍
.
만약에 탑 느슨한
. .
그 다음에 위로
.
모두

범죄자

보조 알고리즘(절차)

    기본 작업의 일부 하위 작업을 해결하고 원칙적으로 반복적으로 수행하는 알고리즘을 보조 알고리즘이라고 합니다.

    프로그래밍 언어로 작성된 보조 알고리즘을 서브루틴 또는 프로시저라고 합니다.

    보조 알고리즘은 이름을 통해 주 프로그램에서 호출됩니다. 보조 알고리즘은 주 알고리즘 다음에 작성됩니다. 보조 알고리즘에는 이름이 있어야 합니다.

사용 로봇

일찍
아래로

정사각형
아래로

아래로
범죄자

알 스퀘어
일찍

칠하다

오른쪽

칠하다

아래로

칠하다

왼쪽으로

칠하다
범죄자

중첩 루프 및 분기

로봇으로 일부 작업을 해결할 때 중첩 루프 또는 분기를 사용해야 합니다.

ucl이 다른 루프 안에 있으면 중첩이라고 합니다.

while 루프의 예를 사용하여 중첩 루프를 고려하십시오.

루프가 루프 본문이 반복되는 횟수를 결정하는 루프 헤더로 구성된다는 것을 알고 있습니다.

루프의 본문은 루프가 실행될 때 반복되는 루프의 일부입니다.

루프의 본문은 명령, 여러 명령 또는 다른 루프나 분기가 될 수 있습니다.

루프 본문이 다른 루프 또는 분기인 경우 중첩이라고 합니다.

중첩 루프

첫 번째 단계에서 외부 루프는 완료될 때까지 실행되는 내부 루프를 호출한 후 제어가 외부 루프의 본문으로 전송됩니다. 두 번째 패스에서 외부 루프는 내부 ​​루프를 다시 호출합니다. 그리고 외부 루프가 끝날 때까지 계속됩니다.

중첩 분기

중첩 분기 및 루프 문제의 솔루션을 고려하십시오.

작업 1 로봇은 구멍이 있는 벽에 있고 벽을 따라 오른쪽으로 이동하며 로봇은 구멍이 있는 모든 셀 위에 페인트를 칠해야 합니다.

사용 로봇 일찍
.
체크 안함 안녕 오른쪽에와 함께 자유로이
체크 안함 안녕 바닥 느슨한
.페인트 오버;
오른쪽
. .
kts
. . 오른쪽
.
kts 범죄자 에서
우리는 외부 while 루프와 중첩된 while 루프로 문제를 해결하기 위한 알고리즘을 남깁니다.

아르 자형 우리는 외부 while 루프와 중첩 분기를 사용하여 동일한 문제를 해결합니다.

외부 while 루프와 중첩된 while 루프로 동일한 문제를 해결해 보겠습니다.

실행 제어 로봇 KUMIR 시스템에서

로봇은 특정 환경(직사각형 체크 필드)에 존재합니다. 벽은 필드의 일부 셀 사이에 위치할 수 있습니다. 일부 셀은 음영 처리될 수 있습니다(그림 3.11).

로봇은 필드의 정확히 한 셀을 차지합니다.

상,하,좌,우 명령에 따라 로봇은 지정된 방향으로 다음 셀로 이동합니다. 도중에 벽이 있으면 실패가 발생합니다. 다음 명령을 실행할 수 없다는 메시지가 표시됩니다.

페인트 칠하라는 명령에 따라 로봇은 자신이 서 있는 셀 위에 페인트를 칠합니다. 셀이 이미 칠해진 경우 눈에 보이는 변경 사항이 발생하지 않더라도 다시 칠해집니다.

로봇은 올바르게 작성된 명령만 실행할 수 있습니다. down 명령 대신 적어두면 로봇은 이 항목을 이해하지 못하고 즉시 오류를 보고합니다.

영형
오류: 1 구문; 2. 논리적

장면 설명은 다음 위치에 저장됩니다. 텍스트 파일특수 형식(.fil 형식).

현재의- 로봇이 있는 환경 이 순간(로봇의 위치에 대한 정보 포함).

- 로봇을 이용한 프로그램 실행 초기에 로봇이 강제로 배치되는 환경.

운영 절차:


  1. 묻다 시작 환경작업에 따라:
메뉴 도구 → 로봇 시작 환경 변경 (작업 조건에 따라 환경 그리기, 이름 지정, 개인 폴더에 저장)

2. 계약자 지정:

메뉴 삽입 → 로봇 사용

3. 문제 해결을 위한 알고리즘을 작성하십시오.

4. 알고리즘 실행 (메뉴 실행 → 연속 실행 / F9)

KUMIR 시스템에서 실행 로봇의 명령 시스템




동작

위로

로봇이 1칸 위로 이동합니다.

아래로

로봇이 1칸 아래로 이동합니다.

왼쪽으로

로봇이 왼쪽으로 1칸 이동

오른쪽

로봇이 오른쪽으로 1칸 이동

칠하다

로봇은 자신이 있는 셀을 페인트합니다.

바로 무료

로봇은 해당 실행을 확인합니다. 단순한자귀

무료로 남겨둔



탑 느슨한



바닥 느슨한



셀이 음영 처리됨



케이지 청소



순환 알고리즘

주기특정 조건이 참이 될 때까지 행동을 반복하는 조직 .

루프 본체 -반복 가능한 일련의 작업.

상태 -부울 표현식(단순 또는 복합(복합))
주기 유형:

1."n번 반복" 반복 2. "안녕" 반복
nc n 번 안녕
. . 루프 바디. . 루프 본체
kts kts

예시: 안녕바로 무료


주기의 일반 보기 "n번 반복:

n번 반복


kts

while 루프의 일반적인 보기:

할 일


복합 조건하나 또는 그 이상으로 형성 간단한 조건및 서비스 단어 그리고, 또는, 아닙니다.


복합 상태 A와 B(여기서 A, B는 단순조건) 그 안에 포함된 2개의 단순조건이 각각 만족될 때 만족된다.

하자 - 위에 무료- 오른쪽에 무료그런 다음 복합 조건 A와 B- 상단이 무료이고 오른쪽이 무료입니다.


복합 조건 A 또는 B 포함된 두 가지 간단한 조건 중 하나 이상이 충족되면 충족됩니다. 상단 무료 또는 오른쪽 무료
복합 상태 아니다- 조건 A가 충족되지 않을 때 충족됨.

예시: A를 음영 처리된 셀이라고 하자(단순 조건).

A가 아닌 복합 상태 확인:

a) A - 완료, NOT A(음영 처리되지 않음) - 완료되지 않음.

b) A - 완료되지 않음, NOT A(음영 처리되지 않음) - 완료됨.


분기 명령

분기 -특정 조건의 충족 여부에 따라 하나 또는 다른 일련의 작업이 수행되는 작업 구성의 한 형태.

IF 명령의 일반 보기:

만약에 그 다음에 그렇지 않으면

KUMIR 언어:

전체 분기: 부분 분기:
만약에 그 다음에 만약에 그 다음에

그렇지 않으면

모두

도우미 알고리즘- 주요 문제의 일부 하위 문제를 해결하는 알고리즘.

KUMIR 시스템에서 보조 알고리즘은 메인 프로그램의 끝(서비스 단어 뒤에 범죄자)는 이름으로 메인 프로그램에서 실행을 위해 호출됩니다.

설문조사 및 과제

1. 로봇을 원래 위치에서 셀 B로 이동시키는 세 가지 명령의 모든 알고리즘을 제공하십시오.

로봇이 다음을 수행하는 동안 이 작업에 대한 알고리즘이 있습니까?

가) 두 단계 b) 4단계 c) 5단계 d) 일곱 단계?


  1. Petya는 로봇을 A 셀에서 B 셀로 옮기는 알고리즘을 만들었습니다. 로봇을 B에서 A로 이동하고 동일한 셀을 채우는 알고리즘을 얻기 위해 Kolya는 이 알고리즘으로 무엇을 해야 합니까?


7. 두 가지가 알려져 있습니다. 보조 알고리즘로봇

로봇이 다음 기본 알고리즘을 수행할 때 어떤 일이 발생하는지 그립니다.


ㅏ)

NC 5번


패턴_1

오른쪽; 오른쪽;


비)

NC 7번


패턴_2

오른쪽; 오른쪽


안에)
오른쪽; 오른쪽; 오른쪽

위로; 위로

오른쪽; 오른쪽; 오른쪽

내려가는 길; 아래로


G)
오른쪽; 오른쪽
오른쪽; 오른쪽

8. 로봇이 지정된 셀을 칠할 알고리즘을 만듭니다.



9. 로봇의 오른쪽 어딘가에 벽이 있는 것으로 알려져 있다. 로봇이 여러 셀을 벽까지 칠하고 원래 위치로 돌아가는 제어 하에 알고리즘을 구성합니다.

10. 로봇의 오른쪽 어딘가에 음영 처리된 셀이 있는 것으로 알려져 있습니다.

에서 로봇이 음영 처리된 셀까지 여러 셀을 칠하고 원래 위치로 돌아가는 알고리즘을 그대로 두십시오.

11. 로봇은 수평 복도의 왼쪽 입구 부근에 위치하는 것으로 알려져 있다.

12. 로봇은 수평 복도 어딘가에 있는 것으로 알려져 있다. 복도의 어떤 세포도 칠해지지 않았습니다.

로봇이 이 복도의 모든 셀에 페인트를 칠하고 원래 위치로 돌아가는 제어 하에 알고리즘을 구성합니다.


13. 로봇 오른쪽에 있는 10개의 셀 행에서 일부 셀은 음영 처리됩니다.

에서 셀을 그리는 알고리즘을 그대로 두십시오.

a) 각 음영 셀 아래;

b) 각 음영 셀 위와 아래.


14. 다음 알고리즘 조각의 정확성에 대해 무엇을 말할 수 있습니까?

안녕셀이 음영 처리됨

만약에바로 무료 그 다음에

오른쪽; 칠하다

에게

15. 로봇이 세 개의 미로에서 B 셀에 도달할 수 있는 프로그램을 작성하십시오.


16. 로봇이 필드의 왼쪽 하단 모서리에서 오른쪽 상단으로 복도를 따라 갈 수 있는 프로그램을 작성하십시오. 복도는 한 칸의 너비를 가지며 왼쪽-아래-오른쪽-위 방향으로 뻗어 있습니다. 가능한 복도의 예가 그림에 나와 있습니다.



아다치 GIA


  1. 복도1. 로봇은 수직 복도 어딘가에 있습니다. 복도의 어떤 세포도 칠해지지 않았습니다. 로봇이 이 복도의 모든 셀을 칠하고 원래 위치로 돌아가는 알고리즘을 만듭니다.

  1. 에게
    필요한

    주어진
    복도2. 로봇은 좁은 수직 복도의 상단 셀에 있습니다. 복도의 너비는 하나의 셀이며 복도의 길이는 임의적일 수 있습니다.

로봇의 초기 위치의 가능한 변형이 그림에 표시됩니다(로봇은 문자 "P"로 표시됨)

복도 내부의 모든 셀을 채우고 로봇을 원래 위치로 되돌리는 로봇 알고리즘을 작성하십시오. 예를 들어 위 그림의 경우 로봇은 다음 셀 위에 페인트해야 합니다(그림 참조).


  1. 끝없이 펼쳐진 들판에는 긴 수평 벽이 있다. 벽의 길이는 알 수 없습니다. 로봇은 벽 바로 위의 케이지 중 하나에 있습니다. 로봇의 초기 위치도 불명. 가능한 위치 중 하나:
시간


필요한

주어진
벽의 크기와 로봇의 초기 위치에 관계없이 벽 위와 인접한 모든 셀을 그리는 로봇 알고리즘을 작성하십시오. 예를 들어, 주어진 도면에 대해 로봇은 다음 셀을 페인트해야 합니다.

로봇의 최종 위치는 임의적일 수 있습니다. 알고리즘을 실행할 때 로봇이 파괴되어서는 안됩니다.



  1. 무한 필드에 긴 수직 벽이 있습니다. 벽의 길이는 알 수 없습니다. 로봇은 벽 바로 오른쪽에 위치한 케이지 중 하나에 있습니다. 로봇의 초기 위치도 불명. 로봇의 가능한 위치 중 하나가 그림에 표시됩니다(로봇은 문자 "P"로 표시됨): 벽에 인접한 모든 셀을 페인트하는 작업 알고리즘 작성: 왼쪽, 위에서 시작 도색되지 않은 하나를 통해; 오른쪽에 음영이 있는 아래쪽에서 시작하여 하나를 통과합니다. 로봇은 다음을 만족하는 셀에만 페인트를 칠해야 합니다. 이 조건. 예를 들어 위 그림의 경우 로봇은 다음 셀을 채워야 합니다(그림 참조). 로봇의 최종 위치는 임의적일 수 있습니다. 알고리즘은 임의의 벽 크기와 로봇의 유효한 초기 위치에 대한 문제를 해결해야 합니다. 알고리즘을 실행할 때 로봇이 무너지지 않아야 합니다.


수직 벽의 왼쪽과 수평 벽 위에 있고 인접하는 모든 셀을 그리는 로봇용 알고리즘을 작성하십시오. 로봇은 이 조건을 충족하는 셀에만 페인트를 칠해야 합니다. 예를 들어, 위 그림의 경우 로봇은 다음 셀을 페인트해야 합니다(그림 참조).


시간 벽에 인접한 셀을 왼쪽에서 시작하여 하나를 통해 위와 아래로 그리는 로봇 알고리즘을 작성하십시오. 로봇은 이 조건을 충족하는 셀에만 페인트를 칠해야 합니다. 예를 들어, 주어진 그림 a)에 대해 로봇은 다음 셀을 페인트해야 합니다(그림 b 참조).

로봇의 최종 위치는 임의적일 수 있습니다. 알고리즘은 임의의 벽 크기와 로봇의 유효한 초기 위치에 대한 문제를 해결해야 합니다.



아르 자형

  1. 무한 필드에 긴 수직 벽이 있습니다. 벽의 길이는 알 수 없습니다. 로봇은 벽 바로 왼쪽에 위치한 케이지 중 하나에 있습니다. 로봇의 초기 위치도 불명. 로봇의 가능한 위치 중 하나가 그림에 표시됩니다(로봇은 문자 "P"로 표시됨).
벽에 인접한 모든 셀을 칠하는 알고리즘을 작성하십시오.

  • 왼쪽에 모두;

  • 오른쪽, 도색되지 않은 상단에서 시작하여 하나를 통과합니다.
로봇은 이 조건을 충족하는 셀에만 페인트를 칠해야 합니다.


1102_GIA2011

무한 필드에는 두 개의 수평 벽이 있습니다. 벽의 길이는 알 수 없습니다. 벽 사이의 거리는 알 수 없습니다. 로봇은 왼쪽 가장자리에 있는 케이지의 하단 벽 위에 있습니다. 맨 아래 벽 위와 맨 위 벽 아래에 있으며 인접한 모든 셀을 그리는 로봇용 알고리즘을 작성하십시오. 로봇은 이 조건을 충족하는 셀에만 페인트를 칠해야 합니다. 예를 들어 위 그림의 경우 로봇은 다음 셀을 채워야 합니다(그림 참조).

로봇의 최종 위치는 임의적일 수 있습니다. 알고리즘은 임의의 필드 크기와 직사각형 필드 내부의 허용 가능한 벽 위치에 대한 문제를 해결해야 합니다. 알고리즘을 실행할 때 로봇이 무너지지 않아야 합니다.



1103_GIA_2011


무한의 장에는 수평의 벽이 있다. 벽의 길이는 알 수 없습니다. 벽의 오른쪽 끝에서 수직 벽이 아래쪽으로 뻗어 있으며 길이도 알 수 없습니다. 로봇은 왼쪽 가장자리에 있는 케이지의 수평 벽 위에 있습니다. 그림은 다음 중 하나를 보여줍니다. 가능한 방법벽과 로봇의 위치(로봇은 문자 "P"로 표시됨).

수평 벽 위에 있고 수직 벽의 오른쪽에 인접하고 있는 모든 셀을 그리는 로봇용 알고리즘을 작성하십시오. 로봇은 이 조건을 충족하는 셀에만 페인트를 칠해야 합니다. 예를 들어, 위 그림의 경우 로봇은 다음 셀을 페인트해야 합니다(그림 참조).