Задача 4. Даны матрица A[1: n, 1: m] и массив B[1: k]. В каждой строке матрицы поменять местами первый четный и последний нечетный элемент, если оба эти элемента присутствуют в одномерном массиве. Дано : n, m, A[1: n, 1: m], k, B[1: k] Результат: A’[1: n, 1: m] или сообщение(‘нет обмена в ‘, i, ’строке’) При: nЄN, k ЄN, m<=lmax, n<=lmax, k<=lmax Связь: i=1, n; j 1, j 2 -номера столбцов с первым четным и последним нечетным элементом С: =a[i, j 1]; a[i, j 1]: =a[i, j 2]; a[i, j 2]: =c; если ∃ x, y: B[x]=a[i, j 1], b[y]=a[i, j 2] X, y=1, k
Алг ‘обмен’ Нач ввод(n, m, a[1. . n, 1. . m], k, b[1. . k]) Цикл от i: =1 до n j 1: =0; j 2: =0; Цикл от j: =1 до m Если a[i, j] –четное и j 1=0 то j 1: =j Все Если a[i, j] –нечетное то j 2: =j Все Кц Если j 1 = 0 или j 2=0 то Вывод(‘нет обмена в ‘, i, ’ строке’) иначе
Flag 1: =false; flag 2: =false; j: =1; Цикл-пока j<=k и (flag 1=false) или (flag 2=false)) Если a[i, j 1]=b[j] то flag 1: =true все Если a[i, j 2]=b[j] то flag 2: =true все j: =j+1; Кц Если flag 1 и flag 2 то С: =a[i, j 1]; a[i, j 1]: =a[i, j 2]; a[i, j 2]: =c; Иначе Вывод(‘нет обмена в ‘, i, ’ строке’) все кц вывод(a[1. . m, 1. . n]) кон
program smbt; Var a: array[1. . 20, 1. . 20]of integer; B: array[1. . 20]of integer; N, m, k, i, j, j 1, j 2, c: integer; Flag 1, flag 2: boolean; begin {ввод(n, m, a[1. . n, 1. . m], k, b[1. . k])} for i: =1 to n do begin J 1: =0; j 2: =0; for J: =1 to m do begin If (a[i, j] mod 2 =0) and (j 1=0) then J 1: =j; if odd(a[i, j]) then J 2: =j; End; If (j 1 = 0) or (j 2=0) then writeln(‘нет обмена в ‘, i, ’ строке’) else
begin Flag 1: =false; flag 2: =false; J: =1; While (j<=k) and ((not flag 1) or (not flag 2)) do begin if a[i, j 1]=b[j] then flag 1: =true ; If a[i, j 2]=b[j] then flag 2: =true ; J: =j+1; End; if flag 1 and flag 2 then begin С: =a[i, j 1]; a[i, j 1]: =a[i, j 2]; a[i, j 2]: =c end Else writeln(‘нет обмена в ‘, i, ’ строке’) end; {вывод(a[1. . n, 1. . m])} end.
Процедуры и функции Задача 1. Написать постановку задачи и программу с использованием подпрограммы для вычисления значения по формуле (число размещений). Например, A(3, 8)=8!/5!=6*7*8=336 (n!=1*2*3*…*n)
Дано: n, k. Рез-тат: A. При: n>=0, k>=n. nєN, kєN. Связь:
Program Lab 5_1; Var n, k: integer; n 1, a, k 1: real; Function f(n: integer): real; {рекурсивная функция} begin if n=0 then f: =1 else f: =f(n-1)*n; end; Begin {основная программа} writeln(‘Введите n и k (n>=0, k>=n, k и n - целые)’);
repeat read(n 1, k 1); until (n 1>=0) and (k 1>=n 1) and (n 1=round(n 1)) and (k 1=round(k 1))and(k 1<=maxint); n: =round(n 1); k: =round(k 1); a: =f(k)/f(k-n); writeln(‘A= ‘, a: 10: 5); End.
Задача 2. Написать постановку задачи, алгоритм и программу для вычисления значения по формуле G= min max |B[i, j]|. Матрица B[1: n, 1: n] – целого типа. j=1, n i=1, n B[1: n, 1: n] 1 0 3 2 4 6 -8 4 3 2 1 7 Max -2 -3 0 -6 7 4 6 -8 min=-8
Постановка задачи Дано: n, B[1: n, 1: n] Результат: G При: nєN, n<=lmax Связь: См. формулу Алг «главная функция» нач Ввод(n, B[1: n, 1: n]) {Вызов функции} G: =Z(n, B) Вывод (G) Кон
Алг «Функция Z» Вход: N, B[1: n, 1: n] Выход: min Нач min: =maxint Цикл от J: =1 до n Max: =B[1, j] Цикл от i: =2 до n Если IB[i, j]I>Imax. I то max: =b[i, j] все кц Если max
Program lab 5_2; Type matr=array [1. . 20, 1. . 20] of integer; Var b: matr; G, N, i, j; integer; Function z(N: integer; var B: matr): integer; var min, max, I, j: integer; begin min: =maxint; for J: =1 to n do begin Max: =B[1, j]; for i: =2 to n do if abs(B[I, j])>abs(max) then max: =b[I, j]; if max
Begin {начало главной функции} {ввод n, B[1: n, 1: n]} G: =z(n, B); writeln(‘G=‘, G); end.