Как сделать программу тренажер

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

776 просмотров

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

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

Какие задачи мы выполнили с помощью чат-бота в Телеграме

В наше агентство Townsend обратился автор онлайн-проекта «Аурелиус» с задачей создать бот-тренажёр, чтобы помочь людям осваивать практики стоицизма (одно из направлений философии).

ТРЕНАЖЁРЫ ДЛЯ ДОМА?

Для клиента было важно:

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

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

Как сделать программу тренажер

Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF

Счет и вычисления – основы порядка в голове.

Иоганн Генрих Песталоцци

Умеете ли вы считать?

Каждый, конечно, скажет «Да!». Умение правильно считать – одно из самых важных для человека в жизни. Возможно, ребенок не знает, кем он будет в будущем, но хорошо понимает, что без умения правильно считать — не обойтись. Это и покупки в магазине, и расчет своего бюджета.

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

На уроках математики мы изучали положительные и отрицательные числа, а также действия с ними. И вот тут у моих одноклассников возникла масса проблем. Ребята неверно выполняют действия (заменяют одно действие другим), «теряют» знаки или наоборот ставят там, где не нужно. Допускается много ошибок при выполнении вычислений, появляются сложности при устном счете.

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

ПРОГРАММА ТРЕНИРОВОК в Тренажерном зале ДЛЯ ДЕВУШЕК. НАЧАЛЬНЫЙ УРОВЕНЬ

создать программу тренировки и автоматической проверки вычислительных умений.

изучить интернет-источники и литературу по данному вопросу,

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

разработать интерфейс программы,

написать программный код,

Гипотеза исследования: ф ормирование вычислительных навыков школьников будет успешным, если использовать для тренировки и проверки знаний компьютерные тренажеры.

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

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

Компьютерная автоматическая проверка имеет некоторые преимущества:

объективность при оценке результатов,

удобная количественная форма для выражения результатов,

повышенная устойчивость к искажению результатов,

результат проверки появляется сразу после выполнения заданий.

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

Но вместе с перечисленными достоинствами такой проверки существуют и некоторые недостатки:

негативные психологические реакции ,

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

автоматический контроль не способствует развитию устной и письменной речи учащихся;

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

Выбор программного обеспечения

Для создания приложения проверки и тренировки вычислительных умений была выбрана программа Lazarus.

Lazarus — это специальная программа со свободной средой для разработки любых проектов на основе Free Pascal. Lazarus — программа с полностью открытым исходным кодом, т.е. его коды доступны для изучения и изменения каждому. Еще говорят, что среда Lazarus – это RAD (Rapid Application Development) – среда Быстрой Разработки Приложений. Скачать программу можно на официальном сайте производителя, после чего программа устанавливается на компьютер.

Читайте также:
Программа чтобы зайти в Айфон

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

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

Основная часть

Первая часть работы – это установка приложения. Далее всю работу можно разделить на несколько этапов.

Создание графического интерфейса – расположение всех необходимых элементов на форме.

Написание программного кода, который определит, что делает созданный компонент.

Графический интерфейс тренажера

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

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

кнопка «Новый пример» для генерации случайного числа и поле, в котором будет прописан этот пример,

метка, в которую будет вводиться ответ,

кнопка «Проверить» по нажатию, которой можно будет понять верно или неверно решен пример,

метка, в которой будет результат проверки,

метка для вывода результата: сколько решено всего примеров и сколько из них правильных.

Рис. 1. Первоначальная форма проекта

Все кнопки и метки размещаются на форме, свойства которой можно настроить в инспекторе объектов (рис. 2). Ф орма нужна для того, чтобы увидеть каким будет окно будущего приложения.

Рис. 2. Инспектор объектов

Кнопка – это элемент управления, предназначенный для запуска каких-то действий. На панели в разделе Standart есть компонент TButton (рис. 3).

Рис. 3. Компонент TButton на панели в разделе Standart и на форме.

Этот компонент был использован для создания управляющих кнопок. Для каждой из кнопок в инспекторе объектов настраиваются свойства:

Caption – текст, отображаемый на кнопке,

Color – цвет кнопки,

Font – все, что относится к настройкам шрифта

Enabled – доступность кнопки

Для отображения нового примера, показа результатов проверки использовался компонент TLabel (рис. 4). Для ввода ответа – компонент TEdit . Основные свойства этих компонентов такие же, как и для кнопок.

Рис. 4. Компоненты TLabel и TEdit на панели в раздале Standart и на форме.

