Конспект лекций по информатике для специальностей 2102, 2103 Автор доц., к т. н. Каширская Е. Н
Вид материала | Конспект |
Содержание6.2. Многомерные массивы 6.3. Упакованные массивы |
- Конспект лекций бурлачков в. К., д э. н., проф. Москва, 1213.67kb.
- Конспект лекций по курсу "Начертательная геометрия и инженерная графика" Кемерово 2002, 786.75kb.
- Конспект лекций по дисциплине «Маркетинг», 487.79kb.
- Конспект лекций для студентов всех специальностей дневной и заочной формы обучения, 1439.07kb.
- Конспект лекций для студентов, магистров и аспирантов всех специальностей, 373.35kb.
- Конспект лекций для студентов по специальности i-25 01 08 «Бухгалтерский учет, анализ, 2183.7kb.
- Конспект лекций организация производства и маркетинг для студентов 3 курса специальностей, 2989.73kb.
- Конспект лекций по дисциплине «психология и педагогика» омск 2005, 2020.42kb.
- Конспект лекций по курсу «Организация производства», 2034.84kb.
- Конспект лекций по курсу «Организация производства», 2032.47kb.
6.2. Многомерные массивы
До сих пор мы рассматривали массивы, каждый элемент которых содержал один индекс. Такие массивы называют одномерными.
Из многомерных массивов в математике наиболее часто используют двумерные массивы – матрицы.
Описание матрицы 3 х 4:
- Type T = Array [1..3,1..4] of Integer;
Var A:T;
- Type T = Array [1..3] of Array [1..4] of Integer;
Var A:T;
Пример:
Type T1 = Array [1..4] of Integer;
T = Array [1..3] of T1;
Var A:T;
B: T1;
Здесь сначала описывается тип одной строки Т1, а затем, через тип строки Т1, описывается тип всей матрицы Т. В разделе переменных указывается, что А является двумерным массивом (т.е. матрицей), а В – одномерным массивом.
Пример: Найти сумму положительных элементов массива D(n,m)
n10, m20.
Program Summa;
Const n=10;
m=20;
Var i, j:Integer;
Sum: Real;
D: Array [1..n,1..m] of Real;
Begin
Sum: = 0;
For i: = 1 to n do
For j: = 1 to m do
Begin
Read (D[i,j]);
If D[i,j] > 0 then Sum: = Sum + D[i,j];
End;
Writeln (‘Sum=’,Sum);
End.
Пример: Даны две матрицы: A[N*M], B[N*M].
Найти их сумму C[N*M]= A + B.
Cij = aij + bij
Program Summa;
Const N=3; (*количество строк*)
M=5; (*количество столбцов*)
Type Mat = Array [1..N,1..M] of Real;
Var A, B, C: Mat;
I: Integer; (*индекс строки*)
J: Integer; (*индекс столбца*)
Begin
Writeln (‘Ввести А, В’);
For I: = 1 to N do
Begin
For J: = 1 to M do
Begin
Read (A[I,J],B[I,J]);
C[I,J]:= A[I,J] + B[I,J];
End;
Readln;
End;
Writeln (‘Матрица С’);
For I: = 1 to N do
Begin
For J: = 1 to M do
Write (C[I,J]:3:1, ‘ ‘:2);
Writeln;
End;
End.
6.3. Упакованные массивы
Как правило, одно целое число или один символ занимают в памяти ЭВМ два байта. В то же время для изображения символа достаточно одного байта. С целью экономии памяти машины в языке программирования Паскаль введено понятие упакованного массива. Элементы упакованного массива хранятся по два в двух байтах ЭВМ. И хотя при этом экономится место в памяти, но увеличивается время доступа к компонентам массива.
Элементы упакованного массива используются в программе точно так же, как элементы не упакованного массива. Только память машины при этом автоматически выделяется меньше.
Например, массивы А и АР описаны как
Var AP: Packed Array [1..3] of Boolean;
A: Array [1..3] of Boolean;
Обычнвй м упакованный массивы идентичны в смысле объема и характера хранимой информации, но различаются способами представления в памяти ЭВМ.
Упакованный массив можно описывать в разделе переменных или с использованием раздела типов.
Описание в разделе типов:
Type имя типа = Packed Array [имя индекса] of тип элемента;
Var имя переменной:имя типа;
Здесь служебное слово Packed указывает на то, что массив данных является упакованным.
К упакованным символьным массивам в языке программирования Паскаль относится строки символов, которые задаются либо в разделе операторов, либо в разделе констант (строки символов, а не символьные строки String, о которых речь пойдет дальше). Как известно, тип константы однозначно определяется ее записью. Поэтому если, например, в разделе констант определена константа S=’end’, то она принадлежит к типу: Packed Array [1..3] of Char.
Считается, что символьные константы имеют тип упакованных массивов:
Packed Array [1..n] of Char;
где n - длина строки.
Символьные массивы и константы могут участвовать в операциях присваивания и сравнения.
Пусть, например, описание символов массива имеет вид:
Type Mas= Packed Array [1..7] of Char;
Var A:Mas;
Тогда, можно записать такой оператор:
A:=’ZADACHA’;
Если к строкам и упакованным символьным векторам применяют операции сравнения, то при этом аргументы обязательно должны содержать одинаковое количество символов, т.е. их типы д/б идентичными. Операции сравнения выполняются посимвольно, слева направо.
Пример: ‘String’ < ’Strong’, т.к. в алфавите символ ‘i’ стоит раньше, чем ’o’ и его код меньше, т.е. ’i’<’o’.
Пусть, например, имеется строка: “ABCDEFG”. Эту строку можно считать массивом символов, состоящим из 8 символов, включая пробел. Если этот массив символов обозначить именем Sim, то описание примет вид:
Type T = Packed Array [1..8] of Char;
Var Sim:T;
Один элемент массива принимает значение одного символа, например:
Sim[1]=’A’;
Sim[6]=’ ’.
Элементы массива могут принимать свои значения с помощью оператора ввода Read, который располагается внутри цикла.
Пример: ввода.
- I: = 1;
While I<=10 do Begin Read (A[I]); I:= I+1; End;
- For I:= 1 to 46 do Read (A[I]);
Вывод массива символьных данных также организуется с использованием цикла.
Пример: Дана строка символов, обозначенная именем S1.
‘To be or not to be’
Требуется сформировать новый массив с именем S2, который содержит представленную строку символов с добавлением в конце вопросительного знака.
Program Hamlet;
Type Stroka = Packed Array [1..20] of Char;
Var S1, S2: Stroka;
I: Integer; (*счетчик символов*)
K: Integer; (*параметр цикла*)
Begin
Write (‘Ввести S1=’);
I; = 0;
While I <= 18 do
Begin
I:= I+1;
Raed (S1[I]); Readln;
End;
S2:= S1;
S2[I+1]:= ‘?’;
For K:= 1 to I+1 do Write (S2[K]);
End.
Р
![](images/18187-nomer-524edf91.gif)
Пример: Даны два символьных массива: А1= ‘Suvorov’ и А2= ‘Suhanov’. Требуется поменять их местами.
Program Zamena;
Const N =12;
Type Mas = Array [1..N] of Char;
Var A1,A2,X: Mas;
Begin
Writeln (‘A1-Who?’);
Readln (A1); {Суворов}
Writeln (‘A2-Who?’);
Readln (A1); {Суханов}
Writeln (‘происходит замена’);
X:=A1;
A1:=A2;
A2:=X;
Writeln (‘A1=’,A1);
Writeln (‘A2=’,A2);
End.
Обратите внимание, что для ввода и вывода символьных массивов здесь не применяется цикл!