Научная статья на тему 'О структурировании лабораторно-практических занятий при изучении дисциплин программирования'

О структурировании лабораторно-практических занятий при изучении дисциплин программирования Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
366
62
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МАТЕМАТИКА / ПРОГРАММИРОВАНИЕ / ПРИМЕРЫ И ЗАДАНИЯ / ПРОГРАММНАЯ РЕАЛИЗАЦИЯ / СТРУКТУРА ЗАНЯТИЙ / ТЕХНИЧЕСКИЙ ВУЗ / ЯЗЫК C / MATLAB / MATHEMATICS / PROGRAMMING EXAMPLES AND ASSIGNMENTS / SOFTWARE IMPLEMENTATION / STRUCTURE OF EMPLOYMENT / TECHNICAL COLLEGE / C LANGUAGE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Афонин Виктор Васильевич, Федосин Сергей Алексеевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The article discusses the methodology of the laboratory employment programming for engineering trends and profiles. Are examples of programming in C language in Microsoft Viasual Studio and MATLAB. Shows the structure of the laboratory and practical training, which includes, in particular, the need for support in the preparation of mathematical software algorithm to solve this problem. To better capture material deemed necessary to consider the solution of the full program code with subsequent tasks arising either from the problem or of its software implementation. Parses the expected inaccuracies programming with correct mathematical description of a problem.

Текст научной работы на тему «О структурировании лабораторно-практических занятий при изучении дисциплин программирования»

О структурировании лабораторно-практических занятий при изучении дисциплин программирования

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

имени Н.П. Огарёва, ул. Б.Хмельницкого, 39, г. Саранск, 430005, (8342)478691 afomnw@fet mrsu. т fedosinsa@freemail. mrsu.ru

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

имени Н.П. Огарёва, ул. Б.Хмельницкого, 39, г. Саранск, 430005, (8342)478691 afoninvv@fet. mrsu. т fedosinsa@freemail. mrsu.ru

Аннотация

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

The article discusses the methodology of the laboratory employment programming for engineering trends and profiles. Are examples of programming in C language in Microsoft Viasual Studio and MATLAB. Shows the structure of the laboratory and practical training, which includes, in particular, the need for support in the preparation of mathematical software algorithm to solve this problem. To better capture material deemed necessary to consider the solution of the full program code with subsequent tasks arising either from the problem or of its software implementation. Parses the expected inaccuracies programming with correct mathematical description of a problem.

Ключевые слова

математика, программирование, примеры и задания, программная реализация, структура занятий, технический вуз, язык C, MATLAB;

mathematics, programming examples and assignments, software implementation, the structure of employment, technical college, C language, MATLAB.

Введение

При подготовке специалистов и бакалавров инженерных направлений и профилей многие дисциплины федерального компонента учебного плана базируются на математических знаниях технического вуза и программирования. Такие дисциплины, как правило, сопровождаются лабораторными и/или практическими занятиями. В частности, в направлении «Информатика и вычислительная техника» по профилю «Автоматизированные системы обработки информации и управления» есть дисциплины «Программирование», «Технологии программирования», «Программная инженерия». По рекомендации Минвуза РФ включается в учебный план также дисциплина «Основы автоматики» и пр. Названные дисциплины базируются на многих математических разделах технического вуза. В связи с этим лостаточно актуальным является сбалансированное включение в лабораторный практикум математических знаний, программирования и собственно изучаемой дисциплины. Даже в программировании ряд математических аспектов требует тщательного изучения для программного решения учебных задач. Поэтому авторы считают, что в структуре лабораторного практикума каждой лабораторной работе должно быть уделено особое внимание в плане улучшения математических компетенций обучающихся. Этому должно способствовать тщательный подбор примеров (задач), с теоретической базой, необходимой для их решения и программирования. Авторы опираются на свой многолетний опыт в проведении учебно-практических занятий в Национальном исследовательском университете им. Н.П. Огарёва по направлению «Информатика и вычислительная техника» в соответствии с профилем «Автоматизированные системы обработки информации и управления».

Методика структурирования

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

занятиях можно рекомендовать акцентировать работу совместно с преподавателем, предполагая, что он является носителем знаний. Личный контакт способствует лучшему пониманию и усвоению предмета или какого-то учебного раздела. При этом обучаемому не надо тратить время на поиск в Интернете возможно тривиальных вопросов, и не только тривиальных. В тоже время учебно-практический материал должен быть тщательно подготовлен. Во-первых, должна быть проработана тема для практического изучения. Во-вторых, в теме следует отразить два раздела или части по изучению материала: теоретическую и практическая части. В-третьих, материал занятия должен быть достаточен для выполнения учебно-практической работы. Предполагаемая структура материала для лабораторно-практического занятия представлена на рис.1. Обучаемый не должен тратить время на поиски каких-то вопросов и ответов при выполнении предложенных заданий в виде задач и примеров. Конечно, предполагается, что обучаемый (студент) посещает часы лекционного курса. В связи с этим, теорети-

Тема работы _

Цель работы Теоретическая часть

Запрофаммированный пример, на основе которого строится задание

п

Задание (по шагам)

гг

Запрограммированное задание

Рис.1 Структура описания лабо-раторно-практического занятия

ческая часть описания учебно-практического занятия не должна изобиловать математическими выкладками, доказательствами и пр. для получения результатов, необходимых для выполнения работы. Обычно необходимы только конечные результаты с их практической интерпретацией. Практическая часть сопровождается примерами и задачами, которые способствуют освоению теоретического материала как данного лабораторно-практическкого занятия, так и лекционного курса по данной теме. Авторы считают, что все практические примеры должны быть представлены с решениями и программной реализацией. В связи с этим, у преподавателя возникает необходимость в структурированности лабораторно-практических занятий, которые бы способствовали развитию математического мышления и способностей при изучении той или иной учебной дисциплины. Приводимые примеры должны порождать задания к приведенному решению, к изучению необходимых вопросов для получения решения самомтоятельно. Конечно, преподаватель обязан объяснить поиск решения задания. В некоторых случаях, может быть применена демонстрация конечного результата, например, результата программирования. Как показывает опыт, это бывает достаточно, чтобы активизировать деятельность в решении и программировании соответствующей задачи. В противном случае следует дать постепенное объяснение решения задачи в том ключе, чтобы возникало собственное понимание или понимание того, что некоторые разделы курса необходимо дополнительно изучить или повторить. В большей мере подобная структура учебно-практических занятий отражена в [1-3].

Примеры практических заданий

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

Пример 1. Заполнить массив случайными числами, распределенными, например, по равномерному закону, и определить среднее арифметическое значение и дисперсию. Размер массива определяется динамически во время выполнения программы. Решение выполнить на языке С/С++ в MS Visual Studio (2012, 2013).

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

1 п

D = -X(X -х)2, П1=\

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

_ 1 n

X = Xi. ni =1

Здесь надо отметить, что приведенная формула расчета дисперсии есть состоятельная, но смещенная оценка дисперсии генеральной совокупности [4]. Вообще, надо применять несмещенную оценку дисперсии, а именно

1 п

D = —-X(хг -х)2. п -- ¿=1

В плане программирования особых проблем нет. Приведем возможный программный код решения примера на языке С:

/*

* Пример расчета исправленной выборочной дисперсии */

#incLude <stdio.h> #incLude <conio.h> #incLude <stdLib.h>

const int N = 123456789; // размер одномерного массива

