Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Кубанский государственный университет»

Факультет МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК

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

КУРСОВАЯ РАБОТА

Разработка тренажера по арифметике на языке программирования PAscal

Работу выполнил __________________

Группа 23.1 факультет математики и компьютерных наук

Направление 010200.62 – математика, компьютерные науки

Руководитель работы ________________ , старший преподаватель

Краснодар 2014

Содержание

ВВЕДЕНИЕ. 3

1. АНАЛИЗ УСЛОВИЯ ЗАДАЧИ И ВЫРАБОТКА ПОДХОДА К ЕЕ РЕШЕНИЮ 3

2. ПОШАГОВАЯ РАЗРАБОТКА АЛГОРИТМА.. 3

3. КОД ПРОГРАММЫ.. 3

4. СКРИНШОТЫ РАБОТАЮЩЕЙ ПРОГРАММЫ.. 3

ЗАКЛЮЧЕНИЕ. 3

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ.. 3

ВВЕДЕНИЕ

Цель работы – решение поставленной задачи: разработать на языке программирования Pascal обучающую программу-арифметический тренажер.

Цель работы определила следующие задачи исследования:

1.  Провести анализ условия задачи и выработать подход к ее решению.

2.  Выбрать наиболее подходящие представления для входных, выходных и промежуточных данных.

3.  На основе выбранного подхода разработать алгоритм.

4.  Описать алгоритм на языке программирования.

5.  Составить тестовые примеры для отладки и демонстрации возможностей программы.

1. АНАЛИЗ УСЛОВИЯ ЗАДАЧИ И ВЫРАБОТКА ПОДХОДА К ЕЕ РЕШЕНИЮ

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

НЕ нашли? Не то? Что вы ищете?

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

2. ПОШАГОВАЯ РАЗРАБОТКА АЛГОРИТМА

Программа использует типы данных Integer, Char.

Сначала опишем математическую часть программы (шаги 1-3, 5), затем интерфейс пользова

1. Алгоритм решения начнем с определения переменных для операндов и знаков операций:

PROCEDURE Main(a, b,c, v,m:Integer; var mist:Integer);

VAR ch:Char; ans, pans:Integer, где a, b,c – операнды, включая ответ (c), переменная ans – скрываемый элемент, pans – ответ ученика.

2. Далее идет тело процедуры описания арифметических действий с возможностью выбора и последующей записи выбранного арифметического действия в переменную v, в зависимости от выбора преподавателя в начале работы программы. Здесь же описан текстовый элемент ch, необходимый для записи знака действия программой:

Begin

case v of

1:begin

c:=a+b;

ch:='+';

end;

2:begin

c:=a-b;

ch:='-';

end;

3:begin

c:=a*b;

ch:='*';

end;

4:begin

c:=b;

b:=a;

a:=b*c;

ch:='/';

end;

3. После этого начинается блок описания обработки примеров для ученика программой.

m:=random(3);

case m of

1:begin

ans:=a;

Writeln(' ? ',ch,' ',b,' = ',c);

readln (pans); if pans=a then mist:=mist+0 else mist:=mist+1;

end;

2:begin

ans:=b;

writeln(a,' ',ch,' ? = ',c);

readln (pans); if pans=b then mist:=mist+0 else mist:=mist+1;

end;

3:begin

ans:=c;

writeln(a,' ',ch,' ',b,' = ?');

readln (pans); if pans=c then mist:=mist+0 else mist:=mist+1;

end;

end;

Он использует следующие переменные: m – рандомный генератор чисел от 1 до 3 включительно для выбора «закрываемого» операнда, который не будет видеть ученик с описанием каждого отдельного примера (какое число закрывать), а также переменные ans, pans, известные нам по шагу 1. Также здесь присутствует впервые использованная переменная mist, отвечающая за сбор и накопление информации об ошибках ученика и последующем ее выводе. Программа считывает и сравнивает значение, которое ввел ученик с рандомным значением, выбранным самой программой в шаге 5. Если значения совпадают – программа добавляет 0 к счетчику ошибок, иначе – 1. Переменная mist до конца работы программы хранит в себе данные о накопленных ошибках или их отсутствии.

4. На этом шаге начинается описание текстовой части программы, так называемого интерфейса. Интерфейс предельно прост – программа просит ввести преподавателя:

4.1. Количество примеров для решения учащимся

4.2. Разрядность примеров для решения учащимся (единицы/десятки/сотни)

4.3. Арифметическое действие, с которым будет работать учащийся

Часть кода, описывающая вышеупомянутый функционал:

VAR a, b,c, i,j, n,m, v,mist:Integer;

BEGIN

WriteLn('Введите количество примеров');

ReadLn(i);

WriteLn('Введите разрядность примеров');

WriteLn(' 1. "Единицы"');

WriteLn(' 2. "Десятки"');

WriteLn(' 3. "Сотни"');

ReadLn(n);

WriteLn('Выберите действие:');

WriteLn(' 1. "+"');

WriteLn(' 2. "-"');

WriteLn(' 3. "*"');

WriteLn(' 4. "/"');

ReadLn(v);

ClrScr;

Здесь: помимо известных нам по предыдущим шагам переменных a, b, c, m, v есть и другие: переменная i – в нее программа записывает количество примеров, выбранное преподавателем для генерирования, а также переменная n – в нее программа записывает разрядность примеров, выбранную преподавателем для генерирования учащемуся.

Функция ClrScr предварительно очищает экран перед тем, как ученик начнет проходить тест. Это необходимо для того, чтобы ему не был известен тип заданий до начала их выполнения.

5. В зависимости от выбранного значения переменной n, активируется следующий и последний цикл, выполняющий подбор рандомных элементов в заданной разрядности. Здесь также используется ранее объявленная переменная j, по умолчанию равная 1.

6. После выполнения всей программы (после выполнения учеником всех примеров) переменные сортируются и выводится краткая статистика – число правильных ответов (i-mist), из количества примеров, которое программа хранит в переменной i (шаг 4) вычитается количество ошибок, которое программа хранит в переменной mist (шаг 3) и число неправильных ответов, хранящееся в переменной mist, после чего программа завершает свою работу.

3. КОД ПРОГРАММЫ

PROGRAM ArTrening;

USES CRT;

PROCEDURE Main(a, b,c, v,m:Integer; var mist:Integer);

VAR ch:Char; ans, pans:Integer;

Begin

case v of

1:begin

c:=a+b;

ch:='+';

end;

2:begin

c:=a-b;

ch:='-';

end;

3:begin

c:=a*b;

ch:='*';

end;

4:begin

c:=b;

b:=a;

a:=b*c;

ch:='/';

end;

end;

m:=random(3);

case m of

1:begin

ans:=a;

Writeln(' ? ',ch,' ',b,' = ',c);

readln (pans); if pans=a then mist:=mist+0 else mist:=mist+1;

end;

2:begin

ans:=b;

writeln(a,' ',ch,' ? = ',c);

readln (pans); if pans=b then mist:=mist+0 else mist:=mist+1;

end;

3:begin

ans:=c;

writeln(a,' ',ch,' ',b,' = ?');

readln (pans); if pans=c then mist:=mist+0 else mist:=mist+1;

end;

end;

End;

VAR a, b,c, i,j, n,m, v,mist:Integer;

BEGIN

WriteLn('Введите количество примеров');

ReadLn(i);

WriteLn('Введите разрядность примеров');

WriteLn(' 1. "Единицы"');

WriteLn(' 2. "Десятки"');

WriteLn(' 3. "Сотни"');

ReadLn(n);

WriteLn('Выберите действие:');

WriteLn(' 1. "+"');

WriteLn(' 2. "-"');

WriteLn(' 3. "*"');

WriteLn(' 4. "/"');

ReadLn(v);

ClrScr;

For j:=1 to i do begin

Case n of

1:begin

a:=random(9);

b:=random(9);

end;

2:begin

a:=random(90)+10;

b:=random(90)+10;

end;

3:begin

a:=random(900)+100;

b:=random(900)+100;

end;

end;

main(a, b,c, v,m, mist);

end;

WriteLn ('Тест завершен! Правильных ответов: ', (i-mist), ',ошибок: ', mist);

ReadLn;

end.

4. СКРИНШОТЫ РАБОТАЮЩЕЙ ПРОГРАММЫ

Тесты основной программы:

1.  Скриншот главного окна программы (выбор количества примеров)

2.  Скриншот выбора разрядности примера

3.  Скриншот выбора арифметической операции

4.  Скриншот задач. Такими их видит учащийся.

5.  Скриншот итогового окна со статистикой

ЗАКЛЮЧЕНИЕ

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

Разработанная программа предоставляет преподавателю выбор действия и разрядности примера, затем очищает экран и выводит примеры-тесты для учащегося. В процессе работы она считает количество ошибок, допущенных учеником и выводит их статистику в конце своей работы.
ПРИЛОЖЕНИЕ

Содержание прилагаемого диска.

Файлы 123abc (с расширениями *.o, *.pas, *.bak) – файлы модуля, содержащего типы данных и процедуры, используемые в программе.

Файлы 123abc (с расширениями *.exe, *.o, *.pas) – файлы программы курсовой работы.

Файл 123abc.pas – файл с основным примером работы программы.

Файл Курсовая работа Богдан Рахимов.docx – документ, содержащий курсовую работу в текстовом виде.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.  Абрамян М. Э., Михалкович С. С. Основы программирования на языке Паскаль: Скалярные типы данных, управляющие операторы, процедуры и функции. – Ростов-на-Дону. – . – 2004.

2.  Материалы с сайта http://www.cyberforum.ru

3.  Материалы с сайта http://www. programmersforum. ru