Программный код компонентов

Следующий этап – основная часть работы – это написание программного кода для работы каждого элемента на форме.

Работа с кнопками. Щелчок по кнопке вызывает событие On Click. Чтобы кнопка работала необходимо написать программный код, который определит, что должно происходить по нажатию кнопки. Кнопка «Новый пример» предназначена для генерации слагаемых для каждого нового примера вида a + b , где a и b – случайные целые положительные и отрицательные числа.

Формула случайного числа из отрезка [ a , b ]

x := random ( b – a +1) + a .

Процедура для кнопки «Новый пример» предназначена для генерации примера со случайными слагаемыми (программный код в приложении 1)

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

Для перечисленных действий были объявлены переменные: a , b , pr _ rez , nv _ rez , vs _ prim . Все эти переменные используются в разных процедурах, поэтому объявляются в начале программы и являются глобальными. А переменные x , sum нужны только в процедуре для кнопки «Проверить», поэтому они объявлены в начале кода процедуры и являются локальными.

В процедуре для кнопки «Проверить» для ввода ответа использовался компонент TEdit . Так как ввод ответа осуществляется в виде текста, а программа сравнивает числа необходимо число-строку преобразовать в непосредственно число, для этого используется функция StrToInt .

Для вывода результата использовался компонент TLabel и его свойство Caption . С его помощью можно задать текст надписи, например Label 4. Caption :=’Верно’.

Процедура для кнопки «Итого» (приложение 3) предназначена для вывода результатов в следующем виде: выводится количество правильных ответов и общее количество ответов.

Процедура для кнопки «Завершить» (приложение 4) предназначена для окончания работы с приложением. Эта процедура закрывает текущее окно.

Отладка программы

Если введен правильный ответ, то можно было нажимать сколько угодно раз кнопку «Проверить», при этом срабатывал счетчик правильных ответов, и, не решая новый пример можно было получить баллы за уже решенный пример любое количество раз. Поэтому необходимо было после получения правильно ответа сделать кнопку «Проверить» недоступной. Для этого необходимо настроить свойство Button 2. Enabled := false – кнопка неактивна, а при нажатии на кнопку «Новый пример» свойство Button 2. Enabled := true – кнопка вновь активна. Еще было решено добавить вывод сообщения о том, что пользователь должен выбрать новый пример или проверить свой результат, нажав кнопку «Итого». Для этого была использована команда ShowMessage (‘Выберите новый пример или нажмите кнопку ИТОГО’).

При выполнении программы возникала ошибка, когда вместо ответа-числа введен ответ-строка или оставлено пустое поле и нажата кнопка «Проверить». Для решения этой проблемы вместо функции StrToInt ( Edit 1. Text ) была использована функция StrToIntDef ( Edit 1. Text ,0).

Читайте также:
Данные моментального анализа на проектной стадии преобразуются в программу действий по формированию

После того, когда была выполнена эта часть работы, было решено на форму добавить таймер для подсчета затраченного времени на решение примеров. Для работы таймера был использован невидимый компонент таймер и объявлена переменная Counter: Integer = 0; после создается процедура для работы таймера.

Процедура для работы таймера (приложение 5).

Таймер – это счетчик, который запускается при нажатии на кнопку «Новый пример» Timer1.Enabled:=true; и останавливается при нажатии на кнопку «Проверить» Timer1.Enabled:=false.

Следующее усовершенствование созданной программы касалось работы с меню. Было решено создать на каждой форме меню «Тема» (рис. 5), в котором можно было сделать выбор действия с помощью подменю «Сложение чисел», «Вычитание чисел», «Умножение чисел».

Рис. 5. Меню для выбора действия

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

Для того, чтобы каждый раз новая форма была показана на экране, в том же месте, что и предыдущая, в инспекторе объектов для всех форм было настроено свойство Position со значением poDesktopCenter для того, чтобы окно выводилось в центре экрана (рис. 6).

Рис. 6. Настройка свойства Position

Для осуществления связи между тремя созданными формами была создана новая форма (рис. 7). С появлением новой – первоначальной формы стало возможно сразу выбрать необходимое действие.

Рис. 7. Начальная форма для выбора действия

Для этого в разделе implementation были добавлены связи между всеми формами uses u _ f 1, u _ f 2, u _ f 3;

На этой форме созданы кнопки, при нажатии на которые происходит выбор действия. Для показа окна с каждым действием использовались команды:

u _ f 1. itogo . ShowModal ;

ShowModal открывает определённое окно, так чтобы нельзя было вернутся к прошлому окну, т.е. если вы выбрали «Сложение», то это окно нужно обязательно закрыть, чтобы перейти в главное меню.

В процессе работы я предложил моим одноклассникам поработать с тренажером и решить несколько примеров. Сначала это были 10 примеров на сложение и вычитание положительных и отрицательных чисел. С тренажером ребята работали 2-3 недели по 2-3 раза в неделю. Результаты проверки представлены на диаграмме (рис. 8).

Рис. 8. Диаграмма «Результаты проверки»

В результате проведенной работы я:

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

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

Интернет-источники и литература:

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. «Самоучитель по программированию на Free Pascal и Lazarus »/ — Унитех, 2011

Автоматизация контроля результатов обучения учащихся [Электронный ресурс]- https://studbooks.net/2037482/pedagogika/vvedenie – статья в интернете.

Мансуров К.Т. Основы программирования в среде Lazarus . Учебник для студентов и преподавателей, а также для школьников и лиц, самостоятельно изучающих программирование на языке Паскаль, 2010 г.

Сайт-форум по работе в Lazarus http://www.cyberforum.ru/lazarus/

Сайт-форум по работе во FreePascal http://www.freepascal.ru/forum/

Приложение 1

Программный код для кнопки «Новый пример»

procedure Titogo.Button1Click(Sender: TObject); //Titogo — название формы

a := random (100)-40; //генерация первого слагаемого

b := random (90)-50; //генерация второго слагаемого

Label1.Caption:=IntToStr(a) + ‘+’ + ‘(‘ + IntToStr (b) + ‘)’

Else // иначе вывод без скобок ( )

Label1.Caption:= IntToStr (a) + ‘+’ + IntToStr (b);

Button 2. Enabled := true ; //Кнопка «Проверить» становится активной

Приложение 2

Программный код для кнопки «Проверить»

procedure Titogo.Button2Click(Sender: TObject);

var x , sum : integer ;

x := StrToIntDef ( Edit 1. Text ,0);//читаем введенный ответ и переводим его в числовой тип

sum := a + b ; //подсчет правильной суммы

if ( x = sum ) then //если ответ совпадает с правильной суммой

pr _ rez := pr _ rez +1; //счетчик правильных ответов +1

Label 4. Caption :=’Верно’; //пишем результат

ShowMessage (‘Выберите новый пример или нажмите кнопку ИТОГО’);

Button 2. Enabled := false ; //кнопка «Проверить» становится недоступной

Label 4. Caption :=’Неверно’; //пишем результат

vs_prim:= pr_rez+ nv_rez;

Приложение 3

Программный код для кнопки «Итого»

procedure Titogo.itogoClick(Sender: TObject);

var it_r: integer;

it.caption:=inttostr(it_r) + ‘ из ‘ + inttostr(vs_prim);

Приложение 4

Программный код для кнопки «Завершить»

procedure Titogo.Button3Click(Sender: TObject);

Приложение 5

Программный код для работы таймера

procedure Titogo.timerClick(Sender: TObject);

Источник: school-science.ru

Пишем онлайн-тренажёр для Python, C++ и Go: опыт Практикума

Один из вариантов мини-IDE в интерфейсе урока

Привет! Меня зовут Павел Свиридов, я руководитель группы разработки в Яндекс Практикуме. Сегодня я вместе со своим коллегой, разработчиком Владимиром Лукьяновым, хочу рассказать о том, как наша команда развивала онлайн-тренажёры в вебе — это такие маленькие среды разработки, встроенные в курсы Практикума. Основное внимание уделю тренажёрам Python и С++, а о других языках скажу пару слов в самом конце и покажу на примере, как создать тренажёр для языка Go.

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

Первая наша задача — максимально снизить порог входа для студентов. Курсы Практикума проходят даже те, кто не имел никакого отношения к разработке. Сразу погружать новичков в работу с полноценными IDE — идея не самая гуманная.

Читайте также:
Отзывы о программе касперского

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

Третья задача отчасти связана с первыми двумя — нам необходима одинаковая среда для запуска заданий. Даже если студент, который видит код второй-третий раз в жизни, установит себе IDE, не факт, что у него сразу получится настроить окружение как надо. Скорее всего, у него будут не те зависимости (своя ОС или версия интерпретатора) и какое-то своё окружение, что может привести к возникновению кастомных ошибок.

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

И, наконец, четвёртая не самая очевидная задача, которую мы решаем, создавая свой онлайн-тренажёр — дать студентам возможности, недоступные локально. К примеру, для обучения нейросети в курсе для специалистов по Data Science мы предоставляем машину с GPU, так что процесс, который мог бы занимать сутки и более, сокращается до нескольких часов.

Первый подход к снаряду: пробуем опенсорсное решение

Сначала мы решили не изобретать велосипед, а взяли в качестве тренажёра по Python опенсорсную библиотеку, которую написали Stepic. Она называется Epic Box. Запускать её предстояло на своих серверах, поэтому мы завернули библиотеку в сервис и раскатили у себя. Успешно пользовались ей полтора года — на старте проекта Epic Box нам очень помогла. Библиотека стабильно работала на небольшом количестве запросов, но не подходила для решения всех наших задач, например, для языка C++, где многие задания были интерактивными.

Также обнаружилась ещё одна проблема — задержки при запуске. В Epic Box код студента изолирован в докер-контейнере, и когда требуется его запустить, система поднимает контейнер, распаковывает, выполняет код и возвращает результат обратно. Таким образом, подготовка контейнера для выполнения задания студента начинается только после того, как студент нажимает кнопочку «выполнить» или «проверить».

Практика показала, что накладные расходы на выполнение всех этих действий достаточно высоки. Это минимум плюс 1–2 секунды, а в некоторых случаях и 3–4. Казалось бы, задержки небольшие, но они очень раздражали студентов, потому что случались каждый раз после правки одной буквы или строки. Особенно мешали задержки не в тех сценариях, где учащиеся решают объёмные задания в отдельном окне, а в сниппетах: у нас есть уроки, где после куска теории идут небольшие окошки, в которых можно быстро посмотреть, как работает та или иная функция на маленьком кусочке кода.

Поэтому параллельно внутри формировалось собственное решение. Его функциональность отличалась от того, что было в Epic Box, где студент отправляет код в тренажер, код выполняется, а затем обратно передается результат. Как я уже упоминал, в курсе по C++ нужно было реализовать более сложную схему с интерактивными задачами: после отправки кода на выполнение студенты должны иметь возможность взаимодействовать с контейнером, т.е. контейнер не включается после выполнения задания, а остаётся запущенным в ожидании команд или инпута от студента, отвечает на ввод и выключается только после бездействия или перехода к другому заданию.

Переносим опыт с самописным тренажёром C++ на Python

Архитектура второй версии тренажёра подразумевала постоянное соединение по веб-сокету между клиентом и его докер-контейнером. То есть в тот момент, когда студент заходит на страницу и начинает читать теорию или текст задания, мы уже поднимаем ему контейнер, с которым устанавливается соединение. И как только студент что-то пишет и нажимает кнопку «отправить», докер уже поднят, окружение готово, и результат возвращается очень быстро.

Тренажёр C++ на такой архитектуре работал отлично, всем всё нравилось. Но этому языку учится в разы меньше студентов, чем Python. Дело в том, что Python используется не в одной профессии, а во многих: его учат дата-аналитики, специалисты по Data Science, дата-инженеры и Python-разработчики. Из-за этого нагрузка на систему кратно возрастает.

Когда на платформе одновременно работает 1000 студентов, у каждого открыто своё задание, для каждого нужно поднять докер-контейнер и держать его наготове. При этом 90–99% времени контейнер простаивает, и мы только впустую греем воздух в дата-центрах и платим за это.

Здесь нужно отметить, что все запуски студенческого кода происходят вне контура Яндекса из соображений безопасности. Это изолированная среда в облаке, у которой нет доступа к пользовательским данным. В этом смысле мы работаем с Yandex Cloud как любой другой внешний заказчик. Расходы при использовании самописного решения в Python-тренажёре получались большими, хотелось их сократить.

Кроме того, из-за огромного количества виртуальных машин, которые постоянно запускались и гасли, оркестрация потихоньку сходила с ума. Swarm не справлялся и переставал работать адекватно. Студентам вылетали ошибки при запуске, реанимировать такие кластеры было невозможно, оставалась только жёсткая перезагрузка. При этом Docker Swarm считается уже устаревшей технологией, ему на смену пришёл Kubernetes. Мы проконсультировались с разными внешними экспертами по Swarm, и все отвечали нам одинаково — лучше переезжайте.

Переходим на serverless

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru