КРИПТОГРАФИЯ. Лабораторная работа 7- 8 БАС 18. Реализация на языке turbopascal ввода и вывода элементов массивов
Скачать 140.16 Kb.
|
1.11. Перестановка строк (столбцов) матрицы Пример. Дана матрица А[1:5,1:5]. Если сумма элементов на главной диагонали больше 50, то поменять местами первую и пятую строки. В данной процедуре сначала выделяются ячейка S для накопления суммы элементов на главной диагонали и ячейка Р для промежуточного хранения элементов массива. Для получения суммы элементов, находящихся на главной диагонали, используется суммирование элементов с совпадающими номерами строки и столбца (i= j). Перестановка элементов первой и пятой строк осуществляется с использованием метода ‘трёх стульев’. Сначала в каждом столбце значение текущего элемента первой строки помещают в ячейку Р. Затем этот элемент принимает значение элемента того же столбца из пятой строки. После этого элемент из пятой строки принимает значение Р, в котором находится значение элемента первой строки. Фрагмент алгоритма: Рис. 43 Фрагмент программы: S:=0;P:=0; For i:=1 to 5 do S:=S+A[i,i]; If S>50 Then Begin For j:=1 to 5 do Begin P:= A[1,j]; A[1,j]:=A[5,j]; A[5,j]:=P; WriteLn (‘Преобразованная матрица'); For i:=1 to 5 do Begin For j:=1 to 5 do Write(b[i,j]:5:2,’ ‘); WriteLn; End; End Else WriteLn (‘Сумма элементов на главной диагонали меньше 50'); Перестановка столбцов осуществляется аналогично, только цикл перестановки идет по строкам (по переменной i). 1.12. Удаление строки (столбца) из матрицы Пример. Дана матрица А[1:5,1:4]. Удалить третью строку матрицы. Фрагмент алгоритма представлен на рис. 12. Рис. 44 Фрагмент программы: n:=5;m:=4; For i:=3 to n do For j:=1 to m do A[i,j]:=A[i+1,j]; WriteLn (‘Преобразованная матрица'); For i:=1 to n-1 do Begin For j:=1 to m do Write(A[i,j]:5:2,’ ‘); WriteLn; End; В данной задаче первые две строки остаются без изменения. Строки, начиная с четвертой, сдвигаются на одну строку вверх - четвертая строка помещается на место третьей, (третья строка при этом затирается и перестает существовать), пятая строка помещается на место четвертой. Удаление столбцов осуществляется аналогично, в цикле по столбцам (по переменной j). 1.13. Добавление строки (столбца) в матрицу Пример. Дана матрица А[1:4,1:5]. В матрицу между третьей и четвертой строками добавит строку, элементы которой будут произведением элементов первой и третьей строк одноименных столбцов. Данная задача разбивается на два этапа. На первом этапе матрица раздвигается, четвертая строка смещается на строку вниз и становится пятой. При этом на месте четвертой строки останутся прежние значения, которые затем можно заменить на новые. На втором этапе четвертая строка заполняется новыми значениями. При объявлении массива в программе число строк должно быть равным 5. Фрагмент алгоритма: Рис. 45 Фрагмент программы: k:=4;n:=5;m:=4; For i:=n+1 downto k do For j:=1 to m do A[i,j]:=A[i-1,j]; For j:=1 to m do A[4,j]:=A[1,j]*A[4,j]; WriteLn (‘Преобразованная матрица'); For i:=1 to n+1 do Begin For j:=1 to m do Write(A[i,j]:5:2,’ ‘); WriteLn; End; Порядок решения задачи 2.1. Таблица соответствия
2.2. Алгоритм задачи В данной задаче необходимо реализовать несколько действий с одними и теми же элементами матрицы. Поскольку действия с элементами массивов выполняются в циклах, то, в принципе, все действия задания можно реализовать в двух вложенных циклах по элементам матрицы. Однако реализация задачи при этом будет громоздкой и запутанной. Целесообразнее действия выполнять последовательно. В этом случае задача становится более логичной и понятной. Таким образом, в задаче необходимо выполнить следующие действия: Ввести и напечатать элементы исходной матрицы. Для ввода элементов можно использовать любую структуру ввода, рассмотренную в главе 6. Для данной задачи целесообразно ввести элементы матрицы с использованием генератора случайных чисел. Поскольку в задании предусматривается работа с положительными и отрицательными значениями матрицы, ввод элементов необходимо сделать в диапазоне, охватывающем отрицательные и положительные числа. В данной задаче необходимо заменить нулевые элементы произведением положительных элементов. Если выбрать вещественный тип элементов матрицы, то при их генерации с помощью датчика случайных чисел нулевое значение, скорее всего не будет получено. Поэтому для получения такого значения необходимо при формировании элементов матрицы брать целую часть сгенерированных случайных чисел с использованием функции Int(). В этом случае для генерирования чисел в диапазоне [-20 +20] значения будут формироваться по выражению: C[i,j] := Int(40*Randm-20); В двух вложенных циклах по строкам и столбцам матрицы получить сумму и количество отрицательных элементов, и произведение положительных элементов. Получить и напечатать среднеарифметическое отрицательных элементов. Для третьей строки в цикле по столбцам определить и напечатать значение и номер минимального элемента третьей строки. Для пятого столбца в цикле по строкам определить значения и номера минимального и максимального элементов. Поменять местами минимальный и максимальный элементы пятого столбца. Задать значение флажка F=0. В двух вложенных циклах по строкам и столбцам матрицы. Находить нулевые элементы и заменять их найденным ранее произведением положительных элементов. При первом же найденном нулевом элементе установить значение флажка F=1. Проверить значение флажка, и если F=0, напечатать сообщение, что в матрице не найдены нулевые элементы. Напечатать матрицу после изменений значений. Блок-схема алгоритма будет следующей: Рис. 46 2.3. Программа на языке PASCAL Program zadacha; var C:array[1..5,1..6] of real; Ppol,Sra,Min3,Min5,Max5: Real; i,j,k,F,Nmin3,Nmin5,Nmax5: integer; begin WriteLn('Лабораторная работа N 7'); WriteLn(‘Пpогpаммиpование типовых алгоритмов работы с элементами массивов '); WriteLn('Выполнил студент группы ATC-99-1 Иванов Борис '); Randomize; writeln(‘Исходная матрица'); for i:=1 to 5 do begin for j:=1 to 6 do begin C[i,j]:=Int(40*random-20); Write(C[i,j]:3:0,’ ‘); End; WriteLn; End; Sra:=0;k:=0;Ppol:=1; for i:=1 to 5 do for j:=1 to 6 do Begin If C[i,j]<0 Then Begin Sra:=Sra+C[i,j];k:=k+1;End; If C[i,j]>0 Then Ppol:=Ppol*C[i,j]; End; Min3:=C[3,1];Nmin3:=1; for j:=1 to 6 do If C[3,j] WriteLn(‘Минимальный элемент третьей строки равен’,Min3:3:0); WriteLn(‘Он находится в’,Nmin3:1,’ строке’); Min5:=C[1,5];Nmin5:=1;Max5:=C[1,5];Nmax5:=1; for i:=1 to 5 do Begin If C[i,5] If C[i,5]>Max5 Then Begin Max5:=C[i,5];Nmax5:=i;End; End; C[Nmin5,5]:=Max5;C[Nmax5,5]:=Min5; F:=0; for i:=1 to 5 do for j:=1 to 6 do If C[i,j]=0 Then Begin F:=1;C[i,j]:=Ppol;End; If F=0 Then WriteLn(‘В матрице нет нулевых элементов’); WriteLn(‘Полученная матрица'); for i:=1 to 5 do begin for j:=1 to 6 do Write(C[i,j]:7:0,’ ‘); WriteLn; End; End. При печати полученной матрицы необходимо изменить первоначальный формат, отводящий для каждого элемента 3 позиции, на формат, отводящий большее число позиций, например 7, так как нулевые элементы в матрице заменяются произведением положительных элементов, которое будет большим числом. Вариант N 1 Дан вектор А[1:20] а) найти сумму S элементов из интервала [-3 +6]. б) найти произведение этой суммы на min элемент вектора. в) найти номер максимального элемента между номерами 5 и 15. г) удалить 16-ый элемент вектора. Вариант N 2 Дана матрица А[1:3; 1:4] а) найти разность сумм элементов, попадающих в интервалы [0 5] и [5 15] б) найти номер минимального эелемента в третьем столбце. в) заменить min элемент в 4-ом столбце на min элемент в третьем столбце. г) получить среднеарифметическое значение последних 10-ти элементов матрицы. Вариант N 3 Дана матрица А[1:4; 1:4] а) получить сумму и количество элементов в интервале [-10 +5], и минимальный элемент в третьей строке. б) получить произведение номеров min и max элементов матрицы. в) получить среднеарифметическое значение матрицы. г) получить произведение среднеарифметического значения на min элемент в третьем столбце. Вариант N 4 Дан вектор А [1:20]. а) найти количество и сумму элементов из диапазона [-5 5] и максимальный элемент из последних десяти б) получить произведение номеров min и max элементов вектора. в) удалить 6-ой элемент вектора. г) получить среднеарифметическое значение последних 10-ти элементов вектора. Вариант N 5 Дан вектор А[1:15]. а) найти минимальный элемент б) найти произведение минимального элемента и суммы элементов вектора, больших - 2 в) найти номер максимального элемента из первых 10 элементов вектора г) найти произведение среднеарифметического значения вектора на максимальный элемент вектора. Вариант N 6 Дан вектор А[1:25]. а) найти произведение элементов больших - 2 и сумму последних 10 элементов б) удалить минимальный элемент вектора в) получить среднеарифметическое значение элементов с четными индексами г) поменять местами максимальные элементы из первых десяти и последних десяти элементов вектора. Вариант N 7 Дана матрица А[1:4; 1:4]. а) найти минимальный и максимальный элементы матрицы б) определить число положительных элементов во второй и третьей строках в) получить среднеарифметическое значение матрицы г) заменить минимальный элемент в 3-ей строке на 0. Вариант N 8 Дан матрица А[1:6; 1:5]. а) в четных строках найти сумму элементов больших - 3, а в нечетных столбцах произведение положительных элементов. б) переставить местами минимальный и максимальный элементы матрицы. в) получить среднеарифметическое значение отрицательных элементов матрицы. г) в четвертой строке заменить минимальный элемент на 0. Вариант N 9 Дан вектор В[1:25]. а) найти произведение элементов в диапазоне [-3,3] и сумму положительных элементов. б) удалить минимальный элемент вектора. в) заменить максимальный элемент вектора среднеарифметическим значением последних 15 элементов. г) поменять местами максимальные элементы из первых 10 и последних десяти элементов вектора. Вариант N 10 Дан матрица А[1:3:1:3]. а) найти количество N положительных элементов в каждой строке. б) найти сумму S отрицательных элементов в каждом столбце. в) заменить минимальный элемент матрицы суммой предыдущих элементов. г) определить номера минимальных элементов в третьем столбце и второй строке. Вариант N 11 Дан вектор В[1:20]. а) найти минимальный элемент вектора. б) найти произведение Р ненулевых элементов. в) вставить за min элементом произведение ненулевых элементов. г) найти номер максимального из 10 последних элементов вектора. Вариант N 12 Дан вектор В[1:10]. а) найти минимальный и максимальный элементы вектора. б) поменять местами максимальный и минимальный элементы. в) получить сумму элементов между их номерами. г) получить произведение отрицательных элементов. Вариант N 13 Дан вектор В[1:20]. а) найти сумму S элементов в диапазоне [0 5]. б) найти произведение Р отрицательных элементов. в) поменять местами минимальный и максимальный элементы вектора. г) удалить минимальный элемент. Вариант N 14 Дан вектор из 10 элементов. а) получить сумму S элементов в интервале [-5 5]. б) получить произведение S на минимальный элемент матрицы. в) определить номер минимального элемента из первых 5 элементов. г) удалить этот элементов Вариант N 15 Дана матрица [1:3;1:5]. а) найти сумму S элементов >5 и произведение элементов <1 б) найти номера максимального элемента второй строки и третьего столбца. в) переставить найденные максимальные элементы матрицы. г) получить среднеарифметическое значение 3-го и 5-го столбцов. Вариант N 16 Дан вектор В[1:15]. а) найти сумму S элементов в диапазоне [-2 2]. б) найти произведение Р элементов в диапазоне [-3 3]. в) получить произведение min и max элементов вектора. г) получить сумму элементов между max и min элементами вектора. Вариант N 17 Дана матрица А[1:4, 1:6]. а) найти сумму элементов четных строк лежащих в диапазоне [-6 11]. б) найти произведение min элемента 3-ей строки на max элемент 4-го столбца. в) найти среднеарифметическое положительных элементов матрицы. г) поменять местами min и max элементов матрицы. Вопросы для самоконтроля: Способы объявления массивов в TURBO PASCAL. Реализация приема «накопление» при работе с элементами массивов. Порядок задания начальных значений при нахождении минимального или максимального элементов массива. Способы перестановки элементов массива. Порядок удаления элемента из массива. Порядок вставки элемента в массив. Принцип сортировки элементов массива по возрастанию или убыванию. Порядок и смысл использования приема «флажок» в программировании. |