diff --git a/kumir/KumirLexer.g4 b/kumir/KumirLexer.g4
new file mode 100644
index 0000000000..814bf4400f
--- /dev/null
+++ b/kumir/KumirLexer.g4
@@ -0,0 +1,143 @@
+// KumirLexer.g4
+// ANTLR v4 Lexer Grammar for the Kumir language.
+// Source: Refined based on official documentation and extensive testing
+// against K.Y. Polyakov's examples. Developed collaboratively.
+// Author: [Your Name/GitHub Handle]
+// License: MIT License
+
+lexer grammar KumirLexer;
+
+options { caseInsensitive = true; }
+
+// --- Keywords (Core Language) ---
+// Keywords are case-insensitive (both lowercase and uppercase Cyrillic are matched).
+MODULE : 'модуль';
+ENDMODULE : ('конец' WS 'модуля' | 'конецмодуля' | 'конец_модуля');
+ALG_HEADER : 'алг';
+ALG_BEGIN : 'нач';
+ALG_END : 'кон';
+PRE_CONDITION : 'дано';
+POST_CONDITION : 'надо';
+ASSERTION : 'утв';
+LOOP : 'нц';
+ENDLOOP_COND : ('кц' WS 'при' | 'кц_при');
+ENDLOOP : 'кц';
+IF : 'если';
+THEN : 'то';
+ELSE : 'иначе';
+FI : 'все';
+SWITCH : 'выбор';
+CASE : 'при';
+INPUT : 'ввод';
+OUTPUT : 'вывод';
+ASSIGN : ':=';
+EXIT : 'выход';
+PAUSE : 'пауза';
+STOP : 'стоп';
+IMPORT : 'использовать';
+FOR : 'для';
+WHILE : 'пока';
+TIMES : 'раз';
+FROM : 'от';
+TO : 'до';
+STEP : 'шаг';
+NEWLINE_CONST : 'нс';
+NOT : 'не';
+AND : 'и';
+OR : 'или';
+OUT_PARAM : 'рез';
+IN_PARAM : 'арг';
+INOUT_PARAM : ('аргрез' | 'арг' WS 'рез' | 'арг_рез');
+RETURN_VALUE : 'знач';
+
+// --- Data Types ---
+INTEGER_TYPE : 'цел';
+REAL_TYPE : 'вещ';
+BOOLEAN_TYPE : 'лог';
+CHAR_TYPE : 'сим';
+STRING_TYPE : 'лит';
+TABLE_SUFFIX : 'таб';
+// Actor-specific types
+KOMPL_TYPE : 'компл';
+COLOR_TYPE : 'цвет';
+SCANCODE_TYPE : 'сканкод';
+FILE_TYPE : 'файл';
+// Explicit array/table types (handle variations with space, no space, underscore)
+INTEGER_ARRAY_TYPE : ('цел' WS? 'таб' | 'цел_таб');
+REAL_ARRAY_TYPE : ('вещ' WS? 'таб' | 'вещ_таб');
+CHAR_ARRAY_TYPE : ('сим' WS? 'таб' | 'сим_таб');
+STRING_ARRAY_TYPE : ('лит' WS? 'таб' | 'лит_таб');
+BOOLEAN_ARRAY_TYPE : ('лог' WS? 'таб' | 'лог_таб');
+
+// --- Constants ---
+TRUE : 'да';
+FALSE : 'нет';
+// Color constants
+PROZRACHNIY : 'прозрачный';
+BELIY : 'белый';
+CHERNIY : 'чёрный' | 'черный';
+SERIY : 'серый';
+FIOLETOVIY : 'фиолетовый';
+SINIY : 'синий';
+GOLUBOY : 'голубой';
+ZELENIY : 'зелёный' | 'зеленый';
+ZHELTIY : 'жёлтый' | 'желтый';
+ORANZHEVIY : 'оранжевый';
+KRASNIY : 'красный';
+
+// --- Operators ---
+POWER : '**';
+GE : '>=' | '≥';
+LE : '<=' | '≤';
+NE : '<>' | '≠';
+PLUS : '+';
+MINUS : '-';
+MUL : '*';
+DIV : '/';
+EQ : '=';
+LT : '<';
+GT : '>';
+LPAREN : '(';
+RPAREN : ')';
+LBRACK : '[';
+RBRACK : ']';
+LBRACE : '{';
+RBRACE : '}';
+COMMA : ',';
+COLON : ':';
+SEMICOLON : ';';
+ATAT : '@@';
+AT : '@';
+DIV_OP : 'div';
+MOD_OP : 'mod';
+
+// --- Literals ---
+CHAR_LITERAL : '\'' ( EscapeSequence | ~['\\\r\n] ) '\'' ;
+STRING : '"' ( EscapeSequence | ~["\\\r\n] )*? '"'
+ | '\'' ( EscapeSequence | ~['\\\r\n] )*? '\''
+ ;
+REAL : (DIGIT+ '.' DIGIT* | '.' DIGIT+) ExpFragment?
+ | DIGIT+ ExpFragment
+ ;
+INTEGER : DecInteger | HexInteger ;
+
+// --- Identifier ---
+ID : LETTER (LETTER | DIGIT | '_' | '@')* ;
+
+// --- Comments ---
+LINE_COMMENT : '|' ~[\r\n]* -> channel(HIDDEN);
+DOC_COMMENT : '#' ~[\r\n]* -> channel(HIDDEN);
+
+// --- Whitespace ---
+WS : [ \t\r\n]+ -> skip;
+
+// --- Fragments ---
+fragment DIGIT : [0-9];
+fragment HEX_DIGIT : [0-9a-fA-F];
+fragment LETTER : [a-zA-Zа-яА-ЯёЁ];
+fragment DecInteger : DIGIT+;
+fragment HexInteger : '$' HEX_DIGIT+;
+fragment ExpFragment: [eE] [+-]? DIGIT+;
+fragment EscapeSequence
+ : '\\' [btnfr"'\\]
+ ;
\ No newline at end of file
diff --git a/kumir/KumirParser.g4 b/kumir/KumirParser.g4
new file mode 100644
index 0000000000..b9db926ea0
--- /dev/null
+++ b/kumir/KumirParser.g4
@@ -0,0 +1,385 @@
+// KumirParser.g4
+// ANTLR v4 Parser Grammar for the Kumir language.
+// This version correctly handles complex algorithm names (including keywords/numbers)
+// by using a specific rule `algorithmNameTokens` in the header.
+// Source: Refined based on official documentation and extensive testing
+// against K.Y. Polyakov's examples. Developed collaboratively.
+// Author: [Your Name/GitHub Handle]
+// License: MIT License
+
+parser grammar KumirParser;
+
+options { tokenVocab=KumirLexer; } // Use tokens from KumirLexer.g4
+
+/*
+ * =============================================================================
+ * Helper Rules: Literals, Identifiers, Expressions
+ * (Defined first as they are used by higher-level rules)
+ * =============================================================================
+ */
+qualifiedIdentifier
+ : ID // Currently simple ID, can be extended for module.member later
+ ;
+
+literal
+ : INTEGER | REAL | STRING | CHAR_LITERAL | TRUE | FALSE | colorLiteral | NEWLINE_CONST
+ ;
+
+colorLiteral
+ : PROZRACHNIY | BELIY | CHERNIY | SERIY | FIOLETOVIY | SINIY | GOLUBOY | ZELENIY | ZHELTIY | ORANZHEVIY | KRASNIY
+ ;
+
+expressionList // Used inside array literals {}
+ : expression (COMMA expression)*
+ ;
+
+arrayLiteral // e.g., {1, 2, 3}
+ : LBRACE expressionList? RBRACE
+ ;
+
+// Expressions are defined from lowest to highest precedence
+primaryExpression // The most basic elements
+ : literal
+ | qualifiedIdentifier // Variable or function call without arguments
+ | RETURN_VALUE // 'знач' keyword
+ | LPAREN expression RPAREN // Parenthesized expression
+ | arrayLiteral
+ ;
+
+argumentList // e.g., (a, b+c, 5)
+ : expression (COMMA expression)*
+ ;
+
+indexList // e.g., [i], [i, j], [k:m]
+ : expression (COLON expression)? // Single index or slice
+ | expression COMMA expression // 2D index
+ ;
+
+postfixExpression // Handles array/string access and function calls after a primary expression
+ : primaryExpression ( LBRACK indexList RBRACK | LPAREN argumentList? RPAREN )*
+ ;
+
+unaryExpression // Handles unary plus, minus, not
+ : (PLUS | MINUS | NOT) unaryExpression | postfixExpression
+ ;
+
+powerExpression // Handles exponentiation (**)
+ : unaryExpression (POWER powerExpression)?
+ ;
+
+multiplicativeExpression // Handles *, /, div, mod
+ : powerExpression ((MUL | DIV | DIV_OP | MOD_OP) powerExpression)*
+ ;
+
+additiveExpression // Handles +, -
+ : multiplicativeExpression ((PLUS | MINUS) multiplicativeExpression)*
+ ;
+
+relationalExpression // Handles <, >, <=, >=
+ : additiveExpression ((LT | GT | LE | GE) additiveExpression)*
+ ;
+
+equalityExpression // Handles =, <>
+ : relationalExpression ((EQ | NE) relationalExpression)*
+ ;
+
+logicalAndExpression // Handles 'и' (AND)
+ : equalityExpression (AND equalityExpression)*
+ ;
+
+logicalOrExpression // Handles 'или' (OR)
+ : logicalAndExpression (OR logicalAndExpression)*
+ ;
+
+expression // Top-level expression rule
+ : logicalOrExpression
+ ;
+
+/*
+ * =============================================================================
+ * Data Types and Variable Declarations
+ * =============================================================================
+ */
+typeSpecifier // Defines the type of a variable or parameter
+ : arrayType // e.g., целтаб
+ | basicType TABLE_SUFFIX?// e.g., цел, лит таб (if not matched as arrayType by lexer)
+ | actorType // e.g., цвет, файл
+ ;
+
+basicType // Basic built-in types
+ : INTEGER_TYPE | REAL_TYPE | BOOLEAN_TYPE | CHAR_TYPE | STRING_TYPE
+ ;
+
+actorType // Actor-specific types
+ : KOMPL_TYPE | COLOR_TYPE | SCANCODE_TYPE | FILE_TYPE
+ ;
+
+arrayType // Explicit array type tokens from lexer
+ : INTEGER_ARRAY_TYPE | REAL_ARRAY_TYPE | BOOLEAN_ARRAY_TYPE | CHAR_ARRAY_TYPE | STRING_ARRAY_TYPE
+ ;
+
+arrayBounds // e.g., [1:N]
+ : expression COLON expression
+ ;
+
+// Describes a single item in a variable declaration list, allowing optional initialization with '='
+variableDeclarationItem
+ : ID (LBRACK arrayBounds (COMMA arrayBounds)* RBRACK)? ( EQ expression )?
+ ;
+
+// List of variables in a declaration, e.g., i, j, k
+variableList
+ : variableDeclarationItem (COMMA variableDeclarationItem)*
+ ;
+
+// Local variable declaration (inside нач...кон)
+variableDeclaration
+ : typeSpecifier variableList
+ ;
+
+// Global variable declaration (outside algorithms)
+globalDeclaration
+ : typeSpecifier variableList SEMICOLON?
+ ;
+
+// Global assignment (using :=)
+globalAssignment
+ : qualifiedIdentifier ASSIGN (literal | unaryExpression | arrayLiteral) SEMICOLON?
+ ;
+
+/*
+ * =============================================================================
+ * Algorithm Parameters
+ * =============================================================================
+ */
+// Single parameter declaration (e.g., арг цел n, рез лит s)
+parameterDeclaration
+ : (IN_PARAM | OUT_PARAM | INOUT_PARAM)? typeSpecifier variableList
+ ;
+
+// List of parameters in parentheses
+parameterList
+ : parameterDeclaration (COMMA parameterDeclaration)*
+ ;
+
+/*
+ * =============================================================================
+ * Algorithm Names
+ * =============================================================================
+ */
+/**
+ * algorithmNameTokens: Captures all tokens that constitute the algorithm name.
+ * It consumes any token (.) as long as the lookahead (LA(1)) is not one of the
+ * stop tokens (LPAREN, ALG_BEGIN, PRE_CONDITION, POST_CONDITION, SEMICOLON, EOF).
+ * This allows names like "Сумма И счетчик" or "Факториал 100".
+ * The `+` ensures at least one token is consumed for the name.
+ */
+algorithmNameTokens
+ : ~(LPAREN | ALG_BEGIN | PRE_CONDITION | POST_CONDITION | SEMICOLON | EOF)+
+ ;
+
+/**
+ * algorithmName: Used only for checking the name after the 'кон' keyword.
+ * Kept stricter (ID+) for this purpose.
+ */
+algorithmName: ID+ ;
+
+
+/*
+ * =============================================================================
+ * Algorithm Structure
+ * =============================================================================
+ */
+/**
+ * algorithmHeader: Defines the algorithm header.
+ * Structure: алг [type]? NAME [(parameters)]? [;]?
+ * Uses algorithmNameTokens to capture the potentially complex name.
+ */
+algorithmHeader
+ : ALG_HEADER typeSpecifier? algorithmNameTokens (LPAREN parameterList? RPAREN)? SEMICOLON?
+ ;
+
+// Pre-condition block (дано)
+preCondition
+ : PRE_CONDITION expression SEMICOLON?
+ ;
+
+// Post-condition block (надо)
+postCondition
+ : POST_CONDITION expression SEMICOLON?
+ ;
+
+// Algorithm body (sequence of statements)
+algorithmBody
+ : statementSequence
+ ;
+
+// Sequence of statements
+statementSequence
+ : statement*
+ ;
+
+/**
+ * lvalue: Left-hand side of an assignment (what is being assigned to).
+ * Can be a variable, array element, or the special 'знач'.
+ */
+lvalue
+ : qualifiedIdentifier (LBRACK indexList RBRACK)? // Variable or array element
+ | RETURN_VALUE // 'знач' for function return
+ ;
+
+// Assignment statement (using :=) or an expression statement (like a procedure call)
+assignmentStatement
+ : lvalue ASSIGN expression
+ | expression
+ ;
+
+// Argument for I/O statements (вывод/ввод)
+ioArgument
+ : expression (COLON expression (COLON expression)?)? // Expression with optional formatting
+ | NEWLINE_CONST // 'нс'
+ ;
+
+ioArgumentList
+ : ioArgument (COMMA ioArgument)*
+ ;
+
+ioStatement
+ : (INPUT | OUTPUT) ioArgumentList
+ ;
+
+// If statement (если ... то ... иначе ... все)
+ifStatement
+ : IF expression THEN statementSequence (ELSE statementSequence)? FI
+ ;
+
+// Case block inside a switch (при условие : ...)
+caseBlock
+ : CASE expression COLON statementSequence
+ ;
+
+// Switch statement (выбор ... при ... иначе ... все)
+switchStatement
+ : SWITCH caseBlock+ (ELSE statementSequence)? FI
+ ;
+
+// Loop ending condition (кц при ...)
+endLoopCondition
+ : ENDLOOP_COND expression
+ ;
+
+// Loop specifiers (для, пока, N раз)
+loopSpecifier
+ : FOR ID FROM expression TO expression (STEP expression)?
+ | WHILE expression
+ | expression TIMES
+ ;
+
+// Loop statement (нц ... кц)
+loopStatement
+ : LOOP loopSpecifier? statementSequence (ENDLOOP | endLoopCondition)
+ ;
+
+// Exit statement (выход)
+exitStatement
+ : EXIT
+ ;
+
+// Pause statement (пауза)
+pauseStatement
+ : PAUSE
+ ;
+
+// Stop statement (стоп)
+stopStatement
+ : STOP
+ ;
+
+// Assertion statement (утв)
+assertionStatement
+ : ASSERTION expression
+ ;
+
+// Procedure call statement (can also be handled via expression)
+procedureCallStatement
+ : qualifiedIdentifier (LPAREN argumentList? RPAREN)?
+ ;
+
+// General statement rule
+statement
+ : variableDeclaration SEMICOLON?
+ | assignmentStatement SEMICOLON?
+ | ioStatement SEMICOLON?
+ | ifStatement SEMICOLON?
+ | switchStatement SEMICOLON?
+ | loopStatement SEMICOLON?
+ | exitStatement SEMICOLON?
+ | pauseStatement SEMICOLON?
+ | stopStatement SEMICOLON?
+ | assertionStatement SEMICOLON?
+ | SEMICOLON // Allow empty statements
+ ;
+
+/**
+ * algorithmDefinition: Defines a complete algorithm structure.
+ */
+algorithmDefinition
+ : algorithmHeader (preCondition | postCondition | variableDeclaration)*
+ ALG_BEGIN
+ algorithmBody
+ ALG_END algorithmName? SEMICOLON? // Use stricter 'algorithmName' for check after 'кон'
+ ;
+
+/*
+ * =============================================================================
+ * Module Structure
+ * =============================================================================
+ */
+moduleName
+ : qualifiedIdentifier
+ | STRING
+ ;
+
+importStatement
+ : IMPORT moduleName SEMICOLON?
+ ;
+
+// Item that can appear at the program/module top level or inside module body
+programItem
+ : importStatement
+ | globalDeclaration
+ | globalAssignment
+ ;
+
+moduleHeader
+ : MODULE qualifiedIdentifier SEMICOLON?
+ ;
+
+moduleBody // Body of an explicit module
+ : (programItem | algorithmDefinition)*
+ ;
+
+implicitModuleBody // Content of a file without explicit 'модуль' header/footer
+ : (programItem | algorithmDefinition)+
+ ;
+
+moduleDefinition // Either an explicit or implicit module structure
+ : moduleHeader moduleBody ENDMODULE qualifiedIdentifier? SEMICOLON?
+ | implicitModuleBody
+ ;
+
+/*
+ * =============================================================================
+ * Program Structure (Start Rule)
+ * =============================================================================
+ */
+/**
+ * program: The main entry point for the grammar.
+ * A program consists of optional top-level items (imports, globals)
+ * followed by one or more module or algorithm definitions.
+ */
+program
+ : programItem* moduleDefinition+ EOF
+ ;
+
+// End of KumirParser.g4
\ No newline at end of file
diff --git a/kumir/README.md b/kumir/README.md
new file mode 100644
index 0000000000..225efa2ab7
--- /dev/null
+++ b/kumir/README.md
@@ -0,0 +1,51 @@
+# Kumir Grammar for ANTLR v4
+
+This directory contains ANTLR v4 grammars (Lexer and Parser) for the Kumir (КуМир) programming language. Kumir is a
+Russian algorithmic language primarily used for teaching programming in schools.
+
+## Language Features Covered
+
+* Core language keywords (алг, нач, кон, если, то, иначе, все, нц, кц, для, пока, etc.)
+* Basic data types (цел, вещ, лог, сим, лит) and table types (целтаб, etc.)
+* Common actor types (файл, цвет - others can be added if needed)
+* Variable declarations (including initialization with `=`)
+* Assignment (`:=`) including function result assignment (`знач := ...`)
+* Expressions (arithmetic, logical, comparison) with standard operator precedence
+* Control flow structures (if-then-else, switch-case, various loops: for, while, N times, simple loop)
+* Procedure and function definitions (including parameters: арг, рез, аргрез)
+* Algorithm names: Supports multi-word names, including those containing numbers or keywords (like `И`), as observed in
+ the reference Kumir IDE. This is handled by the `algorithmNameTokens` rule in the parser.
+* Basic module structure (`использовать`, `модуль`, `конец модуля`)
+* Comments (`|` and `#`)
+* Literals (integers, reals, strings, chars, booleans `да`/`нет`, color constants)
+* Array literals (`{...}`)
+
+## Grammar Files
+
+* `KumirLexer.g4`: Defines the tokens for the Kumir language. Uses UTF-8 encoding. Handles case-insensitivity for
+ Cyrillic keywords. It is recommended to use UTF-8 encoding **without BOM** for Kumir source files.
+* `KumirParser.g4`: Defines the parsing rules based on the tokens from the lexer. Uses `tokenVocab` option. The `algorithmNameTokens` rule has been refined to robustly capture complex algorithm names without relying on target-specific semantic predicates.
+
+## Integration with grammars-v4
+
+* `desc.xml`: This file is provided for integration with the `antlr/grammars-v4` testing infrastructure. It specifies Python 3 as the target language for this grammar and points to the example files located in the `examples/` directory.
+
+## Origin and Testing
+
+The grammar was developed based on:
+
+1. Official Kumir documentation (DocBook XML format).
+2. Extensive iterative testing against a suite of 60 example programs (from K.Y. Polyakov's collection).
+3. Analysis of the behavior of the reference Kumir 2.1.0 IDE's parser/interpreter.
+4. Collaborative refinement process.
+
+The final version successfully parses all 60 provided test examples.
+
+## Usage
+
+These grammars are intended for use with the standard ANTLR v4 toolchain.
+
+Target language example (Python 3):
+
+```bash
+antlr4 -Dlanguage=Python3 KumirLexer.g4 KumirParser.g4 -visitor -o output_dir
\ No newline at end of file
diff --git a/kumir/desc.xml b/kumir/desc.xml
new file mode 100644
index 0000000000..2253c97bbd
--- /dev/null
+++ b/kumir/desc.xml
@@ -0,0 +1,5 @@
+
+
+ Python3
+ examples/**/*.kum
+
\ No newline at end of file
diff --git a/kumir/examples/2+2.kum b/kumir/examples/2+2.kum
new file mode 100755
index 0000000000..bca8b2850e
--- /dev/null
+++ b/kumir/examples/2+2.kum
@@ -0,0 +1,17 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 2. Оператор вывода
+| Вход:
+| нет
+| Результат:
+| 2+2=?
+| Ответ: 4
+алг Оператор вывода
+нач
+вывод '2+'
+вывод '2=?', нс
+вывод 'Ответ: 4'
+кон
+
+
diff --git a/kumir/examples/a+b.kum b/kumir/examples/a+b.kum
new file mode 100755
index 0000000000..1370012264
--- /dev/null
+++ b/kumir/examples/a+b.kum
@@ -0,0 +1,19 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 4. Операторы ввода, вывода, присваивания
+| Вход:
+| 5 7
+| Результат:
+| 5+7=12
+алг Сумма чисел с оформлением
+нач
+цел a, b, c
+вывод "Введите два целых числа: "
+ввод a, b
+c := a + b
+вывод a,'+',b,'=', c
+кон
+
+
+
diff --git a/kumir/examples/and.kum b/kumir/examples/and.kum
new file mode 100755
index 0000000000..150c6f4607
--- /dev/null
+++ b/kumir/examples/and.kum
@@ -0,0 +1,22 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 10. Сложные условия
+| Вход:
+| 27
+| Результат:
+| подходит
+алг Сложные условия
+нач
+цел v
+вывод 'Введите возраст: '
+ввод v
+если v >= 25 и v <= 40 то
+вывод 'подходит'
+иначе
+вывод 'не подходит'
+все
+кон
+
+
+
diff --git a/kumir/examples/arr-bsort-reverse.kum b/kumir/examples/arr-bsort-reverse.kum
new file mode 100755
index 0000000000..cfe9b0b388
--- /dev/null
+++ b/kumir/examples/arr-bsort-reverse.kum
@@ -0,0 +1,39 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 42. Сортировка "камнем"
+| Вход:
+| 5
+| 1
+| 3
+| 5
+| 2
+| 4
+| Результат:
+| После сортировки:
+| 1 2 3 4 5
+алг Сортировка пузырьком
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+вывод 'Введите элементы массива:', нс
+целтаб A[1:N]
+нц для i от 1 до N
+ввод A[i]
+кц
+цел j, c
+нц для i от 1 до N-1
+нц для j от 1 до N-i
+если A[j+1] < A[j] то
+c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c
+все
+кц
+кц
+вывод 'После сортировки:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+
+
diff --git a/kumir/examples/arr-bsort.kum b/kumir/examples/arr-bsort.kum
new file mode 100755
index 0000000000..a616363c84
--- /dev/null
+++ b/kumir/examples/arr-bsort.kum
@@ -0,0 +1,39 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 42. Сортировка пузырьком
+| Вход:
+| 5
+| 1
+| 3
+| 5
+| 2
+| 4
+| Результат:
+| После сортировки:
+| 1 2 3 4 5
+алг Сортировка пузырьком
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+вывод 'Введите элементы массива:', нс
+целтаб A[1:N]
+нц для i от 1 до N
+ввод A[i]
+кц
+цел j, c
+нц для i от 1 до N-1
+нц для j от N-1 до i шаг -1
+если A[j+1] < A[j] то
+c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c
+все
+кц
+кц
+вывод 'После сортировки:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+
+
diff --git a/kumir/examples/arr-empty.kum b/kumir/examples/arr-empty.kum
new file mode 100755
index 0000000000..d32ad69100
--- /dev/null
+++ b/kumir/examples/arr-empty.kum
@@ -0,0 +1,18 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 31. Объявление массивов
+| Вход:
+| нет
+| Результат:
+| нет
+алг Объявление массивов
+нач
+целтаб A[1:5]
+вещтаб V[0:5]
+логтаб L[-5:5]
+симтаб S[65:90]
+кон
+
+
+
diff --git a/kumir/examples/arr-input.kum b/kumir/examples/arr-input.kum
new file mode 100755
index 0000000000..05a413cee6
--- /dev/null
+++ b/kumir/examples/arr-input.kum
@@ -0,0 +1,32 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 33. Ввод элементовмассива с клавиатуры
+| Вход:
+| 5
+| 1
+| 2
+| 3
+| 4
+| 5
+| Результат:
+| Массив задом наперёд:
+| 5 4 3 2 1
+алг Ввод элементов массива с клавиатуры
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива:', нс
+нц для i от 1 до N
+вывод 'A[',i,']='
+ввод A[i]
+кц
+вывод 'Массив задом наперёд: ', нс
+нц для i от N до 1 шаг -1
+вывод A[i], ' '
+кц
+кон
+
+
diff --git a/kumir/examples/arr-kvad.kum b/kumir/examples/arr-kvad.kum
new file mode 100755
index 0000000000..0acb0178f1
--- /dev/null
+++ b/kumir/examples/arr-kvad.kum
@@ -0,0 +1,24 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 32. Заполнение и вывод массива
+| Вход:
+| 5
+| Результат:
+| 1 4 9 16 25
+алг Заполнение И Вывод массива
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+нц для i от 1 до N
+A[i]:= i*i
+кц
+нц для i от 1 до N
+вывод A[i], ' '
+кц
+кон
+
+
+
diff --git a/kumir/examples/arr-msort.kum b/kumir/examples/arr-msort.kum
new file mode 100755
index 0000000000..26016acb8d
--- /dev/null
+++ b/kumir/examples/arr-msort.kum
@@ -0,0 +1,43 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 43. Сортировка выбором
+| Вход:
+| 5
+| 1
+| 3
+| 5
+| 2
+| 4
+| Результат:
+| После сортировки:
+| 1 2 3 4 5
+алг Сортировка выбором
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива: ', нс
+нц для i от 1 до N
+ввод A[i]
+кц
+цел nMin, j, c
+нц для i от 1 до N-1
+nMin:= i
+нц для j от i+1 до N
+если A[j] < A[nMin] то
+nMin:= j
+все
+кц
+если i <> nMin то
+c:=A[i]; A[i]:=A[nMin]; A[nMin]:=c
+все
+кц
+вывод 'После сортировки:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+
+
diff --git a/kumir/examples/arr-qsort.kum b/kumir/examples/arr-qsort.kum
new file mode 100755
index 0000000000..2f1de7fb1b
--- /dev/null
+++ b/kumir/examples/arr-qsort.kum
@@ -0,0 +1,43 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 44. Быстрая сортировка (QuickSort)
+| Вход:
+| нет
+| Результат:
+| После сортировки:
+| 6 34 44 55 67 78 82
+цел N = 7
+целтаб A[1:N] = {78, 6, 82, 67, 55, 44, 34 }
+алг Быстрая сортировка
+нач
+цел i
+вывод 'До сортировки:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+qSort(1, N)
+вывод нс, 'После сортировки:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+алг qSort(цел nStart, nEnd)
+нач
+цел L, R, c, X
+если nStart >= nEnd то выход все
+L:= nStart; R:= nEnd;
+X:= A[div(L+R,2)]
+нц пока L <= R | разделение
+нц пока A[L] < X; L:= L + 1 кц
+нц пока A[R] > X; R:= R - 1 кц
+если L <= R то
+c:= A[L]; A[L]:= A[R]; A[R]:= c
+L:= L+1; R:= R-1
+все
+кц
+qSort(nStart, R) | рекурсивные вызовы
+qSort(L, nEnd)
+кон
+
+
diff --git a/kumir/examples/arr-rand.kum b/kumir/examples/arr-rand.kum
new file mode 100755
index 0000000000..b23b5310cd
--- /dev/null
+++ b/kumir/examples/arr-rand.kum
@@ -0,0 +1,25 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 34. Заполнение массива случайными числами
+| Вход:
+| 5
+| Результат:
+| <5 случайных чисел от 10 до 20>
+алг Заполнение массива случайными числами
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+нц для i от 1 до N
+A[i]:=irand(10,20)
+кц
+вывод 'Массив:', нс
+нц для i от N до 1 шаг -1
+вывод A[i], ' '
+кц
+кон
+
+
+
diff --git a/kumir/examples/arr-rev.kum b/kumir/examples/arr-rev.kum
new file mode 100755
index 0000000000..c9716f8e4c
--- /dev/null
+++ b/kumir/examples/arr-rev.kum
@@ -0,0 +1,38 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 39. Реверс массива
+| Вход:
+| 5
+| 1
+| 2
+| 3
+| 4
+| 5
+| Результат:
+| После реверса:
+| 5 4 3 2 1
+алг Реверс массива
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива: ', нс
+нц для i от 1 до N
+ввод A[i]
+кц
+цел c
+нц для i от 1 до div(N,2)
+c:= A[i]
+A[i]:= A[N+1-i]
+A[N+1-i]:= c
+кц
+вывод 'После реверса:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+
+
+
diff --git a/kumir/examples/arr-search.kum b/kumir/examples/arr-search.kum
new file mode 100755
index 0000000000..53639f0776
--- /dev/null
+++ b/kumir/examples/arr-search.kum
@@ -0,0 +1,42 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 37. Линейный поиск с break
+| Вход:
+| 5
+| 1
+| 2
+| 3
+| 4
+| 5
+| 3
+| Результат:
+| A[3]=3
+алг Поиск в массиве с break
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива: ', нс
+нц для i от 1 до N
+ввод A[i]
+кц
+цел X, nX
+вывод 'Что ищем? '
+ввод X
+nX:= 0
+нц для i от 1 до N
+если A[i] = X то
+nX:= i
+выход
+все
+кц
+если nX > 0 то
+вывод "A[", nX, "]=", X
+иначе вывод "Не нашли!"
+все
+кон
+
+
+
diff --git a/kumir/examples/arr-shift.kum b/kumir/examples/arr-shift.kum
new file mode 100755
index 0000000000..61e9e3e3bc
--- /dev/null
+++ b/kumir/examples/arr-shift.kum
@@ -0,0 +1,36 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 40. Циклический сдвиг массива
+| Вход:
+| 5
+| 1
+| 2
+| 3
+| 4
+| 5
+| Результат:
+| После сдвига влево:
+| 2 3 4 5 1
+алг Циклический сдвиг массива влево
+нач
+цел i, N
+вывод 'Введите размер массива: '
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива: ', нс
+нц для i от 1 до N
+ввод A[i]
+кц
+цел c
+c:= A[1]
+нц для i от 1 до N-1
+A[i]:= A[i+1]
+кц
+A[N]:= c
+вывод 'После сдвига влево:', нс
+нц для i от 1 до N
+вывод A[i], " "
+кц
+кон
+
diff --git a/kumir/examples/arr-sum.kum b/kumir/examples/arr-sum.kum
new file mode 100755
index 0000000000..43984ee13a
--- /dev/null
+++ b/kumir/examples/arr-sum.kum
@@ -0,0 +1,43 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 35. Сумма и количество элементов массива,
+| удовлетворяющих условию
+| Вход:
+| 5
+| 180
+| 185
+| 170
+| 188
+| 190
+| Результат:
+| Элементы 180 < x < 190:
+| Количество: 2
+| Сумма: 373
+| Среднее: 186.5
+алг Сумма И счетчик в массиве
+нач
+цел i, N
+вывод 'Введите размер массива:', нс
+ввод N
+целтаб A[1:N]
+вывод 'Введите элементы массива:', нс
+нц для i от 1 до N
+ввод A[i]
+кц
+цел count = 0, sum = 0
+нц для i от 1 до N
+если 180 < A[i] и A[i] < 190 то
+count:= count + 1
+sum:= sum + A[i]
+все
+кц
+вывод 'Элементы 180 < x < 190:', нс
+вывод 'Количество: ', count, нс
+вывод 'Сумма: ', sum, нс
+вывод 'Среднее: ', sum/count
+кон
+
+
+
+
diff --git a/kumir/examples/downto.kum b/kumir/examples/downto.kum
new file mode 100755
index 0000000000..621886e6ad
--- /dev/null
+++ b/kumir/examples/downto.kum
@@ -0,0 +1,21 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 18. Цикл с перемнной (downto)
+| Вход:
+| 5
+| Результат:
+| 32 16 8 4 2
+алг Цикл for с downto
+нач
+цел n, k, M
+ввод M
+n:= 2**M
+нц для k от M до 1 шаг -1
+вывод n, " "
+n:= div(n,2)
+кц
+кон
+
+
+
diff --git a/kumir/examples/empty.kum b/kumir/examples/empty.kum
new file mode 100755
index 0000000000..59ee95e8ea
--- /dev/null
+++ b/kumir/examples/empty.kum
@@ -0,0 +1,13 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 1.Минимальная программа на алг. языке
+| Вход: нет
+| Результат: нет
+алг Пустая
+нач
+| основная программа
+кон
+
+
+
diff --git a/kumir/examples/file-eof.kum b/kumir/examples/file-eof.kum
new file mode 100755
index 0000000000..df73e8bcbc
--- /dev/null
+++ b/kumir/examples/file-eof.kum
@@ -0,0 +1,32 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 59. Кумир 2.0+.
+| Обработка неизвестного количества чисел
+| Вход:
+| целые числа в файле input_2.txt в текущем каталоге
+| Результат:
+| сумма чисел в файле output_2.txt в текущем каталоге
+алг Чтение неизвестного количества чисел
+нач
+файл Fin, Fout
+Fin:= открыть на чтение('input_2.txt')
+цел S, x
+S:= 0
+нц пока не конец файла(Fin)
+ввод Fin, x
+S:= S + x
+кц
+закрыть(Fin)
+Fout:= открыть на запись('output_2.txt')
+вывод Fout, S
+закрыть(Fout)
+кон
+
+
+
+
+
+
+
+
diff --git a/kumir/examples/file-simple.kum b/kumir/examples/file-simple.kum
new file mode 100755
index 0000000000..dcaf358d38
--- /dev/null
+++ b/kumir/examples/file-simple.kum
@@ -0,0 +1,24 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 58. Кумир 2.0+. Чтение и запись в файл
+| Вход:
+| целое число в файле intput_1.txt в текущем каталоге
+| Результат:
+| удвоенное число в файле output_1.txt в текущем каталоге
+алг Работа с файлами
+нач
+файл Fin, Fout
+цел x
+Fin:= открыть на чтение('input_1.txt')
+Fout:= открыть на запись('output_1.txt')
+ввод Fin, x
+вывод Fout, 2*x
+закрыть(Fout)
+закрыть(Fin)
+кон
+
+
+
+
+
diff --git a/kumir/examples/file-sort.kum b/kumir/examples/file-sort.kum
new file mode 100755
index 0000000000..cb94fd469f
--- /dev/null
+++ b/kumir/examples/file-sort.kum
@@ -0,0 +1,49 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 60. Кумир 2.0+.
+| Сортировка массива из файла
+| Вход:
+| массив в файле input_3.txt в текущем каталоге
+| Результат:
+| отсортированный массив в файле output_3.txt
+| в текущем каталоге
+алг Сортировка массива из файла
+нач
+цел MAX = 100
+целтаб A[1:MAX]
+
+файл Fin, Fout
+Fin:= открыть на чтение('input_3.txt')
+цел N = 0
+нц пока не конец файла(Fin) и N < MAX
+N:= N + 1
+ввод Fin, A[N]
+кц
+закрыть(Fin)
+
+цел i, j, c
+нц для i от 1 до N-1
+нц для j от N-1 до i шаг -1
+если A[j]>A[j+1] то
+c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c
+все
+кц
+кц
+Fout:= открыть на запись('output_3.txt')
+нц для i от 1 до N
+вывод Fout, A[i], нс
+кц
+закрыть(Fout)
+кон
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kumir/examples/file-str.kum b/kumir/examples/file-str.kum
new file mode 100755
index 0000000000..a60a2dd736
--- /dev/null
+++ b/kumir/examples/file-str.kum
@@ -0,0 +1,44 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 61. Кумир 2.0+.
+| Обработка символьных строк в файле
+| Вход: данные о собаках в файле input_4.txt
+| в текущем каталоге
+| <кличка> <возраст> <порода>
+| Результат: данные о собаках, которым < 5 лет,
+| в файле output_4.txt в текущем каталоге
+алг Обработка строк
+нач
+лит s, s0, sAge
+цел age, p
+лог OK
+файл Fin, Fout
+Fin:= открыть на чтение('input_4.txt')
+Fout:= открыть на запись('output_4.txt')
+нц пока не конец файла(Fin)
+ввод Fin, s0
+s:= s0
+p:= позиция(' ', s)
+s:= s[p+1:длин(s)]
+p:= позиция (' ',s)
+sAge:= s[1:p-1]
+age:= лит_в_цел(sAge, OK)
+если age < 5 то
+вывод Fout, s0, нс
+все
+кц
+закрыть(Fin)
+закрыть(Fout)
+кон
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kumir/examples/for.kum b/kumir/examples/for.kum
new file mode 100755
index 0000000000..ca28c794bb
--- /dev/null
+++ b/kumir/examples/for.kum
@@ -0,0 +1,20 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 17. Цикл с переменной
+| Вход:
+| 5
+| Результат:
+| 2 4 8 16 32
+алг Цикл for
+нач
+цел n, k, M
+ввод M
+n:= 2
+нц для k от 1 до M
+вывод n, ' '
+n:= n * 2
+кц
+кон
+
+
diff --git a/kumir/examples/format.kum b/kumir/examples/format.kum
new file mode 100755
index 0000000000..949229c120
--- /dev/null
+++ b/kumir/examples/format.kum
@@ -0,0 +1,23 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 6. Кумир 2.0+. Форматный вывод
+| Вход:
+| нет
+| Результат:
+| > 123<
+| 1.234568
+| > 1.235<
+алг Форматный Вывод
+нач
+цел a=123
+вывод ">", a:5, "<", нс
+вещ x=1.2345678
+вывод x, нс
+вывод ">", x:7:3, "<"
+кон
+
+
+
+
+
diff --git a/kumir/examples/func-prime.kum b/kumir/examples/func-prime.kum
new file mode 100755
index 0000000000..4db1f1dbce
--- /dev/null
+++ b/kumir/examples/func-prime.kum
@@ -0,0 +1,37 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 25. Логическая функция
+| Вход:
+| 5
+| 7
+| 12
+| Результат:
+| 5 - простое число
+| 7 - простое число
+алг Простые числа с логической функцией
+нач
+цел n
+вывод 'Введите число: '
+ввод n
+нц пока isPrime(n)
+вывод n, ' - простое число', нс
+вывод 'Введите число: '
+ввод n
+кц
+кон
+алг лог isPrime(цел n)
+нач
+цел count = 0, k
+k:= 2
+нц пока k*k <= n и count = 0
+если mod(n,k) = 0 то
+count:=count+1
+все
+k:= k + 1
+кц
+знач:= (count = 0)
+кон
+
+
+
diff --git a/kumir/examples/func-sumdig.kum b/kumir/examples/func-sumdig.kum
new file mode 100755
index 0000000000..c223e40c78
--- /dev/null
+++ b/kumir/examples/func-sumdig.kum
@@ -0,0 +1,26 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 23. Функция
+| Вход:
+| 12345
+| Результат:
+| Сумма цифр 15
+алг Сумма цифр
+нач
+цел N
+вывод 'Введите целое число: '
+ввод N
+вывод 'Сумма цифр ', sumDigits(N)
+кон
+алг цел sumDigits(цел n0)
+нач
+цел sum = 0, n
+n:= n0
+нц пока n <> 0
+sum:= sum + mod(n,10)
+n:= div(n,10)
+кц
+знач:= sum
+кон
+
diff --git a/kumir/examples/if.kum b/kumir/examples/if.kum
new file mode 100755
index 0000000000..7fbe1694ae
--- /dev/null
+++ b/kumir/examples/if.kum
@@ -0,0 +1,26 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 9. Вложенные условные операторы
+| Вход:
+| 5 7
+| Результат:
+| Борис старше
+алг Вложенные условные операторы
+нач
+цел a, b
+вывод 'Введите возраст Андрея и Бориса: '
+ввод a, b
+если a > b то
+вывод 'Андрей старше'
+иначе
+если a = b то
+вывод 'Одного возраста'
+иначе
+вывод 'Борис старше'
+все
+все
+кон
+
+
+
diff --git a/kumir/examples/longnum.kum b/kumir/examples/longnum.kum
new file mode 100755
index 0000000000..d8f05434aa
--- /dev/null
+++ b/kumir/examples/longnum.kum
@@ -0,0 +1,52 @@
+| Программа к учебнику информатики для 11 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 6.
+| Программа № 2. Длинные числа (факториал 100)
+| Вход:
+| нет
+| Результат:
+| Факториал числа 100:
+| 93326215443944152681...
+алг Факториал 100
+нач
+цел i, k, r, s, d = 1000000, N = 33
+целтаб A[0:N]
+A[0]:= 1
+нц для i от 1 до N
+ A[i]:= 0
+кц
+нц для k от 2 до 100
+r:= 0
+нц для i от 0 до N
+s:= A[i]*k + r
+A[i]:= mod(s,d)
+r:= div(s,d)
+кц
+кц
+вывод 'Факториал числа 100:', нс
+i:= N
+нц пока A[i] = 0
+i:= i - 1
+кц
+вывод A[i]
+нц для k от i-1 до 0 шаг -1
+Write6 ( A[k] )
+кц
+кон
+алг Write6 (цел x)
+нач
+цел M, xx
+xx:= x
+M:= 100000
+нц пока M > 0
+вывод div(xx, M)
+xx:= mod(xx, M)
+M:= div(M, 10)
+кц
+кон
+
+
+
+
+
+
diff --git a/kumir/examples/loopN.kum b/kumir/examples/loopN.kum
new file mode 100755
index 0000000000..c93613e1ef
--- /dev/null
+++ b/kumir/examples/loopN.kum
@@ -0,0 +1,21 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 13. Цикл N раз
+| Вход:
+| 2
+| Результат:
+| привет
+| привет
+алг Цикл N Раз
+нач
+цел k
+вывод 'Сколько раз сделать? '
+ввод k
+нц k раз
+вывод 'привет', нс
+кц
+кон
+
+
+
diff --git a/kumir/examples/matr-declare.kum b/kumir/examples/matr-declare.kum
new file mode 100755
index 0000000000..0b6d1271cf
--- /dev/null
+++ b/kumir/examples/matr-declare.kum
@@ -0,0 +1,17 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 55. Объявление матриц
+| Вход:
+| нет
+| Результат:
+| нет
+алг Объявления матриц
+нач
+цел N = 3, M = 4
+целтаб A[1:N,1:M]
+вещтаб X[-3:0,-8:M]
+логтаб L[1:N,0:1]
+кон
+
+
diff --git a/kumir/examples/matr-rand.kum b/kumir/examples/matr-rand.kum
new file mode 100755
index 0000000000..ac32cf8810
--- /dev/null
+++ b/kumir/examples/matr-rand.kum
@@ -0,0 +1,22 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 56. Запонение матрицы случайными числами
+| Вход:
+| нет
+| Результат:
+| <случайная матрица 3 на 4>
+алг Заполнение матрицы случайными числами
+нач
+цел N = 3, M = 4, i, j
+целтаб A[1:N,1:M]
+нц для i от 1 до N
+нц для j от 1 до M
+A[i,j]:= irand(20,80)
+вывод A[i,j], ' '
+кц
+вывод нс
+кц
+кон
+
+
diff --git a/kumir/examples/matr-sum.kum b/kumir/examples/matr-sum.kum
new file mode 100755
index 0000000000..3704255a99
--- /dev/null
+++ b/kumir/examples/matr-sum.kum
@@ -0,0 +1,31 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 57. Сумма элементов матрицы
+| Вход:
+| нет
+| Результат:
+| Сумма элементов 54
+алг Сумма элементов матрицы
+нач
+цел N = 3, M = 4, i, j
+целтаб A[1:N,1:M]
+вывод 'Матрица: ', нс
+нц для i от 1 до N
+нц для j от 1 до M
+A[i,j]:= i+j
+вывод A[i,j], ' '
+кц
+вывод нс
+кц
+цел s=0
+нц для i от 1 до N
+нц для j от 1 до M
+s:= s + A[i,j]
+кц
+кц
+вывод 'Сумма элементов ', s
+кон
+
+
+
diff --git a/kumir/examples/prime.kum b/kumir/examples/prime.kum
new file mode 100755
index 0000000000..4e80df6d03
--- /dev/null
+++ b/kumir/examples/prime.kum
@@ -0,0 +1,31 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 19. Вложенные циклы (простые числа)
+| Вход:
+| 15
+| Результат:
+| Простые числа: 2 3 5 7 11 13
+алг Простые числа
+нач
+цел n, k, M, count
+вывод 'Введите максимальное число: '
+ввод M
+вывод 'Простые числа: '
+нц для n от 2 до M
+count:= 0
+k:= 2
+нц пока k*k <= n
+если mod(n,k) = 0 то
+count:= count + 1
+все
+k:= k + 1
+кц
+если count = 0 то
+вывод n, ' '
+все
+кц
+кон
+
+
+
diff --git a/kumir/examples/primes.kum b/kumir/examples/primes.kum
new file mode 100755
index 0000000000..cdc6886a71
--- /dev/null
+++ b/kumir/examples/primes.kum
@@ -0,0 +1,41 @@
+| Программа к учебнику информатики для 11 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 6.
+| Программа № 1.Решето Эратосфена
+| Вход:
+| 100
+| Результат:
+| Простые числа от 2 до 100:
+| ...
+алг Решето Эратосфена
+нач
+цел i, k, N
+вывод 'Введите максимальное число: '
+ввод N
+логтаб A[2:N]
+нц для i от 2 до N
+A[i]:= да
+кц
+k:= 2
+нц пока k*k <= N
+если A[k] то
+i:= k*k
+нц пока i <= N
+A[i]:= нет
+i:= i + k
+кц
+все
+k:= k + 1
+кц
+вывод 'Простые числа от 2 до ', N, ':', нс
+нц для i от 2 до N
+если A[i] то
+вывод i, ' '
+все
+кц
+кон
+
+
+
+
+
diff --git a/kumir/examples/proc-bin.kum b/kumir/examples/proc-bin.kum
new file mode 100755
index 0000000000..2c8d93d27a
--- /dev/null
+++ b/kumir/examples/proc-bin.kum
@@ -0,0 +1,29 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 21. Процедура с параметром
+| Вход:
+| 99
+| Результат:
+| Двоичный код: 01100011
+алг Двоичный код
+нач
+цел N
+вывод 'Введите натуральное число: '
+ввод N
+вывод 'Двоичный код: '
+printBin(N)
+кон
+алг printBin(цел n0)
+нач
+цел n, k
+n:= n0
+k:= 128
+нц пока k > 0
+вывод div(n,k)
+n:= mod(n,k)
+k:= div(k,2)
+кц
+кон
+
+
diff --git a/kumir/examples/proc-err.kum b/kumir/examples/proc-err.kum
new file mode 100755
index 0000000000..5258146461
--- /dev/null
+++ b/kumir/examples/proc-err.kum
@@ -0,0 +1,20 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 20. Программа с процедурой
+| Вход:
+| -1
+| Результат:
+| Ошибка программы
+алг Программа с процедурой
+нач
+цел n
+ввод n
+если n < 0 то Error все
+кон
+алг Error
+нач
+вывод 'Ошибка программы'
+кон
+
+
diff --git a/kumir/examples/rand.kum b/kumir/examples/rand.kum
new file mode 100755
index 0000000000..e8e09e457a
--- /dev/null
+++ b/kumir/examples/rand.kum
@@ -0,0 +1,16 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 7. Псевдослучайные числа
+| Вход:
+| нет|
+| Результат:
+| <случайное целое от 10 до 20 включительно>
+| <случайное вещественное от [1 до 2)>
+алг Псевдослучайные числа
+нач
+вывод irand(10,20), нс
+вывод rand(1,2)
+кон
+
+
diff --git a/kumir/examples/rec-bin.kum b/kumir/examples/rec-bin.kum
new file mode 100755
index 0000000000..1b4b4ba4da
--- /dev/null
+++ b/kumir/examples/rec-bin.kum
@@ -0,0 +1,24 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 27. Рекурсия. Двоичный код
+| Вход:
+| 99
+| Результат:
+| Двоичный код 1100011
+алг Двоичный код рекурсия
+нач
+цел N
+вывод 'Введите натуральное число: '
+ввод N
+вывод 'Двоичный код '
+printBin(N)
+кон
+алг printBin(цел n)
+нач
+если n = 0 то выход все
+printBin(div(n,2))
+вывод mod(n,2)
+кон
+
+
diff --git a/kumir/examples/rec-fact.kum b/kumir/examples/rec-fact.kum
new file mode 100755
index 0000000000..48ada4aad9
--- /dev/null
+++ b/kumir/examples/rec-fact.kum
@@ -0,0 +1,31 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 30. Рекурсия. Факториал
+| Вход:
+| 2
+| Результат:
+| -> N=2
+| -> N=1
+| <- N=1
+| <- N=2
+| 2
+алг Факториал
+нач
+цел N
+вывод 'Введите натуральное число: '
+ввод N
+вывод Fact(N)
+кон
+алг цел Fact(цел N)
+нач
+вывод '-> N=', N, нс
+если N <= 1 то
+знач:= 1
+иначе знач:= N * Fact(N - 1)
+все
+вывод '<- N=', N, нс
+кон
+
+
+
diff --git a/kumir/examples/rec-hanoi.kum b/kumir/examples/rec-hanoi.kum
new file mode 100755
index 0000000000..d56c1fa8f5
--- /dev/null
+++ b/kumir/examples/rec-hanoi.kum
@@ -0,0 +1,30 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 26. Рекурсия. Ханойские башни
+| Вход:
+| нет
+| Результат:
+| 1 -> 3
+| 1 -> 2
+| 3 -> 2
+| 1 -> 3
+| 2 -> 1
+| 2 -> 3
+| 1 -> 3
+алг Ханойские башни
+нач
+Hanoi(3, 1, 3)
+кон
+алг Hanoi(цел n, k, m)
+нач
+если n = 0 то выход все
+цел p
+p := 6 - k - m
+Hanoi(n-1, k, p)
+вывод k, ' -> ', m, нс
+Hanoi(n-1, p, m)
+кон
+
+
+
diff --git a/kumir/examples/rec-nod.kum b/kumir/examples/rec-nod.kum
new file mode 100755
index 0000000000..6b984bb11a
--- /dev/null
+++ b/kumir/examples/rec-nod.kum
@@ -0,0 +1,29 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 29. Рекурсия. Алгоритм Евклида
+| Вход:
+| 14 21
+| Результат:
+| НОД(14,21) = 7
+алг Алгоритм Евклида с рекурсией
+нач
+цел a, b
+вывод 'Введите два натуральных числа: '
+ввод a, b
+вывод 'НОД(', a, ',', b, ')=', NOD(a, b)
+кон
+алг цел NOD(цел a, b)
+нач
+если a = 0 или b = 0 то
+знач:= a + b
+выход
+все
+если a > b то
+знач:= NOD(a - b, b)
+иначе знач:= NOD(a, b - a)
+все
+кон
+
+
+
diff --git a/kumir/examples/rec-sumdig.kum b/kumir/examples/rec-sumdig.kum
new file mode 100755
index 0000000000..e08aa55c73
--- /dev/null
+++ b/kumir/examples/rec-sumdig.kum
@@ -0,0 +1,25 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 28. Рекурсия. Сумма цифр
+| Вход:
+| 12345
+| Результат:
+| Сумма цифр 15
+алг Сумма цифр с рекурсией
+нач
+цел N
+вывод 'Введите натуральное число: '
+ввод N
+вывод 'Сумма цифр ', sumDig(N)
+кон
+алг цел sumDig(цел n)
+нач
+знач:= mod(n,10)
+если n >= 10 то
+знач:= знач + sumDig(div(n,10))
+все
+кон
+
+
+
diff --git a/kumir/examples/repeat.kum b/kumir/examples/repeat.kum
new file mode 100755
index 0000000000..b48e85647e
--- /dev/null
+++ b/kumir/examples/repeat.kum
@@ -0,0 +1,24 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 16. Цикл с постусловием
+| Вход:
+| -1
+| 0
+| 2
+| Результат:
+| Введено число 2
+| и до него 2 ошибочных значений(я)
+алг Цикл repeat
+нач
+цел n, c = 0
+вывод 'Введите целое положительное число: '
+нц
+ввод n
+c:=c+1
+кц при n > 0
+вывод 'Введено число ', n, нс
+вывод ' и до него ', c-1, ' ошибочных значений(я)'
+кон
+
+
diff --git a/kumir/examples/str-ab.kum b/kumir/examples/str-ab.kum
new file mode 100755
index 0000000000..ab477ba232
--- /dev/null
+++ b/kumir/examples/str-ab.kum
@@ -0,0 +1,22 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 46. Посимвольная обработка строк
+| Вход:
+| аабб
+| Результат:
+| бббб
+алг Замена а на б
+нач
+лит s
+ввод s
+цел i
+нц для i от 1 до длин(s)
+если s[i] = 'а'
+то s[i]:= 'б'
+все
+кц
+вывод s
+кон
+
+
diff --git a/kumir/examples/str-complex.kum b/kumir/examples/str-complex.kum
new file mode 100755
index 0000000000..492196e235
--- /dev/null
+++ b/kumir/examples/str-complex.kum
@@ -0,0 +1,29 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 49. Кумир 2.0+. Разбор строки
+| Вход:
+| Василий Алибабаевич Хрюндиков
+| Результат:
+| Хрюндиков В.А.
+использовать Строки
+алг ФИО
+нач
+лит s, name, name2
+цел n
+вывод 'Введите имя, отчество и фамилию:'
+ввод s
+n:= позиция (' ', s);
+name:= s[1:n-1] | вырезать имя
+удалить(s, 1, n)
+n:= позиция (' ', s)
+name2:= s[1:n-1] | вырезать отчество
+удалить(s, 1, n) | осталась фамилия
+s:= s + ' ' + name[1] + '. ' + name2[1] + '.'
+вывод s
+кон
+
+
+
+
+
diff --git a/kumir/examples/str-func.kum b/kumir/examples/str-func.kum
new file mode 100755
index 0000000000..de5e66274c
--- /dev/null
+++ b/kumir/examples/str-func.kum
@@ -0,0 +1,41 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 52. Кумир 2.0+. Строки в фукнциях
+| Вход:
+| нет
+| Результат:
+| A12B.A12B.A12B
+использовать Строки
+алг Строки в функции
+нач
+лит s = '12.12.12'
+s := replaceAll(s, '12', 'A12B')
+вывод s
+кон
+алг лит replaceAll(аргрез лит s0, арг лит wOld, wNew)
+нач
+лит res
+цел p, len
+лит s
+s:=s0
+len:= длин(wOld)
+res:= ''
+нц пока длин(s) > 0
+p:= позиция (wOld, s)
+если p < 0 то res:= res + s; выход все
+если p > 1 то res:= res + s[1:p-1] все
+res:= res + wNew
+если p+len > длин(s) то
+s:=''
+иначе s:=s[p+len:длин(s)]
+все
+кц
+знач:=res
+кон
+
+
+
+
+
+
diff --git a/kumir/examples/str-num.kum b/kumir/examples/str-num.kum
new file mode 100755
index 0000000000..76c2765602
--- /dev/null
+++ b/kumir/examples/str-num.kum
@@ -0,0 +1,36 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 50. Преобразования "строка-число"
+| Вход:
+| нет
+| Результат:
+| 246
+| 246.912
+| 123
+| 123.456
+использовать Строки
+алг Строка число
+нач
+лит s
+цел N
+вещ X
+лог OK
+s:= '123'
+N:= лит_в_цел(s, OK) | N = 123
+если не OK то вывод 'Ошибка!' все
+вывод N*2, нс
+s:= '123.456';
+X:= лит_в_вещ(s, OK) | X = 123.456
+если не OK то вывод 'Ошибка!' все
+вывод X*2, нс
+N:= 123
+s:= цел_в_лит(N) | s = '123'
+вывод s, нс
+X:= 123.456
+s:= вещ_в_лит(X) | s = '123.456'
+вывод s, нс
+кон
+
+
+
diff --git a/kumir/examples/str-ops.kum b/kumir/examples/str-ops.kum
new file mode 100755
index 0000000000..1b9a80b403
--- /dev/null
+++ b/kumir/examples/str-ops.kum
@@ -0,0 +1,33 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 47. Кумир 2.0+. Операции со строками
+| Вход:
+| нет
+| Результат:
+| Привет, Вася!
+| 34567
+| 129
+| 12ABC3456789
+использовать Строки
+алг Операции со строками
+нач
+лит s, s1, s2
+s1:= 'Привет'
+s2:= 'Вася'
+s := s1 + ', ' + s2 + '!'
+вывод s, нс
+s:= '123456789'
+s1:= s[3:7]
+вывод s1, нс
+s:= '123456789'
+удалить(s, 3, 6)
+вывод s, нс
+s:= '123456789'
+вставить('ABC', s, 3)
+вывод s, нс
+кон
+
+
+
+
diff --git a/kumir/examples/str-proc.kum b/kumir/examples/str-proc.kum
new file mode 100755
index 0000000000..052714b715
--- /dev/null
+++ b/kumir/examples/str-proc.kum
@@ -0,0 +1,39 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 51. Кумир 2.0+.Строки в процедуре
+| Вход:
+| нет
+| Результат:
+| A12B.A12B.A12B
+использовать Строки
+алг Строки в процедуре
+нач
+лит s = '12.12.12'
+replaceAll(s, '12', 'A12B')
+вывод s
+кон
+алг replaceAll(аргрез лит s, арг лит wOld, wNew)
+нач
+лит res
+цел p, len
+len:= длин(wOld)
+res:= ''
+нц пока длин(s) > 0
+p:= позиция (wOld, s)
+если p < 0 то res:= res + s; выход все
+если p > 1 то res:= res + s[1:p-1] все
+res:= res + wNew
+если p+len > длин(s) то
+s:=''
+иначе s:=s[p+len:длин(s)]
+все
+кц
+s:=res
+кон
+
+
+
+
+
+
diff --git a/kumir/examples/str-rec.kum b/kumir/examples/str-rec.kum
new file mode 100755
index 0000000000..17e5aa4469
--- /dev/null
+++ b/kumir/examples/str-rec.kum
@@ -0,0 +1,31 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 53. Рекурсивный перебор
+| Вход:
+| нет
+| Результат:
+| <64 слова>
+алг Рекурсивный перебор
+нач
+лит word = '...'; | из K символов
+TumbaWords('ЫШЧО', word, 0)
+кон
+алг TumbaWords(лит A, w0, цел N)
+нач
+если N = длин(w0) то | слово построено
+вывод w0, нс
+выход
+все
+цел i
+лит w
+w:= w0
+нц для i от 1 до длин(A)
+w[N+1]:= A[i]
+TumbaWords(A, w, N+1) | рекурсия
+кц
+кон
+
+
+
+
diff --git a/kumir/examples/str-search.kum b/kumir/examples/str-search.kum
new file mode 100755
index 0000000000..fb79a038a6
--- /dev/null
+++ b/kumir/examples/str-search.kum
@@ -0,0 +1,25 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 48. Кумир 2.0+. Поиск подстроки в строке
+| Вход:
+| нет
+| Результат:
+| Номер символа 4
+использовать Строки
+алг Поиск в строке
+нач
+лит s
+цел n
+s:= 'Здесь был Вася.'
+n:= позиция('с', s)
+если n > 0 то
+вывод 'Номер символа ', n
+иначе
+вывод 'Символ не найден.'
+все
+кон
+
+
+
+
diff --git a/kumir/examples/str-sort.kum b/kumir/examples/str-sort.kum
new file mode 100755
index 0000000000..b47c1c470d
--- /dev/null
+++ b/kumir/examples/str-sort.kum
@@ -0,0 +1,44 @@
+| Программа к учебнику информатики для 10 класса
+| К.Ю. Полякова и Е.А. Еремина.
+| Глава 8.
+| Программа № 54. Сортировка строк
+| Вход:
+| 5
+| пароход
+| паровоз
+| пар
+| Пар
+| пАр
+| Результат:
+| Пар
+| пАр
+| пар
+| паровоз
+| пароход
+алг Сортировка строк
+нач
+цел i, j, N
+вывод 'Введите количество строк: '
+ввод N
+литтаб S[1:N]
+лит s1
+вывод 'Введите строки: ', нс
+нц для i от 1 до N
+ввод S[i]
+кц
+нц для i от 1 до N-1
+нц для j от N-1 до i шаг -1
+если S[j+1] 0
+n:= div(n,10)
+count:= count + 1
+кц
+вывод 'Цифр в числе: ', count
+кон
+
+
+