- •Цели освоения дисциплины
- •Компетенции обучающегося, формируемые в результате освоения дисциплины
- •Место дисциплины в структуре образовательной программы
- •Формы контроля знаний студентов
- •Критерии оценки знаний, навыков
- •Порядок формирования оценок по дисциплине Для вычисления накопленной оценки по дисциплине используется следующая таблица.
- •Содержание дисциплины
- •1 Модуль
- •1 Модуль.
- •2 Модуль.
- •1 Модуль.
- •2 Модуль.
- •Примеры заданий промежуточного /итогового контроля
- •Задача. Дан массив a[1:n].Сформировать новый массив, состоящий из элементов, не превышающих среднего арифметического отрицательных элементов исходного массива.
- •Учебно-методическое и информационное обеспечение дисциплины
2 Модуль.
Дан массив символьных строк. Количество строк известно. Найти номер строки массива, имеющей минимальную длину. Требуется написать программу на Паскале. (0,1 балла).
Решение.
Program min_length;
Type masst=array[1..20] of string;
Var s:masst;
I,j,n,ni:integer;
Begin
repeat
Writeln(‘ введите число строк’);
Readln(n);
Until (n>0) and (n<=20);
Writeln(‘Введите строки’);
For i:=1 to n do
Readln(s[i]);
Ni:=1;
For i:=1 to n do
If (length (s[i]<length(s[ni]) then
Ni:=i;
Writeln(‘Строка с минимальной длиной ’, s[ni]);
End.
Примеры заданий промежуточного /итогового контроля
Приведены примеры заданий промежуточного и итогового контроля, а также сформулированы критерии их оценивания.
Контрольная работа 1.
Критерии оценивания работы.
Задачи 1 и 2 оцениваются по – 4 баллакаждая:
постановка задачи – 0,5 балла;
алгоритм – 2 балла;
программа – 1,5 балла.
Задача 3:
постановка и трассировка по – 0,5 баллакаждая;
алгоритм – 1 балл.
Задания и примеры их выполнения
Дан массив A[1:n]. Поменять местами его минимальный четный и максимальный нечетный элементы. Написать постановку задачи, алгоритм и программу.
Решение.
Постановка задачи
Дано:n,a[1:n]
Результат:a’[1:n] или сообщение «нет четных элементов» или сообщение «нет нечетных элементов»
При:nЄN,n≤Lmax(Lmaxздесь и далее - максимальная длина массива)
Связь: b=a[nch], a[nch]=a[nnech], a[nnech]=b,
где nch– номер минимального четного элемента массива,
nnech– номер максимального нечетного элемента массива.
Алг «обмен»
Нач
ввод(n, a[1:n])
{инициализации}
min:=maxint
nch:=0
max:=-maxint
nnech:=0
цикл от i:=1 до n
если a[i] – четное то
если a[i] <=min то
min:=a[i]
nch:=i
все
иначе
если a[i] >=max то
max:=a[i]
nnech:=i
все
все
кц
если nсh=0 то
вывод(«нет четных элементов»)
иначе
если nnech=0 то
вывод(«нет нечетных элементов»)
иначе
b:=a[nch]
a[nch]:=a[nnech]
a[nnech]:=b
вывод(a[1:n])
все
все
кон
program kr;
var a:array[1..20] of integer;
i,n,min,max,nch,nnech,b:integer;
begin
write('введите n'); read(n);
write('введите');
for i:=1 to n do read(a[i]);
{инициализация}
min:=maxint;
nch:=0;
max:=-maxint-1;
nnech:=0;
for i:=1 to n do
if not odd( a[i] ) then
begin
if a[i] <=min then
begin
min:=a[i];
nch:=i;
end
end
else
if a[i] >=max then
begin
max:=a[i];
nnech:=i
end;
if nch=0 then
writeln('нет четных')
else
if nnech=0 then
writeln('нет нечетных')
else
begin
b:=a[nch];
a[nch]:=a[nnech];
a[nnech]:=b;
writeln('массив после перестановки');
for i:=1 to n do writeln(a[i]);
end;
end.
Дан массив B[1:n]. Сформировать два новых массива: первый содержит отрицательные элементы, а второй – четные. Написать постановку задачи, алгоритм и программу.
Решение.
Постановка задачи
Дано:n,a[1:n]
Результат: b[1:nb] или сообщение «нет отрицательных элементов»
с[1:nс] или сообщение «нет четных элементов»
При: n Є N, n≤ Lmax
Связь: b[j]=a[i], i=1,n; j=1,nb, если a[i]<0.
c[j]=a[i], i=1,n; j=1,nc, если a[i] - четное.
Алг «2 новых массива»
Нач
ввод(n, a[1:n])
{инициализации}
nb:=0
nc:=0
цикл от i:=1 до n
если a[i] <0 то
nb:=nb+1
b[nb]:=a[i]
все
если a[i] - четное то
nc:=nc+1
c[nc]:=a[i]
все
кц
если nb=0 то
вывод(«нет отрицательных элементов»)
иначе
вывод(b[1:nb])
все
если nc=0 то
вывод(«нет четных элементов»)
иначе
вывод(c[1:nc])
все
кон
program kr;
var a,b,c:array[1..20] of integer;
i,n,nb,nc:integer;
begin
write('введите n'); read(n);
write('введите массив');
for i:=1 to n do
read(a[i]);
{инициализация}
nb:=0;
nc:=0;
for i:=1 to n do
begin
if a[i] <0 then
begin
nb:=nb+1;
b[nb]:=a[i];
end;
if not odd( a[i]) then
begin
nc:=nc+1;
c[nc]:=a[i];
end;
end;
if nb=0 then
writeln('нет отрицательных элементов')
else
begin
writeln(' массив b') ;
for i:=1 to nb do
writeln(b[i]);
end;
if nc=0 then
writeln('нет четных элементов')
else
begin
writeln(' массив c') ;
for i:=1 to nc do
writeln(c[i]);
end;
end.
Вычислить сумму ряда
с точностью до
Написать постановку задачи, алгоритм и трассировку (при трассировке достаточно рассмотреть два первых шага цикла).
Решение.
Выведем рекуррентное отношение.
Для того, чтобы выразить слагаемое через предыдущее, произведём деление:
Дано:x,Eps
Результат:s
При:Eps>0,x≠0
Связь:, с точностью до
алг «итерация 2»
нач
ввод(x, Eps)
z:=x{слагаемое}
s:=z{умма членов ряда}
i:=1{номер слагаемого}
цикл p:=z {предыдущее слагаемое}
z:=z*x2 /(2i(2i+1)){текущее слагаемое}
s:=z+s {вычисление суммы}
i:=i+1 {увеличение номера шага}
до |z-p|≤Eps
кц
вывод(s)
кон
Трассировка
Экзамен(1 модуль).
Задание и пример его выполнения
Задача.Дан целочисленный массивA[1:n]. Упорядочить по возрастанию элементы массива, расположенные после его максимального элемента. Записать постановку задачи, алгоритм ее решения, написать программу и привести данные для исчерпывающего тестирования.
Решение.
Дано:n,A[1:n]
Результат:A’[1:n] или сообщение «нет сортировки: максимум последний» или сообщение «нет перестановок»
При:nЄN, n≤Lmax
Связь: A’[i]≤A[i+1], i=nmax, n-1, где A[nmax]>=A[i], i=1,n.
Алг «сортировка после максимума»
Нач
ввод(n, a[1:n])
{инициализации}
nmax:=1
цикл от i:=2 до n
если a[i] >= a[nmax] то
nmax:=i
все
кц
если nmax=n то
вывод(«нет сортировки: максимум последний»)
иначе f:=false {признак наличия перестановок}
цикл от i:=nmax+1 до n-1{метод установки}
цикл от j:=i+1 до n
если a[i]>a[j] то
f:=true {перестановка была}
{собственно перестановка}
b:=a[i]; a[i]:=a[j]; a[j]:=b
все
кц
кц
если f=false то
вывод («нет перестановок»)
иначе
вывод («массив после сортировки»)
вывод(a[1:n])
все
все
кон
program kr;
var a:array[1..20] of integer;
i,j,n,nmax,b:integer;
f:boolean;
begin
write('введите n'); read(n);
write('введите массив');
for i:=1 to n do
read(a[i]);
{инициализация}
nmax:=1;
for i:=2 to n do
if a[i] >= a[nmax] then
nmax:=i;
if nmax=n then
writeln('нет перестановок: максимум последний')
else
begin
f:=false; {признак наличия перестановок}
for i:=nmax+1 to n-1 do{метод установки}
for j:=i+1 to n do
if a[i]>a[j] then
begin
f:=true;{перестановка была}
{собственно перестановка}
b:=a[i];a[i]:=a[j];a[j]:=b;
end;
if f=false then
writeln ('нет перестановок')
else
begin
writeln('массив после сортировки');
for i:=1 to n do writeln(a[i]);
end;
end;
end.
Контрольная работа 2.
Критерии оценивания работы
Требуется написать программу с использованием подпрограмм. В первой задаче используются отдельные процедуры для ввода матрицы, ввода массива, вывода результатов и вычислений. Во второй задаче все вычисления оформляются в виде функции. Первая задача оценивается в 6 баллов, вторая – в 4 балла.
Задача 1
ввод и вывод данных – 1 балл;
передача параметров и вызов функции – 1 балл;
анализ существования результата вычислений – 1 балл;
тесты – 1 балл;
обработка данных:
циклы –0,5 балла;
досрочный выход из цикла – 1,5 балла.
Задача 2
ввод и вывод данных – 0,5 балла;
тесты – 0,5 балла;
передача параметров в функцию и вызов – 0,5 балла;
анализ существования результата вычислений – 0,5 балла;
обработка данных – 2 балла.
Задания и примеры их выполнения
Задача 1. Дана целочисленная матрица A[1:n, 1:m] и массив B[1:k]. Обнулить те строки, все элементы которых отсутствуют в массиве B. Найти сумму элементов остальных строк.
Решение. Приведен алгоритм процедуры вычислительной части задачи.
Алг «процедура обнуления»
Вход: n, m, a[1:n, 1:m], k, b[1:k]
выход: n1, a[1:n1,1:m], s
Нач
s:=0 {сумма}
цикл от i:=1 до n {строки}
j:=1 {номер столбца}
flag:=false {признак отсутствия элементов в массиве}
цикл-пока j<=m и flag=false
L:=1 {текущий номер элемента в B}
цикл-пока L<=k и a[i,j]≠B[L]
L:=L+1{берем следующий элемент B}
кц
если L<=k то {a[i,j] есть в B}
flag:=true
иначе
j:=j+1 {берем следующий столбец}
все
кц
если flag то {i-я строка обнуляется}
цикл от j:=1 до m
a[i, j]:=0
кц
иначе
цикл от j:=1 до m
s:=s+a[i,j] {считаем сумму не обнуленных элементов}
кц
все
кц
кон
Задача 2. Написать программу с использованием функции, которая переставляет в обратном порядке элементы главной диагонали матрицы, если сумма четных элементов, расположенных под главной диагональю, положительная.
Решение. Приведена программа для решения задачи.
Program perest;
Type Matr=array[1..10,1..10] of integer;
Var A:matr;
n,i,j:integer;
flag:boolean;
Function f (n:integer; var a:matr):boolean;
Var i,j,c:integer;
Flag:boolean;
sum:integer;
Begin
Sum:=0;
flag:=false;
For i:=2 to n do
For j:=1 to i-1 do
If a[i,j] mod 2=0 then
Sum:=sum+a[i,j];
If sum > 0 then
begin
Flag:=true;
For i:=1 to trunc(n/2) do
begin
C:=a[i,i];
A[i,i]:=a[n-i+1,n-i+1];
a[n-i+1,n-i+1]:=c;
End;
End;
F:= flag;
End;
Begin
{начало основ. прог.}
{ввод n,a[1..n,1..n]}
Flag:=f(n,a);
If flag then
{Вывод a[1..n,1..n]}
else
writeln(‘нет изменений’);
End.
Зачет (1 модуль)
Для решения задачи необходимо написать постановку задачи (1 балл), алгоритм (4 балла). После проверки постановки и алгоритма необходимо отладить программу на компьютере (4 балла) и протестировать (1 балл).
В скобках указаны максимальные возможные баллы за выполнение каждого этапа. На решение задачи отводится 3 академических часа.
Задание и пример его выполнения