Главная страница

КРИПТОГРАФИЯ. Лабораторная работа 7- 8 БАС 18. Реализация на языке turbopascal ввода и вывода элементов массивов


Скачать 140.16 Kb.
НазваниеРеализация на языке turbopascal ввода и вывода элементов массивов
АнкорКРИПТОГРАФИЯ
Дата03.12.2020
Размер140.16 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа 7- 8 БАС 18.docx
ТипЛабораторная работа
#156483
страница1 из 3
  1   2   3

Лабораторная работа № 7

Тема: Реализация на языке TURBO-PASCAL ввода и вывода элементов массивов.

Цель: Освоить типовые приемы ввода и вывода элементов массивов.

Задание:

  1. Ввести элементы одномерного массива размером 15 с клавиатуры и вывести на печать в столбик.

  2. Ввести элементы одномерного массива размером 30 как значения произвольной функции и вывести на печать в несколько строчек.

  3. Ввести элементы двухмерного массива произвольной структуры с общим размером не менее 30 с использованием генератора случайных чисел в произвольном диапазоне. Вывести массив на печать в виде матрицы.

  4. Из элементов матрицы размером не менее 30 элементов по произвольному условию сформировать вектор. Структуры ввода и вывода матрицы и вектора выбрать самостоятельно. Вывести на печать исходную матрицу и полученный вектор.

  5. Из элементов вектора размером не менее 30 элементов сформировать матрицу того же размера и произвольной структуры. Структуры ввода и вывода и вектора и матрицы выбрать самостоятельно. Вывести на печать исходную и полученную матрицу.

Ход работы:

1. Понятие о массивах

В отличие от простых переменных, описывающих одну величину, существуют индексированные переменные, описывающие одним именем совокупность величин одного смысла. В этом случае вводится понятие массива. Массивом называется совокупность объектов одной природы, обозначенных одним именем. При этом значения элементов одной природы, называемые элементами массива, располагаются упорядоченно. Упорядоченность заключается в том, что элементы массива располагаются в соседних ячейках оперативной памяти. Поиск элемента массива осуществляется по его имени и индексу. Индекс является по существу номером элемента в массиве.

Массивы характеризуются двумя параметрами - размерностью и размером. Размерность указывает на порядок расположения элементов массива в операторной памяти. Различают массивы одномерные (размерность=1), двухмерные (размерность=2) и многомерные (размерность >2). Размер указывает на количество элементов по каждой координате. Общее количество К элементов в массиве определяется по выражению

,

где n - размерность массива, М - размер по соответствующей координате.

В качестве примера одномерного массива можно привести оценки группы студентов по какой-либо одной дисциплине, например по информатике:

1. Алексеев - 4

2. Баранов - 3

3. Григорьев - 5

4. Дятлов - 2

.....

20. Яковлев - 4

В этом случае оценки можно представить в виде одномерного массива с общим именем OCENINF. Каждый элемент массива, т.е. оценка соответствующего студента, может быть найдена как элемент массива по его имени OCENINF и индексу, т.е. номеру студента в списке. Например, оценка Алексеева будет находиться как элемент OCENINF[1], оценка Баранова как элемент OCENINF[2] и т.д. Если ввести переменную i, являющуюся индексом элемента массива, то к каждому элементу массива можно обратиться по имени и индексу, т.е. OCENINF[i]. Размерность этого массива равна 1, т.е. для каждого студента приводится оценка по каждому предмету, а размер равен 20, т.е. количеству студентов в группе.

В оперативной памяти элементы массива будут расположены в соседних ячейках памяти. Если, например, в данном случае элементы будут располагаться в ячейках, начиная с номера 101, то они займут 20 ячеек и будут расположены следующим образом:


Фамилия

Алексеев

Баранов

Григорьев

Дегтярев



Яковлев

Элемент массива

OCENINF[1]

OCENINF[2]

OCENINF[3]

OCENINF[4]



OCENINF[20]

