сем 2_4_.ppt
- Количество слайдов: 12
Задача 3. Написать алгоритм и программу для решения следующей задачи. Дан одномерный массив целых чисел. Сформировать новый массив, содержащий повторяющиеся элементы исходного массива, но с одним вхождением. Например, пусть дан массив A[1: na] 1 2 3 1 2 4 1 В результате получим массив B[1: nb] 1 2 Для массива A[1: na] 1 -1 0 массив B не будет сформирован. 3
Постановка задачи Дано: na, a[1: na]. Результат: b[1: nb], или сообщение “нет массива b” При: na>0, na<=lmax Связь: b[k]=a[i], где k=1, nb, если ∃ j: i≠j и a[i]=a[j], где i=1, na, j=1, na Для t=1, nb ∃ p≠t: b[t]=b[p] , где p=1, nb
Алг «процедура count» Вход: a[1: na], na Выход: nb, b[1: nb] Нач nb: =0 цикл от i: =1 до na j: =1; цикл-пока (j <= na) и (a[i] <> a[j] или i = j) j: =j+1; кц если j <= na то t: =1; цикл-пока (t <= nb) и (b[t] <> a[i]) t: =t+1; кц
если t > nb то nb: =nb+1; b[nb]: =a[i]; все кц Кон Алг «главная функция» Нач вызов процедуры ввод(na, a); вызов процедуры count(a, nb, b) если nb = 0 то вывод( «Нет массива b» ) иначе вызов процедуры вывод(nb, b) все Кон
Program lab 5_3; Const lmax=10; Type mas=array[1. . lmax] of integer; Var A, B: mas; na, nb: integer; {это глобальные переменные} Procedure Input_Array(var na: integer; var A: mas); Var i: integer; Begin Writeln(‘Введите длину массива na’); Repeat readln(na) until (na>0) and (na<=lmax); Writeln(‘Введите массив А’); For i: =1 to na do read(A[i]); End;
Procedure count(na: integer; var A, B: mas; var nb: integer); Var t, j, i: integer; Begin nb: =0; for i: =1 to na do Begin j: =1; while (j <= na) and ((a[i] <> a[j]) or (i = j)) do j: =j+1; if j <= na then begin t: =1; while (t <= nb) and (b[t] <> a[i]) do t: =t+1; end; End; end; End ; if t > nb then begin nb: =nb+1; b[nb]: =a[i];
Procedure Write_Array(nb: integer; var B: mas); Var i: integer; Begin For i: =1 to nb do Write(B[i]: 4); End; {Начало главной функции} Begin Input_Array(na, A); count(na, A, B, nb); If nb = 0 then Writeln(‘Нет массива b’) else Write_Array(nb, b) End
Задача 3. Даны целочисленная матрица D[1: n, 1: m] и целочисленный массив C[1: L]. Написать программу с использованием функции для вычисления нового массива, содержащего элементы тех строк матрицы, номера которых отсутствуют в массиве D[1: n, 1: m] 11 2 3 . C[1: L] 4 5 6 7 8 0 1 1 0 2 4 6 3 B[1: k] 1 2 3 4
Алг «Функция F» Вход: n, m, D[1: n, 1: m], L, C[1: L] Выход: K, B[1: K] Нач k : = 0; цикл от i : = 1 до n t : = 1; //текущий номер в массиве С цикл пока (t <= L) и (C[t] <> i) t : = t + 1; кц если t > L то цикл от j : = 1 до m k : = k + 1; B[k] : = D[i, j]; кц все кц f: =k
program new_array; const lmax=20; type mass=array[1. . lmax] of integer; matr=array[1. . lmax, 1. . lmax] of integer; var n, m, L, k: integer; d: matr; b, c: mass; function F(n, m: integer; var d: matr; L: integer; var c: mass; var b: mass): integer; var k, i, j, t: integer; begin k : = 0; for i : = 1 to n do begin t : = 1; //текущий номер в массиве С while (t <= L) and (C[t] <> i) do t : = t + 1; if t > L then
for j : = 1 to m do begin k : = k + 1; B[k] : = D[i, j]; end; f: =k; end; {Процедуры ввода и вывода массива см. в предыдущей задаче} procedure input_matr(var n, m: integer; var a: matr); var i, j: integer; begin writeln(‘Введите n, m’); repeat read(n, m) until (n<=lmax) and (n>0) and (m<=lmax) and (m>0); writeln(‘Введите матрицу’);
for i: =1 to n do for j; =1 to m do read(a[i, j]); end; begin input_matr(n, m, d); input_array(L, c); K: =f(n, m, d, l, c, b); If k = 0 then Writeln(‘Нет массива b’) else Write_Array(k, b) End.