Разное

Онлайн составление алгоритмов: Как пользоваться онлайн редактором блок-схем | Создать блок-схему онлайн

Как пользоваться онлайн редактором блок-схем | Создать блок-схему онлайн

Время чтения: 7 минут

Недавно мы разработали и добавили на сайт редактор блок-схем. Вряд ли найдутся те, кто не знает, что такое блок-схема. Однако на всякий случай напомню, что блок-схема — это тип схем, описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой стрелками, указывающими направление последовательности действий. С помощью блок-схем обычно проще представить, как работает тот или иной алгоритм, и, что самое главное, не нужно вникать в особенности конкретного языка программирования, так как достаточно знать лишь несколько основных типов блоков.

Основные типы блоков

Чаще всего к основным блокам относят следующие:

  • Обычный блок — содержит вычисления выражений и присваивания переменным
  • Условный оператор — разделяет действия на две ветки в зависимости от истинности условия
  • Начало-конец — является начальным блоком основной программы или завершающим различных подпрограмм
  • Подпрограмма — с данного блока начинается описание работы подпрограммы
  • Оператор цикла for — используется для цикла с известным количеством повторений
  • Ввод/вывод — используется для ввода или вывода данных на экран/файл или любое другое место
  • Дисплей — используется для вывода данных на экран

Помимо этих блоков немаловажными также являются текстовый блок (для создания каких-либо меток или подписей) и ссылка, который позволяет разбить длинную блок-схему на несколько более коротких частей. Каждый из этих блоков доступен для построения схем в нашем редакторе.

Интерфейс редактора

Начальный интерфейс редактора

При открытии редактора, пользователю отображается меню и поле для построения блок-схем. Поле имеет сетку (при желании её можно отключить с помощью сочетания клавиш Ctrl+G), позволяющую избегать свойственной Visio проблемы со сверхмалым смещением блоков друг относительно друга и кривых стрелок. Меню (можно свернуть с помощью сочетания Ctrl+M) позволяет добавлять блоки на поле, выполнять загрузку и сохранение блок-схемы, а также изменять цветовую тему.

В правом нижнем углу поля находятся кнопки отмены/повтора действий, изменения масштаба и отображения всех горячих клавиш, а также отображается основная информация о текущей схеме. Пока не выбран ни один блок, отображаются только общие сведения — масштаб, текущая точка и количество блоков и стрелок. Как только пользователь выбирает какой-либо блок, к этой информации добавляются сведения о типе блока, его размере, положении, а также форматировании и размере шрифта.

Редактор хранит историю действий, так что в случае ошибки можно отменить последние действия с помощью сочетания клавиш Ctrl+Z. Чтобы повторить отменённое действие, достаточно нажать сочетание Ctrl+Y.

Добавление блока

Добавление блока на поле (.gif)

Добавить новый блок на поле можно двумя способами:

  • выбрать блок в меню и, зажав кнопку мыши, перетащить его в нужное место
  • нажать цифровую клавишу, соответствующую номеру блока

При выборе блока в меню, он появится на поле рядом и будет перемещаться за мышью до тех пор, пока не будет отпущена клавиша мыши. Если же только кликнуть по пункту меню, то блок будет добавлен и зафиксирован. Нажимая цифровую клавишу, блок будет добавлен в том месте, где в данный момент находится указатель мыши.

Также блок можно скопировать и вставить с помощью сочетаний клавиш Ctrl+C и Ctrl+V соответственно.

Редактирование текста и форматирование блоков

Редактирование текста и форматирование блоков (. gif)

Для ввода блока в режим редактирования достаточно дважды кликнуть по блоку или же нажать клавишу

F2 при имеющемся активном блоке. Блоки поддерживают как обычное добавление символов, так и основные сочетания клавиш, свойственные обычному текстовому полю:

  • Перемещение курсора: стрелки, Home, End
  • Перемещение курсора на очередное слово: Ctrl+Left, Ctrl+Right
  • Удаление до очередного слова: Ctrl+Delete, Ctrl+Backspace
  • Выделение текста: Shift+Arrows, Shift+Home, Shift+End, Ctrl+A
  • Вставка из буфера обмена: Ctrl+V
  • Копирование в буфер обмена: Ctrl+C
  • Жирный и курсивный шрифт: Ctrl+B и Ctrl+I соответственно
  • Изменение размера шрифта: Ctrl+Plus и Ctrl+Minus соответственно

