Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация вычислений НИУ ВШЭпрогр 2014_15.doc
Скачиваний:
9
Добавлен:
08.02.2015
Размер:
294.4 Кб
Скачать

Задача. Дан массив a[1:n].Сформировать новый массив, состоящий из элементов, не превышающих среднего арифметического отрицательных элементов исходного массива.

Решение.

Постановка задачи

Дано:n,a[1:n]

Результат:b[1:k] или сообщение «нет отрицательных элементов»

При:nЄN,n≤Lmax

Связь:

b[j]=a[i], если a[i]≤sr, i=1,n, j=1,k.

Алг «новый массив»

Нач

ввод(n, a[1:n])

{инициализации}

sr:=0

kol:=0

цикл от i:=1 до n

если a[i] <0 то

sr:=sr+a[i]

kol:=kol+1

все

кц

если kol=0 то

вывод(«нет отрицательных элементов»)

иначе

sr:=sr/kol

k:=0{длина нового массива B}

цикл от i:=1 до n

если A[i] ≤sr то

k:=k+1

B[k]:=A[i]

все

кц

вывод(B[1:k])

все

кон

program new_array;

type

mass=array[1..20] of integer;

var a, b:mass;

i,k,n,kol:integer;

sr:real;

begin

repeat

writeln('введите n от 1 до 20');

read(n);

until (n>0) and (n<=20);

writeln ('введите массив A из ', n, ' элементов');

for i:=1 to n do

read(A[i]);

sr:=0;

kol:=0;

for i:=1 to n do

if a[i]<0 then

begin

sr:=sr+a[i];

kol:=kol+1;

end;

if kol=0 then

writeln ('нет отрицательных элементов')

else

begin

sr:=sr/kol;

k:=0;{длина B}

for i:=1 to n do

if A[i] <=sr then

begin

k:=k+1 ;

B[k]:=A[i];

end;

writeln('Получен массив');

for i:=1 to k do

write(b[i]:10);

end;

end.

Тесты:

  1. n=5, A={1, -2, 3, -4, 5}, b={-4}

  2. n=2,A={0, 6}, “нет отрицательных элементов”

Экзамен (2 модуль).

Критерии оценивания результатов

Результаты работы оцениваются по 10 балльной шкале.

Для решения задачи необходимо написать 2 программы (в сумме 9 баллов) и привести исходные данные для их исчерпывающего тестирования (в сумме1 балл).

Задача 1

  • ввод и вывод данных – 0,5 балла;

  • передача параметров и вызов функции – 1 балл;

  • анализ существования результата вычислений – 1 балл;

  • тесты – 0,5 балла;

  • обработка данных:

    • циклы – 0,5 балла;

    • досрочный выход из цикла – 1,5 балла;

    • оставшаяся часть алгоритма – 2 балла.

Задача 2

  • ввод и вывод данных – 0,5 балла;

  • тесты – 0,5 балла;

  • передача параметров в функцию – 0,5 балла;

  • обработка данных –1,5 балла.

На решение задачи отводится 2 академических часа.

Задание и пример его выполнения

Задача. Дана целочисленная матрица A[1:n, 1:m] и целочисленный массив B[1:k]. Найти максимальный элемент среди элементов матрицы A, не встречающихся в массиве B. Написать программу с использованием отдельных процедур для ввода данных, вычислений и вывода результатов.

Решение.

program exam;

type mass=array[1..20] of integer;

matr=array[1..20,1..20] of integer;

var a:matr; b:mass;

n,m,k,max:integer;

f:boolean;

procedure input_array(var k:integer; var b:mass);

var i:integer;

begin

{ввод массива}

repeat

write('введите k');

read(k);

until(k>0) and(k<=20);

write('введите мессив') ;

for i:=1 to k do

read(b[i]);

end;

procedure input_matrix(var n,m:integer; var a:matr);

var i,j:integer;

begin

{ввод матрицы}

repeat

write('введите n, m');

read(n,m);

until (n>0) and(n<=20)and (m>0) and(m<=20);

write('введите матрицу') ;

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

end;

procedure count (n, m, k:integer; var a:matr; var b:mass; var max:integer; var f: boolean);

var i,j,t :integer;

begin

{инициализация}

max:=-maxint;

f:=false;{признак существования результата}

for i:=1 to n do

for j:=1 to m do

if a[i,j] >=max then

begin

t:=1 ;

while(t<=k) and(a[i,j]<>b[t])do

t:=t+1;

if t>k then

begin

f:=true; max:=a[i,j];

end;

end;

end;

procedure output_result(f:boolean; max:integer);

begin

if f=false then

writeln ('нет максимума)

else

writeln ('max=', max)

end;

begin

input_array(k, b);

input_matrix(n, m, a);

count (n, m, k, a, b, max, f);

output_result(f, max);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]