Оценка (значение элемента массива)


4


3



5


2





4

Номер ячейки ОЗУ

101

102

103

104



120


В качестве примера двумерного массива можно привести оценки той же группы студентов по нескольким дисциплинам, например, результаты экзаменационной сессии.




ПРЕДМЕТЫ

1

2

3

4

5

НОМЕР

ФАМИЛИЯ

Информатика

Высшая математика

Физика

История

ОКЖД

1

Алексеев

4

4

5

4

4

2

Баранов

3

3

3

4

4

3

Григорьев

5

5

5

4

5

4

Дегтярев

2

3

2

3

3















20

Яковлев

4

4

4

5

3



В этом случае результаты можно представить в виде двумерного массива с именем OCENSES. Размер по одной координате - по количеству студентов будет равен 20, а размер по другой координате- количеству предметов будет равен 5. Общее количество элементов в этом массиве будет равно 20 х 5 =100, т.е. его надо разместить в 100 ячейках памяти. Доступ к каждой ячейке будет осуществляться по двум индексам - номеру в списке студентов и номеру в списке предметов. Например, оценка Григорьева по истории находится как элемент массива OCENSES с индексами 3 и 4, т.е. OCENSES[3,4]. Если в качестве индексов ввести переменные i (номер студента в списке) и j (номер предмета), то доступ к любому элементу можно осуществить по указанию элемента массива и его индексов –OCENSES[i,j].

В разных языках программирования элементы двумерного массива располагаются в оперативной памяти по разному. В языке TURBO-PASCAL элементы располагаются по строкам и столбцам. В данном примере в ячейках ОЗУ сначала будут расположены оценки студента Алексеева, затем Баранова и т.д. Если данный массив располагается в ячейках с но-

мера 101 до номера 200, то элементы расположены следующим образом:
ЭЛЕМЕНТ МАССИВА НОМЕР ЯЧЕЙКИ

Ocenses[1,1] 101

Ocenses[1,2] 102

...

Ocenses[1,5] 105

Ocenses[2,1] 106

Ocenses[2,2] 107

...

Ocenses[2,5] 110

...

Ocenses[20,1] 196

Ocenses[20,2] 197

...

Ocenses[20,5] 200
Для выделения в оперативной памяти места под элементы массива необходимо зарезервировать под массив ячейки. Во всех языках программирования такая операция осуществляется посредством объявления массива в начале программы или перед первым обращением к массиву. Массивы в TURBO-PASCAL во многом схожи с массивами в других языках программирования. Отличительной особенностью массивов в TURBO-PASCAL является то, что массив объявляется в разделе описаний и относится к структурированным типам. Объявить массив можно в одной из двух частей раздела описаний:

  • в части Type.

  • в части Var.

В части Type осуществляется описание типа массив, который задается следующим образом:

< имя типа >=ARRAY[<сп. инд. типов>] OF <тип>,

где <имя типа> идентификатор типа;

ARRAY, OF - зарезервированные слова (массив, из);

<сп. инд. типов> список из одного или нескольких индексных типов,

разделенных запятыми. Список индексов помещается в квадратные скобки;

<тип> -любой тип TURBO-PASCAL.

В качестве индексных типов используется тип-диапазон или любой другой порядковый тип. Например, одномерный массив оценок OCENINF из двадцати элементов целого типа (оценок) можно описать:

type

oceninf=Array[1..20] of Integer;

В этом случае массив необходимо объявить как объект программы (как идентификатор имени массива) в разделе var:

var

mas1: oceninf;

Определить переменную как массив можно и непосредственно в разделе переменных при описании этой переменной, без предварительного описания типа массива. Формат объявления в этом случае следующий:

< имя массива>:ARRAY[<сп. инд. типов>] OF <тип>,

где <имя типа> идентификатор типа;

ARRAY, OF - зарезервированные слова;

<сп. инд. типов> список из одного или нескольких индексных типов;

<тип> - любой тип TURBO-PASCAL.

В этом случае двухмерный массив результатов сессии OCENSES можно объявить следующим образом:

var

ocenses: Array[1..20,1..5] of Integer;

Типом элементов массива может быть и другой массив. Например, двухмерный массив OCENSES в TURBO-PASCAL можно представить как одномерный массив из двадцати элементов, при чем элементы этого массива будут сами массивами из 5-ти элементов:

Туре

ocenses=Array[1..20] of Array[1..5] of Integer;

Такая запись для двумерного массива может быть заменена более компактной:

Туре

ocenses=Array[1..20,1..5] of Integer;

или

var

ocenses: Array[1..20,1..5] of Integer;
Глубина вложения массивов в общем случае не ограничена, т.е. можно использовать массивы произвольной размерности. Ограничения на размерность и размер массива связаны с ограничениями на структурированные типы - суммарная длина внутреннего представления массива не может быть больше 65520 байт (64к) - максимального размера для структурированных типов.

Объявление массива различным способом связано с его использованием непосредственно в программе. Если в программе используется один массив определенной структуры, то его целесообразно объявлять в разделе var. Если же в программе используется несколько массивов одинаковой структуры, их целесообразно объявлять в разделе type. Например, в программе осуществляется обработка результатов сессии трех учебных групп. В этом случае в разделе type необходимо задать тип массив с именем, например, OCENSES, а в разделе var задать для каждой группы свое имя массива, например gr1,gr2,gr3:

type

ocenses=Array[1..20,1..5] of Integer;

var

gr1,gr2,gr3: ocenses;

В программировании массивы связаны с математическими понятиями матрица и вектор. При использовании в программе матрицы она представляется как двухмерный массив, а вектор как одномерный массив. Размер массивов определяется размерами матрицы или вектора. Тогда пример описания матрицы А размером 56 будет следующим:

type

matr= Array[1..5,1..6] of Real;

var

A: matr;

или

var

A: Array[1..5,1..6] of Real;
В TURBO-PASCAL можно одним оператором присваивания передать элементы одного массива другому массиву того же типа, например:

a: Array [1..10] of Real;

b: Array [1..10] of Real;

....

a:=b;

После этого присвоения все элементы массива А получают значения элементов массива B с соответствующими индексами.

Поскольку массивы являются упорядоченной структурой с заданной организацией, то обычно работа с элементами массивов осуществляется единообразно в циклах, при этом работа с элементами одномерного массива осуществляется в одном цикле, а работа с элементами двухмерного массива осуществляется в двух вложенных циклах.

2. Ввод и печать элементов массивов языке TURBO-PASCAL

Работа с элементами массива в программе возможна в том случае, если этим элементам заданы значения. По умолчанию (т.е. без ввода значений) элементам массива задаются значения 0. Значения элементов массива в программе можно задать следующими способами:

  • Ввод с клавиатуры с использованием процедуры Read.

  • Ввод операцией присвоения.

  • Ввод с использованием типизированной константы.

  • Ввод формированием из элементов другого массива.



2.1. Ввод с клавиатуры

Для ввода элементов массива с клавиатуры используют процедуру, Read по умолчанию осуществляющую чтение данных, вводимых с клавиатуры. Поскольку процедура Read является “тёмной” процедурой, то, для удобства ввода данных, вводимые значения надо сопровождать пояснительным текстом, т.е. перед вводом каждого значения на экран, должен быть выведен текст, например, "Введите 3-ий элемент массива". Алгоритмически процедура ввода элементов одномерного массива будет выглядеть следующим образом:

Рис. 26 Блок-схема ввода элементов одномерного массива

В программе для ввода элементов массива используется счетный оператор цикла For. В качестве параметра цикла используется индекс элементов массива i .

Процедура на TURBO-PASCAL вывода одномерного массива OCENINF:
Program vvod_1;

Var

oceninf: Array[1..20] of Integer;

i: Integer;

Begin

For i:=1 to 20 do

Begin

WriteLn('Введи ',i:2,'-ый элемент массива');

Read(oceninf[i]);

End;

...

Элементы двух разных массивов одинакового размера можно вводить в одном цикле. Если вместе с массивом оценок OCENINF вводить массив FAM фамилий студентов, получивших эти оценки, эта процедура будет выглядеть следующим образом:
Program vvod_2;

Var

fam: Array[1..20] of string[15];(*max. длина фамилии 15 символов*)

oceninf: Array[1..20] of Integer;

i: Integer;

Begin

For i:=1 to 20 do

Begin

WriteLn('введи фамилию ',i:2,'-го по списку студента');

Read(fam[i]);

WriteLn('введи оценку студента ', fam[i]);

Read(oceninf[i]);

End;



Ввод элементов двумерного массива осуществляется в двух вложенных циклах процедурой Read . Поскольку элементы двумерного массива располагаются в ячейках оперативной памяти по строкам и столбцам, то параметром внешнего цикла будет индекс i (строки), а параметр внутреннего цикла - j (столбцы). Рассмотрим пример ввода элементов матрицы A размером 4×5.

В описании массива в качестве индексов могут быть использованы как числа, так и идентификаторы. При использовании идентификаторов они должны быть предварительно определены. В приведенном примере для объявления количества строк и столбцов используем идентификаторы n и m. В программе, поскольку массив объявляется в разделах type или var, значения n и m должны быть заданы в разделе описания const.

Алгоритм и программа ввода элементов двухмерного массива будет следующей:

Рис. 27 Блок-схема ввода элементов двухмерного массива

Program vyvod3;

Const

n=4;

m=5;

Var

A: Array[1..n,1..m] of Real;

i,j: Integer;

Begin

For i:=1 to n do For j:=1 to m do

Begin

WriteLn('введи ',j:1,'-ый элемент ',i:1,'-ой строки');

Read(A[i,j]);

End;


6.2.2. Ввод операцией присвоения

Такая структура ввода используется в том случае, если элементы массива вычисляются в программе. Для примера можно рассмотреть формирование одномерного массива с именем Massin размером в 10 элементов, в котором значения массива вычисляются как значения фннкции Y=sinx+cosx для x, изменяющегося от 10о с шагом x=5о. Алгоритм и программа ввода в этом случае будут следующими:


Рис. 28 Блок-схема формирования одномерного массива
Program vvod_pr1;

Var

Massin: Array[1..10] of Real;

x: Real;

i: Integer;

Begin

x:=10;

For i:=1 to 10 do Begin Massin := sin(x*pi/180)+cos(x*pi/180); x:=x+5;End;

……

Для многих задач требуется, чтобы значения элементов массива были произвольными числами в фиксированном диапазоне. Для формирования элементов такого массива можно использовать функцию Random языка TURBO-PASCAL. Функция Random имееет две формы:

  • Форма Random генерирует псевдослучайные числа с нормальным распределением в диапазоне [0÷1]. Тип генерируемых чисел вещественный.

  • Форма Random(N) генерирует псевдослучайные числа с нормальным распределением в диапазоне [0÷N]. Тип числа N и генерируемых чисел целый.

Исходя из требований типа элементов массива (вещественный, целый), можно использовать одну из этих форм генерирования случайных чисел. Поскольку форма Randomдля генерирования вещественных чисел имеет ограниченный диапазон [0÷1], а в большинстве задач требуется более широкий диапазон, для реализации такого диапазона необходимо ввести множитель, задающий диапазон, и задать смещение диапазона. Например, для формированя значений одномерного массива A вещественного тапа случайными числами в диапазоне [-10÷ +15] необходимо записать следующее выражение:

A(i):= 25*Random –10;

Если задать значение верхней и нижней границ диапазона генерируемых чисел переменными P=15 и Q= -10, то предыдущее выражение можно записать в следующем виде:

A(i):= (P-Q)* Random +Q;

При генерировании элементов массива целого типа в указанном диапазоне выражение будет

A(i):= Random(25) –10;

или

A(i):= Random(P-Q) +Q;
В программе, использующей функцию Random, необходимо предварительно осуществить инициализацию генератора случайных чисел процедурой Randomize.

Алгоритм и фрагмент программы для формирования элементов двухмерного массива B[1:4,1:5] ( матрица размером 4 строки, 5 столбцов) вещественного типа в произвольном диапазоне будут следующими:

Program vyvod4;

Const

n=4;

m=5;

Var

B:Array[1..n,1..m] of Real;

P,Q: Real;

i,j: Integer;

Begin

Randomize;

WriteLn(‘Введи значение нижней границы диапазона'); Read(Q);

WriteLn(‘Введи значение верхней границы диапазона'); Read(P);

For i:=1 to n do For j:=1 to m do

B[i,j]:=(P-Q)*random+Q;



Рис. 29 Блок-схема формирования элементов двухмерного массива

6.2.3. Ввод с использованием типизированной константы

Такой способ ввода используется в том случае, если значения массива фиксированы и не изменяются в ходе исполнения программы. В этом случае структура, тип и значения элементов массива задаются в разделе const раздела описаний программы. При объявлении массива множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми. Например, задание одномерного массива А целого типа, содержащего 10 элементов, будет выглядеть следующим образом:

Program vyvod31;

Const

A: Array [1..10] of Integer =

(3, -6, 4, 7, 0, -6, -1, 18, -15, 5);
Задание двухмерного массива В размером 43 вещественного типа:

Program vyvod32;

Const

B: Array [1..10] of Real =

((-5.4, 2.005, 6.9, -1.1),

(8.9, 5.53, -6.32, -12.7),

(-4.9, 0.0, 8.5, -6.953));

6.2.4. Печать элементов одномерного массива
Печать элементов одномерного массива осуществляется в одном из трех видов вывода:

  • в столбец,

  • в одну строчку,

  • в несколько строчек.

В программе, для вывода элементов массива на экран дисплея или принтер, используется процедуры Write или WriteLn и счетный оператор цикла For , с индексом элементов массива i в качестве переменной цикла. Использование процедур Write и WriteLn зависит от того, в каком виде необходимо вывести элементы массива. Для печати элементов массива в столбец необходимо использовать процедуру WriteLn , осуществляющую переход на новую строку

после печати очередного элемента.

Для печати в одну строку необходимо использовать процедуру Write, при которой очередной элемент выводимого списка (в данном случае очередной элемент массива) будет помещен в той же строке, что и предыдущий.

Для печати в несколько строк в строке печать осуществляется процедурой Write, а после заданного в строке количества элементов осуществляется переход на новую строку процедурой WriteLn без параметров ("пустым" WriteLn или WriteLn (' ') (печать пробела)). Момент перехода на новую строку определяется кратностью индекса i заданному числу элементов в строке. Для определения кратности можно использовать различные условия, наиболее удобным из которых является равенство нулю остатка от целочисленного деления индекса i на число элементов в строке. Например, для печати 6 элементов в строке, условие должно быть следующим:

If i mod 6=0 Then WriteLn.

Алгоритмически процедура печати в столбик представлена на рис. 30(а). Фрагмент программы печати элементов вектора А вещественного типа в столбик будет следующим:



WriteLn (‘Исходныймассив’);

For i:=1 to 10 do

WriteLn(i:2,’-йэлементмассиваравен ‘,A[i]:4:1);



В столбик можно вывести результаты экзамена по информатике. Программа ввода и печати результатов экзамена будет следующей:

Program vvodvyvod1;

Var

fam: Array[1..20] of string[15];

oceninf: Array[1..20] of Integer;

i: Integer;

Begin

For i:=1 to 20 do

Begin

WriteLn('введи фамилию ',i:2,'-го по списку студента');

Read(fam[i]);

WriteLn('введи оценку студента ', fam[i]);

Read(oceninf[i]);

End;

WriteLn('Оценки студентов группы по информатике');

For i:=1 to 20 do

WriteLn(fam[i],oceninf[i]:1);

End.



Рис. 30
Печать элементов массива в одну строчку осуществляется в том случае, если элементов немного и они помещаются в одну строчку. Элементы в строке должны отделяться один от другого пробелом, который должен быть предусмотрен в формате печати. Алгоритмически процедура печати в одну строку представлена на рис. 25(б). Фрагмент программы печати элементов вектора А вещественного типа в строку будет следующим:



WriteLn (‘Исходныймассив’);

For i:=1 to 10 do

Write (A[i]:4:1,’ ‘);

WriteLn;



Пустая процедура WriteLnза циклом печати вектора переводит указатель печати на новую строку с тем, чтобы новая печать не продалжалась в той же строке, что и печать вектора.

Печать вектора в несколько строк осуществляется для большого вектора. Число элементов в строке выбирается в зависимости от формата представления числа и из эргонометрических соображений. Алгоритм процедуры печати вектора в несколько строк приведен на рис. 25(в). Фрагмент программы печати элементов вектора А вещественного типа из 30 элементов в 5 строк по 6 элементов будет следующим:



WriteLn (‘Исходныймассив’);

For i:=1 to 10 do

Begin

Write (A[i]:4:1,’ ‘);

If i mod 6=0 Then WriteLn;

End;

WriteLn;


6.2.5. Печать элементов матрицы

Вывод на экран или принтер значений элементов двухмерного массива осуществляется в двух вложенных циклах процедурами Write и WriteLn. Если двумерным массивом является матрица, то вывод на экран или принтер должен осуществляться в естественном виде, по строкам и столбцам. В этом случае вывод матрицы аналогичен выводу одномерного массива в несколько строк: вывод одной строки матрицы осуществляется процедурой Write во внутреннем цикле. После завершения строки "пустой" процедурой WriteLn осуществляется перевод печати на новую строку. Алгоритмически процедуры ввода и вывода элементов двухмерного массива B выглядят следующим образом:



Рис. 31 Блок-схема ввода и вывода элементов двухмерного массива B
Программа на TURBO-PASCAL:

Program vyvod4;

Const

n=4; m=5;

Var

B:Array[1..n,1..m] of Real;

P,Q: Real;

i,j: Integer;

Begin

Randomize;

WriteLn(‘Введи значение нижней границы диапазона'); Read(Q);

WriteLn(‘Введи значение верхней границы диапазона'); Read(P);

For i:=1 to n do For j:=1 to m do

B[i,j]:=(P-Q)*random+Q;

WriteLn('Исходная матрица');

For i:=1 to n do

Begin

For j:=1 to m do

Write(B[i,j]:6:2,' ');(*печать строки матрицы*)

WriteLn(' '); (*перевод печати на новую строку*)

End;

End.
Внутри одной процедуры ввода или вывода элементов двумерного массива можно осуществить ввод и вывод элементов двумерного массива. Например, если необходимо ввести и распечатать результаты экзаменационной сессии студентов группы, можно создать три массива: двумерный массив OCENSES - оценок по всем предметам, и два одномерных массива: FAM- массив фамилий студентов группы и PREDM- массив предметов, по которым получены оценки. Для массива PREDM необходима отдельная процедура ввода и вывода, а массив FAM можно вводить во внешнем цикле процедуры ввода массива OCENSES. Программа ввода и печати результатов сессии будет следующей:

Program rezultaty_sesii;

Var

predm: Array[1..5]of string[11];(*max длина названия предмета 11 символов*)

fam: Array[1..15]of string[15];(*max длина фамилий 15 символов*)

ocenses: Array[1..15,1..5]of Integer;

i,j: Integer;

Begin

For j:=1 to 5 do

Begin

WriteLn('введи название ',j:1,'-го предмета');

Read(predm[j]);

End;

For i:=1 to 15 do

Begin

WriteLn('введи фамилию ',i:1,'-го студента');

Read(fam[i]);

For j:=1 to 5 do

Begin

WriteLn('введи оценку студента ',fam[i],' по дисциплине ',predm[j]);

Read(ocenses[i,j])

End;

End;

WriteLn('РЕЗУЛЬТАТЫ СЕССИИ');

Write(' ');

For j:=1 to 5 do

Write(predm[j]:11,' ');

WriteLn(' ');

For i:=1 to 15 do

Begin

Write(fam[i]:15,' ');

For j:=1 to 5 do

Write(' ',ocenses[i,j]:1,' ');

WriteLn(' ');

End;

End.

6.2.6. Ввод формированием из элементов другого массива

Формирование нового массива из элементов существующего массива обычно осуществляется по какому-то заданному условию. В этом случае элементами нового массива становятся только элементы, удовлетворяющие заданному условию и, соответственно, количество элементов и индексы исходного и формируемого массивов не совпадают. Структура исходного и формируемого массивов может быть разной. Рассмотрим различные примеры формирования массивов.

Пример. Дана матрица A[ 1:5, 1:4], сформированная из случайных вещественных чисел в диапазоне [ -15+15]. Из положительных чисел матрицы сформировть вектор B.

Для решения этой задачи необходимо:

  1. Объявить исходный и формируемый массивы. Исходным является двухмерный вещественный массив размером [ 1..5, 1..4]. Формируемым будет одномерный массив, размер которого заранее неизвестен, т.к. он формируется по условию. В таком случае размер формируемого массива задается по размеру исходного, и в данном случае его размер будет [ 1..20].

  2. Ввести и распечатать значения исходного массива.

  3. Задать счетчик индексов формируемого массива.

  4. В двух вложенных циклах просматривать элементы исходного массива, выбирать элементы, отвечающие условию формирования нового массива, и из этих элементов формировать новый массив, увеличивая при этом на 1 значение счетчика индексов формируемого массива.

  5. Вывести на печать значения сформированного массива.

Алгоритм и программа этой задачи будут следующими:

Program vyvod4;

Var

a: Array[1..4,1..5] of Real;

b: Array[1..20] of Real;

i,j,k: Integer;

Begin

Randomize;

For i:=1 to 4 do For j:=1 to 5 do

a[i,j]:=30*random-15;

WriteLn('Исходная матрица');

For i:=1 to 4 do

Begin

For j:=1 to 5 do

Write(a[i,j]:6:2,' ');

WriteLn(' ');

End;

k:=0;

For i:=1 to 4 do For j:=1 to 5 do

If a[i,j]>0 Then Begin k:=k+1; b[k]:=a[i,j];End;

WriteLn('Полученный вектор');

For i:=1 to k do

Begin

Write (b[i]:4:1,' ');

If i mod 5=0 Then WriteLn;

End;

WriteLn;

End.



Рис. 32 Блок-схема значения сформированного массива.

Пример. Дан вектор B[1:25], содержащий значения целого типа в диапазоне [-20+20]. Из положительных чисел вектора B сформировть матрицу A[1:5, 1:5]. Недостающие значения матрицы заполнить нулями.

В данном случае формируемым массивом является двухмерный массив, содержащий значения матрицы. Матрица является структурой, с жестко заданной организацией, т.е. в данном случае матрица должна содержать 25 элементов. В связи с этим, в исходном массиве должно быть количество элементов, не меньшее, чем в формируемом. Поскольку в данном примере матрица формируется по условию, то недостающие элементы матрицы должны быть заполнены заданными значениями, в данном случае нулями. В отличие от формирования вектора, формирование матрицы осуществляется во вложенных циклах по структуре матрицы. Для выбора элементов исходного вектора используется дополнительный счетчик индексов исходного вектора. В общем случае, для формирования матрицы из вектора необходимо выполнить следующие действия:

  1. Объявить исходный и формируемый массивы. Размеры обеих массивов заранее известны.

  2. Ввести и напечатать значения исходного массива.

  3. Задать счетчик индексов исходного массива.

  4. В двух вложенных циклах по формируемой матрице просматривать элементы исходного массива, выбирать элементы, отвечающие условию формирования нового массива, и из этих элементов формировать новый массив, увеличивая при этом на 1 значение счетчика индексов исходного массива.

  5. Вывести на печать значения сформированного массива.

В данном примере не будем рассматривать известные процедуры ввода и печати элементов исходного массива, а также печати сформированного массива. Фрагменты алгоритма и программы формирования матрицы из вектора будут следующими:

Рис. 33 Блок-схема алгоритма и программы формирования матрицы из вектора



k:=0;

For i:=1 to 5 do For j:=1 to 5 do

Begin

k:=k+1;

If b[k]>0

Then a[i,j] :=b[k]

Else a[i,j] :=0;

End;


Пример. Дана матрица A[1:5, 1:5], содержащая значения целого типа в диапазоне [-20+20]. Из элементов матрицы, находящихся в диапазоне [-10+10], сформировть матрицу B[1:3, 1:4]. Недостающие значения матрицы заполнить верхним значением диапазона формируемой матрицы.

Как и в предыдущем случае, здесь формируется массив с фиксированной структурой. Формирование матрицы одной структуры из матрицы другой структуры целесообразно осуществлять через промежуточный одномерный массив. В данном случае из матрицы A по заданному условию формируется одномерный массив С, а затем из элементов этого массива формируется двухмерный массив B. Если в массиве С элементов меньше, чем должно быть в массиве B, то недостающие элементы массива С заполняются числом 10, т.е. верхним значением диапазона формируемой матрицы. В общем случае, для формирования матрицы из матрицы необходимо выполнить следующие действия:

  1. Объявить исходный, формируемый и промежуточный массивы. Размеры исходного и формируемого массивов заранее известны, а промежуточный массив задается по размеру исходного.

  2. Ввести и напечатать значения исходного массива.

  3. Задать счетчик индексов промежуточного массива.

  4. В двух вложенных циклах по исходной матрице просматривать элементы исходного массива, выбирать элементы, отвечающие условию формирования нового массива, и из этих элементов формировать промежуточный массив, увеличивая при этом на 1 значение счетчика индексов промежуточного массива.

  5. Задать промежуточный счетчик индексов для формирования новой матрицы.

  6. В двух вложенных циклах по формируемой матрице по промежуточному счетчику индексов выбирать значения из промежуточного вектора и из них формировать значения новой матрицы. В каждом цикле поисходит сравнение значения промежуточного счетчика индексов с числом элементов в промежуточном векторе. При превышении счетчиком числа элементов, значения нового массива заполняются числом 10.

  7. Вывести на печать значения сформированного массива.

Фрагменты алгоритма и программы формирования матрицы из матрицы будут следующими:


Рис. 34 Блок-схема фрагменты алгоритма и программы формирования матрицы из матрицы



k:= 0;

For i:=1 to 5 do For j:=1 to 5 do

If (a[i,j]>-10) AND (a[i,j]<10)

Then Begin k:=k+1; b[k] :=a[i,j]; End;

l:=1;

For i:=1 to 3 do For j:=1 to 4 do

If l<=k

Then Begin b[i,j] :=c[l]; l:=l+1; End

Else b[i,j] :=10;

Вопросы для самоконтроля:

  1. Понятие массивов.

  2. Способы объявления массивов в TURBO PASCAL.

  3. Способы ввода элементов массивов языка TURBO PASCAL.

  4. Как организовать вывод элементов вектора в несколько строк.

  5. Как организовать вывод элементов матрицы.

  6. Как формировать вектор из элементов другого массива по условию.

  7. Способы формирования матрицы из вектора.

  8. Способы формирования матрицы из другой матрицы.



Лабораторная работа № 8

  1   2   3


написать администратору сайта