Добавление стрелок, соединение блоков

Добавление стрелки (.gif)

У каждого блока (кроме текстового) есть четыре коннектора. Чтобы соединить блоки стрелкой, необходимо навести мышь на один из коннекторов начального блока и нажать левую кнопку мыши. После этого стрелка будет перемещаться вместе с мышью до тех пор, пока не будет произведён клик на другой коннектор. Также в процессе добавления стрелки можно кликнуть по пустому пространству. Данное действие приведёт к добавлению промежуточного узла в стрелку, и новые сегменты будут строиться уже от неё. Если решение начать строить данную стрелку оказалось ошибочным, для отмены действия достаточно нажать клавишу Esc.

Если же нужно соединить два близких блока и не хочется тянуть стрелку, можно перетащить один из блоков к другому нужным коннектором (коннекторы, между которыми будет добавлена стрелка будут подсвечены) и отпустить мышь.

А если требуется вставить блок между двумя другими блоками, не нужно сначала разрывать все уже имеющиеся стрелки. Достаточно перетащить блок на вертикальный участок стрелки так, чтобы она подсветилась, и отпустить блок. Все соединения будут добавлены автоматически.

Масштабирование и перемещение блоков

Изменение размера и перемещение блоков (. gif)

Чтобы изменить размер блока, наведите указатель мыши на одну из восьми точек изменения размера, зажмите левую кнопку мыши и перемещайте мышь до тех пор, пока не получите блок нужного размера. Для дополнительного контроля во время изменения размера блоки с одинаковым размером подсвечиваются одной или несколькими специальными линиями в зависимости от типа изменения размера.

Для изменения положения блока нужно нажать на блок и, зажав левую кнопку мыши, переместить блок в нужное место, после чего отпустить мышь. Также для перемещения активного блока можно использовать клавиши стрелок на клавиатуре.

Изменение стрелок и их частей

Изменение стрелки (.gif)

Для перемещения части стрелки наведите указатель мыши на желаемый сегмент, зажмите левую кнопку мыши и переместите его в нужное место.

Иногда нужно перетащить не весь сегмент, а лишь его часть. В таком случае необходимо добавить дополнительный узел на стрелку. Сделать это можно путём клика по стрелке с зажатой клавишей Ctrl.

Чтобы «переподключить» стрелку, сделайте её активной и нажмите на коннектор, в который входит конец стрелки. Тогда стрелка будет отсоединена от конечного блока и её можно будет подключить к другому коннектору.

Масштабирование и перемещение

Масштабирование и перемещение поля (.gif)

Для того, чтобы передвигаться по полю вверх и вниз используйте обычную прокрутку мыши. Для горизонтального перемещения используйте ту же прокрутку мыши, но с зажатой клавишей Shift. Также перемещение по полю возможно путём перемещения мыши с зажатыми левой клавишей и клавишей Ctrl.

Для изменения текущего масштаба поля используйте прокрутку колёсика мыши с зажатой клавишей Alt. Также масштабирование возможно с использованием сочетаний клавиш Ctrl+Plus и Ctrl+Minus или иконки лупы в правой нижней части экрана для увеличения и уменьшения масштаба соответственно.

Переключение между блоками и поиск ближайшего блока

Переключение между блоками (. gif)

Чтобы сделать активным очередной блок и переместить поле так, чтобы он оказался в центре, достаточно нажать клавишу Tab. А для того чтобы перейти не на следующий, а на предыдущий блок, нужно нажать сочетание клавиш Ctrl+Tab.

Для перемещения поля таким образом, чтобы в центре оказался ближайший блок, нужно нажать сочетание клавиш Ctrl+F.

Выделение и действия с ним

Действия с выделением (.gif)

Для создания выделения в пустом месте зажмите левую кнопку мыши и перемещайте её до выделения нужной области. Во время перемещения будет отображаться прямоугольник с полупрозрачным фоном, показывающий границы текущего выделения. По завершении выделения блоки, попавшие в область, будут подсвечены. Если же ни один блок не попадёт в выделение, то оно пропадёт. Если требуется выделить все блоки сразу, то используйте сочетание клавиш Ctrl+A

Чтобы переместить выделение, аналогично перемещению блоков зажмите левую кнопку мыши внутри выделения и перемещайте мышь. Также для перемещения можно использовать стрелки клавиатуры. Во время перемещения стрелки, целиком попавшие в выделение, будут перемещаться в неизменном виде, однако стрелки, не попавшие в выделение, будут выполнять автоматическую перестройку.

Чтобы скопировать активное выделение, используйте сочетание клавиш Ctrl+C. Для вставки скопированного выделения нажмите Ctrl+V. Удалить выделение можно с помощью нажатия клавиши Delete.

Смена меток блоков, смена направления стрелки и её перестроение

Метки блоков и направление стрелки (.gif)

Некоторые блоки (например, блок условного оператора, блок начала/конца или ссылки) имеют метки или текст, писать который постоянно не очень хочется. Поэтому для упрощения работы с ними мы добавили возможность смены меток по нажатию клавиши

R на активном блоке. Вот как это работает для разных типов блоков:

  • Блок начала/конца: циклическое изменение текста «начало» — «конец» — «вернуть»
  • Блок ввода/вывода: циклическое изменение текста «ввод» — «вывод»
  • Блок условного оператора: смена положений меток да/нет или их полное отключение
  • Блок ссылки: увеличение на 1 цифры текущей метки (уменьшение на 1, если нажать Ctrl+R)

При нажатии клавиши R и наличии активной стрелки, её направление изменится на противоположное без перестроения сегментов.

Нажатие Ctrl+P при наличии активной стрелки приведёт к автоматическому перестроению всех сегментов.

Вставка шаблонов блок-схем

Добавление шаблонов блок-схем (.gif)

Для того чтобы постоянно не создавать с нуля простые циклы или блоки с условием или выбором, редактор позволяет добавить несколько типовых шаблонов, а именно:

  • Цикл for — сочетание Ctrl+1
  • Цикл while — сочетание Ctrl+2
  • Вложенный цикл for — сочетание Ctrl+3
  • Условный оператор с двумя ветвями — сочетание Ctrl+4
  • Оператор выбора — сочетание Ctrl+5
  • Основная программа — сочетание Ctrl+6

Сохранение и загрузка блок-схем

Сохранение и загрузка схемы (.gif)

Для сохранения доступна не одна, а сразу три кнопки в меню, причём каждая делает своё действие, а именно:

  • Сохранить схему (.json) — сохраняет блок-схему в виде json файла, который затем можно открыть в редакторе для изменения (сочетание клавиш — Ctrl+S)
  • Сохранить схему (. png) — сохраняет блок-схему в виде единого изображения без сетки и меню в том масштабе, в котором сейчас находится редактор (сочетание клавиш — Ctrl+Shift+S)
  • Сохранить области (.png)
    — находит связанные области (два и более блоков, соединённых стрелкой) и сохраняет каждую в виде изображения по отдельности (сочетание клавиш — Ctrl+Alt+S)

С загрузкой всё гораздо проще: одна кнопка, клик по которой позволяет выбрать json файл с блок-схемой (сочетание клавиш — Ctrl+O). При успешном открытии, текущая блок-схема будет заменена на новую, в противном случае останется прошлая схема, однако история изменений будет утеряна.

Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов

Выпускник МГУ им. М.В. Ломоносова

Программист, соосновательница programforyou.ru, рукодельница, всегда готова придти на помощь и помочь во всём разобраться

Выпускница МГТУ им. Н.Э. Баумана

Полезное | Programforyou

Как создать граф с помощью нашего онлайн редактора

26 мая 2022

В 2021 году мы написали свой собственный редактор графов. В 2022 году мы наконец написали к нему инструкцию. Из неё вы узнаете, как создать граф, какие алгоритмы можно запустить на графах, в какие форматы можно сохранить граф и многие другие особенности редактора.

Читать далее

Как эффективно удалить элементы из массива

31 марта 2021

Работая с массивами, порой приходится удалять элементы, удовлетворяющие некоторым условиям. Порой начинающие программисты используют неэффективный алгоритм с квадратичной сложностью, из-за чего производительность их программы может очень сильно пострадать. В этой статье мы расскажем, как удалять элементы из массива эффективным способом.

