|
|||
Федеральное государственное автономное образовательное учреждениеФедеральное государственное автономное образовательное учреждение Высшего образования «Национальный исследовательский университет «Высшая школа экономики»
Московский институт электроники и математики им. А.Н. Тихонова НИУ ВШЭ Департамент компьютерной инженерии
Курс: Алгоритмизация и программирование
ОТЧЕТ по лабораторной работе № 2 Студент: Чубаров Михаил Ильич Группа: БИВ204 Вариант: № 281 (10, 2) Руководитель: Лежнев Евгений Владимирович Оценка:___________ МОСКВА 2020 Оглавление Задание. 3 Постановка задачи. 4 Метод решения задачи. 5 Внешняя спецификация. 6 Описание алгоритма на псевдокоде. 8 Листинг программы. 11 Распечатка тестов к программе и результатов. 14
Задание. 1.Даны целочисленная матрица A[1:n, 1:m] и целочисленный массив B[1:k]. Найти максимальный среди элементов матрицы A, не встречающихся в массиве B. 2. Для каждого элемента массива поменять порядок следования цифр на обратный.
Постановка задачи Дано: 1. n,m,k-цел, a[1:n,1:m] – цел, b[1:k] – цел; 2. B[1:n] – цел. Результат: 1. max – цел или сообщение «все элементы матрицы совпадают с элементами массива» 2. 2. B[1:n] При: 1. n, m, k ∈ ℕ, n, m, k ≤ lmax 2. 𝑛∈ℕ,𝑛≤𝑙𝑚𝑎𝑥,∀𝑖=1,𝑛̅ 𝑎[𝑖]∈ℕ Связь: 1. ∃𝑡=1,𝑛̅,∃𝑝=1,𝑚̅∶ ∀𝑖=1,𝑛̅ ∀𝑗=1,𝑚̅ 𝑎[𝑝,𝑡]≥𝑎[𝑖,𝑗] ∄𝑡1:𝑡1=1,𝑘̅: 𝑏[𝑡1]=𝑎[𝑡,𝑝] max=a[t,p]
Метод решения задачи
Внешняя спецификация Лабораторная работа №2 Программа 1 ввод кол-во строк n от 1 до <<n_max>> и кол-во столбцов m от 1 до <<m_max>> { <𝑛> }∗ до n>0 и n≤n_max { <𝑚> }∗ до m>0 и m≤m_max ввод элементов матрицы <a[1,1]><a[1,2]>…<a[n,m]> исходная матрица << a[1,1]>><< a[1,2]>>…<< a[n,m]>> ввод кол-во элементов k в массиве от 1 до <<k_max>> { <k> }∗ до k>0 и k≤k_max ввод элементов массива <b[1]><b[2]>…<b[k]> исходный массив <<b[1]>><<b[2]>>…<<b[k]>> При fl максимальный элемент: <<max>> imax: <<imax>> jmax: <<jmax>> Иначе { все элементы матрицы совпадают с элементами массива} Программа №2 Введите длину массива от 1 до <<lmax>>: {<𝑛>}* до n>0 и ≤ lmax Введите элементы массива B в отдельных строчках {для 𝑖=1,𝑛{<𝐵[𝑖]>}∗до 𝐵[𝑖]=[𝐵[𝑖]] Вывод измененного массива {<<B[1]>>, <<B[2]>>, …, <<B[n]>>
Описание алгоритма на псевдокоде Алг нач вывод('программа 1') вывод('ввод кол-во строк n от 1 до ',n_max,' и кол-во столбцов m от 1 до',m_max) ввод(n, m) пока (n > 0) и (m > 0) и (n <= n_max) и (m <= m_max) вывод('ввод элементов матрицы') цикл от i := 1 до n цикл от j := 1 до m ввод(a[i,j]) вывод('исходная матрица') цикл от i:=1 до n цикл от j:=1 до m вывод(a[i,j]:4) вывод('ввод кол-во элементов k в массиве от 1 до ',k_max) ввод(k) пока (k > 0) и (k <= k_max) вывод('ввод элементов массива') цикл от i:=1 до k ввод(b[i]) вывод('исходный массив') цикл от i:=1 до k вывод(b[i]:4,' ') fl := false максимум := a[1, 1] цикл от i := 1 до n нц цикл от j := 1 до m нц flag := true x := 0 пока (x < k) и (flag = true) нц x := x + 1 если a[i, j] = b[x] то flag := false все кц если (flag) и (a[i, j] >=max) то max:= a[i, j] imax := i jmax := j fl := true все если fl то вывод('максимальный элемент: ', max) вывод('imax: ', imax, ' jmax: ', jmax) иначе вывод('все элементы матрицы совпадают с элементами массива') все вывод(«Программа №2») вывод(«Введите длину массива от 1 до », lmax) цикл ввод(n) до n > 0 и n <= lmax вывод(«Введите элементы массива B в отдельных строчках») цикл от i=1 до n цикл ввод(s) число(s) до err=0 и z > 0 и z <= maxint и z=[z] B[i] = z кц цикл от i=1 до n j=0 цикл пока B[i] > 0 то j=j*10+(B[i] mod 10) B[i] = B[i] div 10 кц B[i]=j кц вывод(«Вывод измененного массива») цикл от i=1 до n вывод(B[i]) кц кон
Листинг программы Program 1 const n_max = 10; m_max = 10; k_max = 100; var i, n, k, m, j, x, max, imax, jmax: integer; flag, fl: boolean; a: array [1..n_max, 1..m_max] of integer; b: array [1..k_max] of integer; begin writeln('Программа 1'); writeln('ввод кол-во строк n от 1 до ',n_max,' и кол-во столбцов m от 1 до',m_max); repeat read(n, m) until (n > 0) and (m > 0) and (n <= n_max) and (m <= m_max); writeln('ввод элементов матрицы'); for i := 1 to n do for j := 1 to m do read(a[i,j]); writeln('исходная матрица'); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:4); writeln; end; writeln('ввод кол-во элементов k в массиве от 1 до ',k_max); repeat read(k) until (k > 0) and (k <= k_max); writeln('ввод элементов массива'); for i:=1 to k do read(b[i]); writeln('исходный массив'); for i:=1 to k do write(b[i]:4,' '); writeln; fl := false; max := a[1, 1]; for i := 1 to n do for j := 1 to m do begin flag := true; x := 0; while (x < k) and (flag = true) do begin x := x + 1; if a[i, j] = b[x] then flag := false end; if (flag) and (a[i, j] >= max) then begin max := a[i, j]; imax := i; jmax := j; fl := true; end; end; if fl then begin writeln('максимальный элемент: ', max); writeln('imax: ', imax, ' jmax: ', jmax); end else writeln('все элементы матрицы совпадают с элементами массива'); program 2 const lmax=20; type mass=array[1..lmax] of integer; var B:mass; s:string; z:real; n, i, j, err:integer; begin writeln('Программа №2'); writeln('Введите длину массива от 1 до ', lmax); repeat readln(n); until (n > 0) and (n <= lmax); writeln('Введите элементы массива B в отдельных строчках'); for i:=1 to n do begin repeat readln(s); val(s, z, err); until (err=0) and (z > 0) and (z <= maxint) and (z=round(z)); B[i]:=round(z); end; for i:=1 to n do begin j:=0; while B[i] > 0 do begin j:= j * 10 + (B[i] mod 10); B[i]:=B[i] div 10; end; B[i]:=j; end; writeln('Вывод измененного массива:'); for i:=1 to n do writeln(B[i]) end
|
|||
|