
Пример выполнения работы
1 Выполнить на ЭВМ. диалоговую программу, проверяющую знание обучаемым теоремы Виета. Обучаемому выдается основное задание: написать квадратное уравнение, если его корнями являются х1= <число> и х2= <число>. Значения корней — случайные числа из диапазона [—9,9]. Если ответ правильный, то можно переходить к следующему заданию, приняв новые значения корней xl, х2. Если ответ неправильный, то предложить снова ответить на то же задание. Если после второй попытки ответ опять не совпал с эталоном, то предложить новые дополнительные вопросы:
1) ввести коэффициент перед х в первой степени со знаком;
2) ввести свободный член со знаком. Если оба этих ответа правильные, то признать ответ правильным, вывести его и перейти к следующему заданию. Если ответ на какой-либо из этих заданий неправильный, то можно судить о причине ошибки.
Выполнение программы закончить, если подряд три ответа на вопросы были правильными с первой попытки или или общее число вопросов равно 10. В программе предусмотреть помощь обучаемому, подсчитать число основных заданий п, число правильных ответов с первой попытки n0, общее число ответов n1. По результатам контроля определить оценку: «5», если n0 = n; «4», если n - n0≤2; «3», если n - n0≤4;
«2», если n - n0>4 или n≥10.
Алгоритм решения может быть следующим. Организуем цикл по числу основных вопросов i от 1 до 10. Для каждого основного вопроса с помощью датчика равномерно распределенных случайных чисел получим два случайных числа — y1 и y2 из диапазона [0, 1]. Затем вычислим два случайных числа x1 и x2 из диапазона [—9, 9], которые являются корнями квадратного уравнения. Обучаемому выведем сообщение: «Определите квадратное уравнение, если его корни равны xl = <число>, х2= <число> и введите ответ», где x1 = <число 1> и х2= <число 2> — значения корней х1 и х2.
Сформируем эталон правильного ответа. Для этого в начале программы в массив или строковую переменную W (где размещается эталонный ответ) введем следующую информацию:
Х*Х *Х =0
Так как результатом решения задачи является квадратное уравнение вида х2-(x1+х2)х+(х1х2)= 0 или х2-bx+c= 0. Для простоты потребуем от обучаемого вводить первый член квадратного трехчлена в виде Х*Х. В различных вариантах задачи значения элементов 1, 2, 3, 7, 8, 12, 13 постоянны, а значения элементов 5, 6, 10, 11 изменяются и равны значениям b и с, как и элементов 4 и 9, являющиеся знаками чисел b и с. В условиях задачи значения b и с могут быть одно- или двухразрядными целыми числами, поэтому каждому из этих чисел отводится по два элемента.
После вычисления b=-(х1+х2) и с =(х1х2) необходимо элементам W 4, 5, 6 и 9, 10, 11 присвоить значения соответственно b и с вместе с их знаками. Если b>0, то элементу 4 строки присвоим символ « + », в противном случае — символ « — », а элементам 5 и 6 — значение переменной b. Аналогично поступить со знаком с, присвоив его элементу 9 переменной W, а элементам 10, 11 — значение с.
Если b или с являются одноразрядными числами, то в эталоне содержатся пробелы, что может привести к несовпадению его с правильным ответом, поэтому необходимо удалить пробелы из эталона. Поскольку и ответ может содержать пробелы, их также необходимо удалить. Чтобы не описывать процедуру удаления пробелов дважды, вынесем ее в подпрограмму.
После удаления пробелов из ответа и эталона осуществляется их сравнение Если ответ и эталон представлены строковыми переменными, то они сравниваются целиком. Если же они хранятся в массивах А и W, то необходимо организовать цикл, внутри которого ответ и эталон сравниваются поэлементно (последовательно, так как каждый символ является отдельным элементом массива) Посимвольное сравнение приведет к увеличению объема программы и усложнению схемы алгоритма, однако оно позволит установить позицию несовпадения ответа с эталоном и тем самым даст информацию о причине ошибки
Рассмотрим случай сравнения ответа с эталоном, представленным строковыми переменными.
Если совпадения не происходи т, то увеличивается на единицу количество попыток ответить на данный вопрос L. Количество неправильных ответов на данный вопрос n2, общее количество ответов n1, а количество правильных ответов k, данных подряд, считается равным нулю. Затем проверяется условие n2<2, при выполнении которого обучаемому выдается сообщение об ошибке и предлагается снова ответить на этот же вопрос. Если n2≥2, то осуществляется анализ ответа обучаемого по частям
Если ответ и эталон совпали, то проверяется условие L= 0 (т. е. правильный ответ дан с первой попытки), т. е, на единицу увеличиваются количество правильных ответов По, данных с первой попытки, и количество правильных ответов k, данных с первой попытки подряд. В противном случае значения n0 и k не изменяются. Затем проверяется условие k < 3, если оно выполняется, то выдается сообщение о правильности ответа, изменяется на единицу общее количество ответов n1 и осуществляется переход к новому заданию. Если k≥3, то общее количество заданий п принимает значение i и осуществляется выход из цикла.
Анализ ответа обучаемого по частям осуществляется следующим образом. Обучаемому предлагается первый дополнительный вопрос: «Введите коэффициент при X в первой степени В». После этого значение В сравнивается со значением b, вычисленным в программе (сравнение удобнее вести в числовой форме). Если ответ и эталон совпадают, то предлагается второй дополнительный вопрос, в противном случае выясняется, что ошибка вызвана неправильным вычислением значения коэффициента b (о чем дается сообщение обучаемому), при этом изменяются значения n1 и n2 на единицу и предлагается исправить ошибку и снова ответить на этот же вопрос. Цикл повторяется до тех пор, пока не будет получен правильный ответ или обучаемый не попросит помощи.
Аналогично анализируется ответ на второй дополнительный вопрос. После получения правильных ответов на оба дополнительных вопроса обучаемому выдается сообщение о правильности, изменяется на единицу значение n1 и осуществляется переход к следующему основному заданию.
Алгоритм решения задачи должен предоставлять обучаемому возможность потребовать помощи в любой момент, когда диалоговая программа ожидает ввода отчета обучаемого. Для вызова помощи обучаемому необходимо ввести букву «П» Анализ ответа обучаемого в алгоритме осуществляется сравнением с символом «П». Если совпадения не происходит, то продолжается анализ ответа обучаемого описанным выше способом. Если совпадение происходит, то обучаемому выводится информация, которую автор программы определил как помощь обучаемому. Например, если обучаемый потребует помощи в ответ на основной вопрос, то в качестве сообщения можно выдать информацию о том, как, зная корни уравнения, определить коэффициент b и свободный член с квадратного уравнения. Если же он потребует помощи при ответе на первый дополнительный вопрос, то сообщение может содержать информацию о том, что коэффициент b равен сумме корней уравнения, взятой с обратным знаком, а при ответе на второй дополнительный вопрос — что свободный член равен произведению корней уравнения.
Выход из цикла, определяющего номер основного вопроса, возможен двумя способами: 1) при получении подряд трех правильных вопросов (k≥3), в этом случае n = i, где i — номер последнего вопроса, на который отвечал обучаемый; 2) естественным образом, после того как цикл будет выполнен 10 раз, в это случае n=10.
Обработка статистических данных в этом примере состоит в накоплении значений переменных n, n0, n1 и определении оценки обучаемого по результатам контроля. Определение значений n, n0 и n1 приводилось выше. При определении оценки необходимо организовать разветвляющийся алгоритм, в ветвях которого проверяется выполнение условий:
n=n0; n-n0≤2; n-n0≤4.
В конце цикла работы обучаемому можно вывести сообщение о числе вопросов, на которые он отвечал, о числе правильных ответов с первой попытки, о числе попыток ответить на вопросы.
Подпрограмма, предназначенная для удаления пробелов из ответа и эталона, может быть построена по следующему алгоритму.
Организуем цикл по i, который должен выполняться 15 раз (выбрано по количеству символов в ответе или эталоне плюс два пробела). Этот цикл просматривает все символы ответа или эталона и сравнивает их с символом пробела. Если происходит совпадение для k-го элемента, то элементы, начиная с (k+l)-гo до последнего, переписываются на место элементов, начиная с k-гo.
Если эталон и ответ обучаемого хранятся в символьном массиве, то необходимости в подпрограмме, предназначенной для удаления пробелов, нет, так как анализ ответа и эталона осуществляется посимвольно и каждый раз, когда в них будут появляться символы « », необходимо их удалять, как это делалось в подпрограмме, либо игнорировать и брать для анализа следующий символ.
Схема алгоритма решения представлена на рис. 1. Блок 2 задает начальные значения n, n0, n1 и k, равные нулю. Блок 4 задает начальное значение строковой переменной W, предназначенной для хранения эталона. Блок 3 организует цикл по номеру вопроса i, блок 5 задает начальные значения L и n2, равные нулю. Блоки 6 к 8 осуществляют обращение к подпрограмме для получения равномерно распределенных случайных чисел y1 и y2 в диапазоне [0, 1], а блоки 7 и 9 вычисляют значения случайных чисел х1 и х2 в диапазоне [—9,9]. Блок 10 вычисляет значение коэффициента b при х в первой степени и свободного члена с. Блок 11 проверяет знак переменной b и записывает в 4-ю позицию эталона символы « + » или « — » (блоки 12, 13), а блок 14 записывает в позиции 5 и 6 число, соответствующее b, в символьной форме. Блоки 15, 16, 17, 18 выполняют те же действия, что и блоки 11, 12, 13, 14, но только для переменной с. Блок 19 осуществляет обращение к подпрограмме для удаления пробелов из эталона, блок 23 — из ответа обучаемого, который перед этим вводится с помощью блока 22. Блок 24 проверяет, не является ли ответ обучаемого обращением за помощью: если «да», то ему выдается сообщение 2 (блок 25), содержащее помощь, и далее осуществляется переход к блоку 28, в противном случае с помощью блока 26 производится анализ ответа обучаемого. Если ответ не совпадает с эталоном, то увеличиваются на единицу значения n1 и n2, присваивается k значение ноль (блок 28), проверяется с помощью блока 30 условие, что данный ответ является первым неправильным ответом на данный вопрос. Если это условие выполняется, то выводится сообщение 4 (блок 36) и осуществляется возврат к тому же заданию (к блоку 21), а в противном случае — переход к анализу ответа по частям, который начинается с блока 32.
Если условие A = W (блок 26) выполняется, т. е. ответ правильный, то с помощью блока 27 проверяется условие L = 0 (ответ правильный с первой попытки). Если это условие выполняется, то по и k увеличиваются на единицу (блок 29) и далее осуществляется переход к блоку 31. Если условие не выполняется, то сразу осуществляется переход к блоку 31, который проверяет условие k≥3 (было получено подряд три правильных ответа). При выполнении условия п получает значение i-гo номера текущего основного вопроса (блок 35) и осуществляется переход к обработке статистических данных (к блоку 47). Если условие k≥ 3 не выполняется, то обучаемому выдается сообщение 3, подтверждающее правильность ответа (блок 33), осуществляется переход к блоку 34, увеличивающий значение n1 на единицу, и далее переход к блоку 3 для выполнения действий над следующим основным заданием.
Обработка ответа по частям начинается с выдачи сообщения 5 (текста первого дополнительного вопроса) с помощью блока 32. Блок 37 осуществляет ввод ответа на этот вопрос. Блок 38 осуществляет анализ правильности ответа. Если ответ правильный, то осуществляется переход к следующему дополнительному вопросу (блок 39). В противном случае выдается сообщение 7, указывающее причину ошибки, изменяются значения n1 и n2 на единицу и осуществляется переход к блоку 32 (возврат к тому же вопросу)
Аналогично с помощью блоков 39, 41, 43, 44, 45 производится анализ ответа на второй дополнительный вопрос.
Блоки 47, 48, 49, 50, 51, 52, 53 определяют оценку обучаемого, полученную по результатам контроля, и выводят сообщение о ней Блок 54 выводит заключительное сообщение, в котором указывается: число вопросов, на которые отвечал обучаемый n; число вопросов, на которые он ответил правильно с первой попытки n0; число сделанных попыток ответить на вопросы n1. На этом цикл работы с диалоговой программой заканчивается.
Далее приведена схема алгоритма, реализованного в подпрограмме, предназначенной для удаления пробелов из ответа обучаемого и эталона.
Рисунок 1
Рисунок 1 (продолжение)
Рисунок 1 (продолжение)
Рисунок 1 (продолжение)
Рисунок 1 (продолжение)
Программа, реализующая алгоритм, представленный на рис.1 на языке ПАСКАЛЬ:
PROGRAM LR14(INPUT,OUTPUT);
LABEL 5,10,15,2O,25,3O,35,45,5O;
CONST NV=10; NA=l5;
TYPE ST=STRING[NA];