Читать далее

Как настроить виртуальное окружение virtualenv для Python3 (Ubuntu)

27 января 2021

Работая над несколькими проектами в Python3 нередко приходится сталкиваться с проблемой конфликта версий устанавливаемых пакетов.

Для её решения было придумано виртуальное окружение, настройка которого зачастую заставляет поломать голову. В этой статье мы расскажем вам, как быстро настроить virtualenv для Python3.

Читать далее

Как создать блок-схему с помощью нашего онлайн редактора

19 августа 2020

Недавно мы разработали и добавили на сайт редактор блок-схем. В этой статье вы узнаете, как пользоваться всеми функциями, которые могут казаться неочевидными на первый взгляд, а также узнаете, как упростить себе жизнь при построении блок-схемы.

Читать далее

Как создать Windows Forms проект на C++

10 апреля 2020

Windows Forms — интерфейс программирования приложений, отвечающий за графический интерфейс пользователя. Windows Forms API не зависит от конкретного языка, благодаря чему проекты можно создавать практически на чём угодно. И если на родном C# проекты быстро и просто создаются, то для создания C++ проекта приходится некоторое время поплясать с бубном.

Читать далее

Как установить Sublime Text для работы с C/C++

22 октября 2019

Sublime Text — текстовый редактор с огромным надором дополнительных возможностей. Поддерживает различные языки программирования и умеет подсвечивать их синтаксис. А используя дополнительные расширения, можно добиться максимально комфортной и удобной работы и даже на время забыть, что используешь обычный текстовый редактор, а не интегрированную среду разработки вроде Visual Studio или Eclipse. В этой статье мы расскажем, как установить Sublime text на компьютер и настроить его для комфортной работы с языками C и C++.

Читать далее

Свёрточная нейронная сеть с нуля. Часть 4. Полносвязный слой.

15 октября 2019

В прошлый раз мы познакомились с различными активационными функциями, научились выбирать подходящую функцию для своего проекта и создали слои активации для нескольких функций. Сегодня мы рассмотрим работу полносвязного слоя, научимся считать градиенты для обратного распространения ошибки и обновлять весовые коэффициенты с помощью градиентного спуска и создадим очередной класс для этого слоя.

Читать далее

Свёрточная нейронная сеть с нуля. Часть 3. Активационный слой.

10 октября 2019

В прошлой статье мы создали слой пулинга и рассмотрели различные его типы. Пришло время поближе познакомиться с активационными слоями, их предназначением, а также рассмотреть различные активационные функции и описать общий алгоритм прямого и обратного распространения.

Читать далее

Свёрточная нейронная сеть с нуля. Часть 2. Слой подвыборки.

9 октября 2019

В прошлой статье мы создали свёрточный слой, научились считать градиенты при обратном распространении ошибки и обновлять весовые коэффициенты для уменьшения функции потерь. Сегодня мы разберёмся с тем, как уменьшается пространственная размерность входной карты признаков и как рассчитываются градиенты слоя пулинга. Помимо этого мы рассмотрим различные типы пулинга и решим, в какой ситуации лучше использовать каждый из них. Но для начала, давайте разберёмся, как вообще работает слой пулинга и какие его версии существуют.

Читать далее

Свёрточная нейронная сеть с нуля. Часть 1. Свёрточный слой.

7 октября 2019

В прошлой статье мы рассказывали о том, как устроена свёрточная нейронная сеть. В этой статье мы подробно разберём алгоритмы работы свёрточного слоя, напишем прямое распространение сигнала, обратное распространение ошибки с вычислением градиентов функции потерь по весам и по входам и научимся обновлять коэффициенты фильтров с помощью метода градиентного спуска.

Читать далее

Скомпилируйте и запустите код с помощью онлайн-компилятора и IDE

Главная » Практика » IDE

Скомпилируйте и запустите свой код с помощью CodeChef онлайн ИДЕ. Наш онлайн-компилятор поддерживает несколько языков программирования, таких как Python, C++, C, Kotlin, NodeJS и другие. многое другое.

Код проблемы: {{код_проблемы}}

{{еще}}

{{кэш автозаполнения=contestCodeCache minLength=0 listLimit=10 enterEvent=contestCodeEnter searchText=contestCode isValid=isValidContestCode placeholder=’Код/Имя конкурса (например, JULY21A/PRACTICE)’ url=contestCodeURL qParam=’contest_code’ primaryText=’ код’ listItemContainer=»custom»}}