int main(void) {

double a = 1.0, // левая граница интервала

b = 5.0; // правая граница интервала double Mx = 0.0, // среднее

D = 0.0; // исправленная выборочная дисперсия double *ptr; // указатель на тип double

int i;

// Выделение памяти под массив вещественных чисел ptr = (double*) caLLoc(N, sizeof(doubLe));

if (ptr == NULL) {

printf("\n Memory is not aLLocated. Press any key: "); _getch();

exit(1); // завершение выполнения программы

}

// Заполнение выделенной памяти равномерно // распределенными случайными числами из интервала [1, 5]

for (i = 0; i < N; ++i) {

ptr[i] = a + (b - a)*rand()/RAND_MAX;

// RAND_MAX = 32767, не менее }

// Расчет среднего арифметического выборки - массива

for (i = 0; i < N; ++i) {

Mx += ptr[i];

}

Mx /= N;

// Расчет исправленной выборочной дисперсии

for (i = 0; i < N; ++i) {

D += (ptr[i] - Mx)*(ptr[i] - Mx); } // фигурные скобки не обязательны D /= (N - 1);

free(ptr); // освобождение памяти // Результаты

printf("\n Mean = %g; Variation = %g\n", Mx, D);

printf("\n Press any key: ");

_getch();

return 0;

}

Возможный результат выполнения программы: Mean = 3.00022; Variation = 1.33356

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

Теперь можно перейти к формулировке заданий к данной программе:

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

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

Первое задание состоит на знание функций стандартной библиотеки языка С, следует применить функцию srandO. Второе задание оптимизирует программу, сокращает количество длительных циклов ^ = 123456789 - велико). Для его выполнения необходимы знания по математической статистике. Как известно [4], дисперсия -это математическое ожидание от квадрата отклонения случайной величины х от своего математического ожидания Мх, т. е.

В = М [(х - Мх )2].

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

В = М[(х-Мх)2] = М[х2 -2хМх + М2] = М[х2] -2МхМ[х] + М2 = = М[ х2] - 2Мх2 + М2 = М[х2] - М2.

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

1 п

М [ х 2] = М 2 = - X х2.

п 1=\

Для получения несмещенной оценки результат расчета дисперсии следует умножить на и/(и-1) [4].

Пример 2. Моделирование дискретной системы, состоящей из полидисперсных сфер, заданных своими диаметрами. Моделирование выполнить в МЛТЬЛВ с построением плоской модели.

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

щего подмножества размещается касающаяся их сфера последующего подмножества [6].

Плоская модель элемента дискретной системы, состоящей из полидисперсных сфер, приведена на рис. 2.

Обозначим через r и R радиусы малой и больших окружностей. Задача заключается в определении связи между радиусами большой и малой окружности. Треугольник ABC является равносторонним, поэтому угол ZOAC равен 30o (л/6). Рассмотрим прямоугольный треугольник AOD. Очевидно, что сторона (гипотенуза) AO равна сумме двух радиусов, т. е. AO = R + r. В свою очередь катет AD есть большой радиус R, следовательно, AD = R. Выразим AO в следующем виде: R + r = R/cos(^/6). Разделив обе части уравнения на R, получим

1 + r/R = 1/cos(rc/6); r/R = 1/cos(rc/6) - 1 = 1.1547 - 1 = 0.1547.

Полученный результат означает, что r = 0.1547-R. При подобном рассмотрении можно получить аналогичную зависимость между следующими подмножествами. Обобщая, для n-го подмножества будем иметь rn = (0.1547)n-R [6].

При моделировании можно напрямую использовать константу в виде выражения 1/cos(rc/6) - 1.

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

function task3

%% Модель полидисперсных сфер

%% x0, y0, R - координаты центра и радиус базовой окружности %% Nt - число точек базовой и последующих окружностей %% n - число уровней самоподобия

%% Три сферы имеют точки соприкосновения, не пересекаются cLc,cLose all

x0 = -7 + 14*rand; % из [-7, 7] по равномерному закону y0 = -5 + 10*rand; % из [-5, 5] по равномерному закону R = randi([3, 21]); % случайный размер радиуса, целое число Nt = 2000;

n = randi([1,4]); %% 4, 5, 6, ...

0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

XЪ/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о/о%%%%%%%%%%%%%%%%%%%%%%%%%%%

[ R3, Rn, XYC, XT, YT ] = Repeat(R, x0, y0, Nt); %% пользовательская функция Dgram(Nt, x0, y0, XYC, XT, YT, 1, R, R3, Rn, false, n); for k = 1 : n

[ R3, Rn, XYC, XT, YT ] = Repeat(Rn, x0, y0, Nt); Dgram(Nt, x0, y0, XYC, XT, YT, 1, R, R3, Rn, false, n); end

end XX end function task3

function [ R3, Rn, XYC, XT, YT ] = Repeat( R, x0, y0, Nt ) % Функция создания массивов для построения окружностей % Прототип функции:

X [ R3, Rn, XYC, XT, YT ] = Repeat( R, x0, y0, Nt )

% Аргументы функции:

/ R - радиус порождающей окружности

/ x0, y0 - координаты центра порождающей окружности

/ Nt - число точек окружностей

% Возвращаемые значения:

/ R3 - радиусы трех окружностей

/ Rn - радиус малой вложенной окружности

/ XYC - массив координат центров трех окружностей

/ XT, YT - массивы для построения трех окружностей

x1 = R*cos(pi/6);

R3 = x1*R/(x1 + R);% радиусы трех окружностей

D = 2*R3; % диаметр каждой из трех окружностей

d = D*(1 - cos(pi/6))/cos(pi/6); % диаметр малой окружности

XXX z = d/D; / z = 0.1547 - const

%% Радиус малой внутренней окружности

%% между тремя большими окружностями

Rn = d/2;

%% Возвращаемые массивы построения вложенной окружности t = Linspace(0, 2*pi, Nt);

%% Массив для координат центров трех окружностей XYC = zeros(3,2);

%% Цикл построения трех окружностей

XT = zeros(3, Nt); % координаты X для трех окружностей YT = zeros(3, Nt); % координаты Y для трех окружностей k = 0;

for ug = -pi/6 : (pi/2 + pi/6) : 2*pi k = k + 1;

%% Координаты центров малых окружностей xm = (R-R3)*cos(ug) + x0; ym = (R-R3)*sin(ug) + y0;

xt = R3*cos(t) + xm; yt = R3*sin(t) + ym; if k < 4

XYC(k, 1 : 2) XT(k, 1 : Nt) YT(k, 1 : Nt)

end

end // end for end /// end Repeat()

function Dgram(Nt, x0, y0, XYC,XT, YT, gnum, R,R3,Rn,da,n) / Прототип функции:

X Dgram( Nt, x0, y0, XYC, XT, YT, gnum, R, R3, Rn, da ); % Аргументы функции: / Nt - число точек окружностей

/ x0, y0 - координаты центра порождающей окружности / XYC - координаты центра трех окружностей / XT, YT - массивы для построения трех окружностей / gnum - номер диаграммы X R - радиус порождающей окружности

= [xm, ym]; %% сохранение в массиве = xt; = yt;

% R3 - радиус каждой из трех окружностей % Rn - радиус вписанной окружности

% da - булевый тип, для построения меток центров окружностей % n - число уровней самоподобия figure(ceiL(gnum)) %% Порождающая окружность t = Linspace(0, 2*pi, Nt); x = R*cos(t) + x0; y = R*sin(t) + y0;

Line(x,y,'coLor','k', 'Lines', ':') % порождающая окружность hold on

%% Координаты центральных окружностей if da

Line(x0, y0, 'marker', 'o', 'markersize', 4, 'coLor', 'k', 'markerfacecoLor', 'k') end

grid off

%% Одна вложенная окружность xr = Rn*cos(t) + x0; yr = Rn*sin(t) + y0; Line(xr, yr, 'coLor', 'k') %% Построение центров трех окружностей for k = 1 : 3 if da

Line(XYC(k,1), XYC(k,2), 'marker', 'o', 'markersize', 4, 'coLor', 'k', 'markerfacecoLor', 'k') end

Line(XT(k, :), YT(k, :), 'coLor', 'k') %% три окружности, сдвинутые на 120 градусов угловых end

%% Границы координатных осей xLim([min(x) - R/10, max(x) + R/10]) yLim([min(y)- R/10, max(y) + R/10]) z = Rn/R3;

titLe([ ' r_0 = ', num2str(R3), '; r_1 = ', num2str(Rn), '; r_1/r_0 = z = ', num2str(z), '; n = ', num2str(n)],...

'FontName', 'ConsoLas','fontsize', 10, 'FontWeight', 'demi') xLabeL('\it\fontsize{14}\fontname{georgia}x') yLabeL('\it\fontsize{14}\fontname{georgia}y ') axis equaL

set(gcf, 'name', 'Плоская модель полидисперсных сфер', 'coLor', 'w') end % end Dgram()

Пример выполнения программы показан на рис. 3.

гв = 0.0025764; = 0.00039858; r^/r^ = z = 0.1547; n = 3

15 -

10 -

5 -

3i

О -

-5 -

-10 -

-20 -15 -10 -5 0 5 10 15

Рис. 3. Модель полидисперсных сфер с уровнем самоподобия n = 3

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

Заключение

Рассмотрены этапы структурирования учебно-практического практикума инженерных специальностей для дисциплин, связанных с программированием. Приведенные примеры в различных средах программирования раскрывают предложенную структуру создания описания лабораторных работ, показывают соотношения между теоретическим и практическим наполнением практикума. Отмечается необходимость развития математических компетенций при написании программ по решению поставленных задач. В качестве образцов выполнения лабораторного практикума можно рекомендовать работы авторов [1-3].

Развитию математических компетенций посвящен реализуемый при поддержке Европейской Комиссии проект «Современные образовательные технологии преподавания математики в инженерном образовании России» в рамках гранта программы Темпус 543851 -TEMPUS-1-2013-1 -DE-TEMPUS-JPCR). Основой проекта является электронная система поддержки обучения математики Math-Bridge , позволяющая реализовывать различные педагогические стратегии и обучающие сценарии. Платформа разработана консорциумом европейских вузов и является распределенным инструментом поддержки технологии расширенного обучения ( Technology-Enhanced Learning). Анализ возможностей Math-Bridge показал, что предлагаемый подход к структурированию лабораторно-практических занятий органично реализуется в предлагаемых системой сценариях обучения.

Данный проект профинансирован при поддержке Европейской Комиссии в рамках программы Темпус (№ гранта: 543851-TEMPUS-1-2013-1-DE-TEMPUS-JPCR). Эта публикация отражает исключительно взгляды авторов. Комиссия не несет ответственности за любое использование информации, содержащейся здесь

This project has been funded with support from the European Commission. This publication [communication] reflects the views only of the author, and the Commission cannot be held responsible for any use which may be made of the information contained therein.

Литература

1. Александров Э.Э., Афонин В.В. Программирование на языке С в Microsoft Visual Studio 2010. URL: http://www.intuit.ru/studies/courses/627/483/info (дата обращения: 30.03.2014).

2. Афонин В.В., Федосин С.А. Моделирование систем. URL: http://www.intuit.ru/studies/courses/623/479/info (дата обращения: 30.03.2014).

3. Афонин В.В., Федосин С.А. Моделирование систем. - М.: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2010. - 231 с.

4. Вентцель Е.С., Овчаров Л.А. Теория вероятностей и ее инженерные приложения. Учеб. пособие для втузов. - 2-е изд., стер. - М.: Высш. шк., 2000. - 480 с.

5. Прата С. Язык программирования С. Лекции и упражнения. 5-е издание. : Пер. с англ. - М.: Вильямс, 2006. - 960 с.

6. Бобрышев А.Н., Ерофеев В.Т., Козомазов В.Н. Физика и синергетика дисперсно-неупорядоченных конденсированных композитных систем. - СПб.: Наука, 2012. - 474 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.