{{автозаполнение кэша=problemCodeCache minLength=0 listLimit=10 searchObj=problemObj enterEvent=problemCodeEnter searchText=tempProblemCode isValid=isValidProblemCode placeholder=’Код/имя проблемы (например, TEST)’ url=problemCodeURL qParam=’problem_code’ primary= ‘код’ listItemContainer=»custom»}}

{{/если}} {{#if isProblemSubmissionPage}}

{{/если}}

{{/если}} {{/если}}

{{#просмотреть проблемуStatementView}} {{#если оператор}} {{{оператор преобразования уценки}}} {{#if inputFormatState}} {{#if inputFormat}}

Формат ввода

{{{convert-markdown inputFormat}}} {{/если}} {{/если}} {{#if outputFormatState}} {{#if outputFormat}}

Формат вывода

{{{convert-markdown outputFormat}}} {{/если}} {{/если}} {{#если состояние ограничений}} {{#если ограничения}}

Ограничения

{{{ограничения преобразования уценки}}} {{/если}} {{/если}} {{#if subtasksState}} {{#если подзадачи}}

Подзадачи

{{{подзадачи преобразования уценки}}} {{/если}} {{/если}} {{#каждый образец тестовых случаев}} {{#если значение. ввод}}

Пример ввода {{value.id}}

{{{convert-markdown value.input}}} {{/если}} {{#если значение.выход}}

Пример вывода {{value.id}}

{{{convert-markdown value.output}}} {{/если}} {{#если значение.объяснение}}

Объяснение

{{{convert-markdown value. explanation}}} {{/если}} {{/каждый}} {{еще}} Не удалось получить описание проблемы. Пожалуйста, обновите, чтобы повторить попытку. {{/если}} {{/просмотр}}

{{#if loadError}} {{еще}} {{/если}}

{{#if isReadyToSubmit}} {{еще}} {{/if}}

{{#if isReadyToRun}} {{#if loadError}} {{еще}} {{/если}} {{еще}} {{/if}}

Пользовательский ввод {{ace-editor editor=customInputEditor area=’with-min-max-ht’}}

{{#if shouldShowCustomInputEmptyNote}}

Примечание: Ваша программа будет запущена без ввода.

{{/если}}

{{#if runResponse}} {{#если работает}} {{еще}}

{{/если}} {{/если}}

Топ-5 бесплатных онлайн-сред IDE, компиляторов в 2020 году

В эпоху облачных вычислений не так уж и скучно использовать олдскульные автономные компиляторы и Ides. Без сомнения, автономные версии великолепны, но нам приходится устанавливать разные компиляторы для каждого языка вручную в каждой системе физически, что требует много места, а также нелегко переносить код на несколько систем. Но с помощью онлайн-компилятора или IDE к вашему коду можно получить доступ где угодно, никаких настроек и конфигураций не требуется. Без каких-либо аппаратных ограничений облачные компиляторы значительно повышают производительность программиста.

Онлайн-компиляторы очень легко запустить и использовать с веб-браузером и активным подключением к Интернету, вот и все. Скомпилируйте, сохраните свой код и получите к нему доступ из любого места без дополнительных затрат на управление и ограничения ресурсов. Эти веб-приложения можно использовать удаленно через любое сетевое соединение или устройство (независимо от платформы). Ошибки/вывод скомпилированной программы могут быть сохранены более удобно. Хотя на рынке доступно множество онлайн-компиляторов, выбрать лучший из них будет сложно, но не волнуйтесь, вот список из 5 лучших бесплатных онлайн-компиляторов. Вы должны попробовать это сразу.

1. GeeksforGeeks IDE

GeeksforGeeks — это самый популярный портал компьютерных наук с множеством замечательных статей и один из лучших веб-сайтов для изучения и практики кода. Он также имеет интеллектуальную IDE, где вы можете молниеносно запускать свой код с помощью пользовательских входных данных. У него есть несколько замечательных особенностей. Напишите или вставьте свой код любого популярного языка программирования в текстовую область и легко запустите свой код в Интернете. Вы также можете загрузить свой код и сгенерировать URL-адрес для удобного обмена.

  • Очень легкий, легко заводится, заряжается быстрее всего.
  • Измените тему на светлую или темную в зависимости от вашего удобства.
  • Легко переключайтесь на разные языки программирования.
  • Запускайте код на любом популярном языке, включая C++, Java, Python, Perl, Scala и т. д.
  • Ярлыки для экономии времени.
  • Загрузите код в свои локальные системы.
  • Хорошо работает даже на мобильных телефонах.
  • Полностью анонимно для использования без необходимости создания учетной записи.

2. Ideone

Это бесплатный онлайн-компилятор и отладчик, специально разработанный для программистов и разработчиков, где вы можете скомпилировать и запустить свой код с помощью пользовательского ввода всего за несколько секунд. Вы можете скомпилировать любой язык программирования с Ideone. Он также имеет некоторые замечательные функции, такие как вы можете сделать свой код секретным, чтобы поделиться им с определенными программистами, и это лучшая платформа для обмена вашим кодом с участниками вашего проекта.

  • Очень простая загрузка и быстрая платформа для быстрой проверки вашего кода.
  • Компиляция на более чем 60 языках программирования.
  • Сохраняйте свои коды в организованном порядке и делитесь ими по предоставленной ссылке.
  • Полнофункциональный инструмент отладки, который делает отладку простой и увлекательной.
  • Предоставляет возможность сделать код общедоступным, частным или секретным.
  • Встроить исходный код с автоматически сгенерированным кодом javascript.
  • Вы можете ввести некоторые примечания с вашим кодом для легкого понимания зрителей.
  • полезных ярлыка для простой и быстрой работы.

3. Repl

Repl.it — это онлайн-IDE, которая позволяет пользователям писать код и создавать приложения и веб-сайты с помощью браузера, а также позволяет пользователям обмениваться проектами различными способами. Они также проводят множество конкурсов по программированию с захватывающими призами. У него есть премиальный уровень, называемый планом Hacker, который предоставляет больше места для хранения, частный код и неограниченное количество соавторов в проекте, но вы также можете получить к ним бесплатный доступ в течение 3 месяцев с планом Github Education.

  • Используйте более 60 различных языков программирования, включая Python, Ruby, HTML и Java.
  • Очень легко обеспечивает совместную работу в режиме реального времени с вашими товарищами по команде и коллегами.
  • Поддерживает интеграцию с GitHub, импорт, запуск и совместную работу над миллионами репозиториев GitHub без ручных настроек.
  • Мгновенно разместите и разверните свой код по всему миру.
  • Огромная поддержка сообщества: более 500 000 активных разработчиков еженедельно и более 3 миллионов пользователей.
  • Быстрый и креативный пользовательский интерфейс расширяет возможности программирования.

4. OnlineGDB

Это онлайн-компилятор и инструмент отладчика для самых популярных языков программирования, таких как C, C++, Python, Java, PHP, Ruby, Perl и т. д. Это очень мощный компилятор, который является сверхбыстрым, поэтому загружает и дает результат мгновенно. Вы также можете использовать язык веб-разработки, включая HTML, CSS, JavaScript и SQL, используя этот онлайн-редактор кода.

  • Это первая в мире онлайн-среда разработки, предоставляющая возможность отладки с помощью встроенного отладчика gdb.
  • Удобное веб-приложение для программистов, которые любят программировать онлайн.
  • Надежная платформа без неожиданных сбоев.
  • Сверхмощная отладка, найдите сложные ошибки в вашей базе данных с помощью onlineGDB.
  • Вы можете программировать, компилировать, запускать и отлаживать онлайн из любого места и с любого устройства.

5. JDOODLE

Это бесплатный онлайн-компилятор и редактор кода для сохранения, запуска и обмена кодом в любое время и в любом месте без каких-либо настроек и аппаратных ресурсов, а только с активным подключением к Интернету и веб-браузером. Выберите любой из предпочитаемых вами языков программирования, напишите код и оцените результат своего кода.

  • Компилятор для более чем 70 языков программирования.
  • Вы можете легко встроить свой блог или веб-сайт.
  • Интерактивный онлайн-терминал для MySQL и MongoDB.
  • Мощный инструмент отладки, который поможет вам исправить ваш код.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *