Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Одномерные и многомерные массивы



Все переменные делятся на простые и индексированные. Простые записываются своими идентификаторами (именами) и могут быть различных типов (integer, real, …), например, PI, Xmin, DELTA, omega и др. Индексированные переменные являются элементами массива, который состоит из набора данных одного типа. Массив элементов имеет общий идентификатор - имя, а каждый его элемент определяется по индексу имени, например, V[i] – i-тый элемент массива с именем V. Массив объединяет фиксированное количество элементов одного типа данных. Более формально массив можно определить как последовательную упорядоченную совокупность элементов некоторого типа, которые адресуются с помощью некоторого индекса (номера элемента в массиве).

Наряду с термином «массив» часто используются термины «матрица», «таблица», «вектор».

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

type
Tarr = array [T1] of T2,

где Tarr – имя массива., array, of – служебные слова, Т1 – означает тип индекса массива, Т2 – тип элементов массива.

В качестве типа индекса может быть использованы все порядковые типы, за исключением длинного целого ( longint ) и поддиапазонов длинного целого.

Массивы могут быть одномерными и многомерными, например, X[I], A[I, J], D[I, J, K] и др. Число индексов в определении (то есть размерность массива) не ограничивается.

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

Например, array[1..5] of array[1..10] of Real интерпретируется компилятором точно так же, как массив: array[1..5, 1..10] of Real. Таким образом, допускается запись типов индексов, разделенных запятыми, в одних скобках.

Примеры описания массивов:

Тип массива (его элементов) должен быть описан до объявления самого массива (его имени):

Type

V1 = array[1..100] of real;

V2 = array[char] of boolean;

M1 = array[1..10] of array [1..15] of integer;

Var

Vector: V1;

Symb_Table: V2;

Matrix1, Matrix2: M1;

Однако допускается объявление массива непосредственно в разделе описания переменных:

Var

B: array[1..5] of byte;

S: array[(Red, Yellow, Green)] of Boolean;

M: array[1..5, 1..7] of integer;

Иногда требуется задать массив с помощью типизированной константы. Пример:

Const

Marks: array[1..4] of integer = (2, 3, 4, 5);

Tmatr: array[1..2, 1..3] of byte = ((3, 1, 5), (7, 2, 4));

Pascal допускает единственное возможное действие над массивом в целом: использование его в операторе присваивания, например:

Vect1: =Vect2

причем типы обоих массивов в данном случае должны быть эквивалентны.

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

индексов могут выступать произвольные выражения, тип которых должен соответствовать типу индексов в описании массива.

Примеры:

Vector[1]

Vector[(i+1)*2]

M[i, j]

M[3][1]

M[3, 1]

Элемент массива считается переменной; он может получать значения (например, в операторе присваивания), а также участвовать в выражениях.

Примеры :

M[i, j]: =M[i, j-1]*2

Symb_Table[‘a’]: =true;

Vector[i]: =M[i, 1] mod 2;

Обработка массивов

Задача 2.1 Найти сумму элементов массива

Const

N = 5;

Var

A: array[1..N] of Integer;

I, Sum: Integer;

Begin

{ввод элементов}

for I: =1 to N do

Begin

Write(‘Введите ’, I, ’-й элемент массива: ’);

ReadLn(A[I]);

end;

Sum: =0;

for I: =1 to N do

Sum: =Sum+A[I];

Writeln(‘Сумма равна ’, Sum);

End.

В программе определяется константа N=5 – наибольший индекс (номер) элемента в массиве А, затем задаётся тип (целый) для массива А размерностью от 1 до N, номера элемента I, и суммы Sum. В основном блоке с помощью оператора for перебираются и вводятся все элементы (оператором read), затем задаётся начальное значение суммы Sum: =0, затем в цикле for от 1 до N все элементы массива прибавляются к начальной сумме Sum: =Sum +A[I]. После вывода суммы на экран программа завершается.

Задача 2.2 Вывести номера строк матрицы А, которые содержат нулевой элемент и произведение элементов 4-го столбца, больших 2..

Const

P: =1

Var

A: array[1..5, 1..7] of Byte;

I, J: Byte;

Begin

{инициализация генератора случайных чисел}

Randomize;

{заполнение и печать матрицы}

for I: =1 to 5 do

Begin

for J: =1 to 7 do

Begin

A[I, J]: =Random(15);

Write(A[I, J]: 4);

end;

WriteLn;

end;

WriteLn;

for I: =1 to 5 do

for J: =1 to 7 do

if A[I, J]=0 then

Begin

Write('I=', I);

Break;

end;

if A[I, 4]> 2 then

Begin

P: =P*A[I, 4];

end;

Write('P[I, 4] =', P);

WriteLn;

End.

 

Описание программы

Генератор случайных чисел использован в программе для заполнения элементов двумерного массива A[I, J] случайными числами. Для этого организованы циклы по I и J для перебора всех элементов

массива и каждому функция Random(15) присваивает случайное число в диапазоне 0 …15, которое распечатывается на экране четырьмя знаками. Оператор WriteLn выводит пустую строку.

Во вложенном цикле for перебираются все сочетания номеров строк I и столбцов J матрицы, а проверка if A[I, J]=0 определяет и выводит через Write('I=', I)номер строки (I) матрицы, в которой имеется нулевой элемент.

Во вложенном цикле for перебираются все сочетания номеров строк I и столбцов J матрицы, а проверка if A[I, 4]> 2 определяет элемент 4-го столбца, больший 2, он умножается на Р и по завершении цикла итоговое произведение таких элементов выводится через Write('P[I, 4] =', P).

3 Контрольные вопросы

1 Что такое массив данных?

2 Как описываются одномерные и многомерные массивы?

3 Как описывается тип элемента массива?

4 Объясните организацию циклов, содержащих индексированные

переменные.

5 Как задать обработку элементов только 2-го столбца?

6 Как задать обработку элементов, расположенных ниже главной диагонали?

7 Как определить максимальный элемент массива?

8 Как определить нечётные элементы массива?

Задания

4.1. Рассчитать значения функции согласно своему варианту (№ компьютера в аудитории). Предусмотреть сохранение в памяти вычисленных значений функции.

№ вар Функция, массив Задание
y =(1+| x | ); x {7; 1; 2; -3; -1; 5; -18} Найти максимум и сумму положительных элементов массива
Найти минимум и сумму отрицательных элементов массива А
S =lg (3│ sin(x)│ +x x {-5; 4; 0; 1; 3.5; -10; 14} Количество и сумму элементов, меньших 2
u =ln │ 3sin x +1│; x {-1; 2; 4.1; -5; -22; 17} Наибольшее и наименьшее значения функции  
Найти сумму и количество элементов A[I, J] > 1  
r =3.4sin(5+3.1t ); t {-1.1; -0.8; 4; -1; -3; 5} Произведение элементов t с нечет ными номерами и их количество    
q =3.3sin x - 1+sin x; x {1; 4; 3; 7; -51; 32; -2} Номер первого отрицательного элемента массива q  
         

 

Найти минимум и сумму положительных элементов массива  
Количество и сумму элементов, больших 2  
d =ln │ x +sin х4│; x {0.75; -3.1; 21; -1.7; 3} Количество и произведение элементов, больших -2  
Произведение элементов с чет ными номерами и их количество    
Сумму элементов над главной диагональю и максимальный из них  
m =7.3cos x6 – sin3 x; x {1; 4; 3; 7; -51; 32; -2} Номер первого положительного элемента массива m  
Произведение отрицательных элементов над главной диагональю и минимальный из них  
G =(sin3 x – tg2 x; x {1; 4; 3; 7; -51; 32; -2} Номер первого отрицательного элемента массива G  
Сумму положительных элементов под главной диагональю и максимальный из них  
Произведение элементов с нечет ными номерами и их количество  
a =e x {1.3; 0.2; -4; 3.2; 5; -1} Сумму элементов с чет ными номерами и их количество  
Произведение элементов с нечет- ными номерами, большими -2, и их количество  
C =arctg(a -3a +2); a {2.7; 3.1; 4.5; -6; 14} Произведение элементов с чет ными номерами и их количество  

 

Содержание отчета

1 Название, цель, содержание работы

2 Задание для своего варианта.

3 Программа расчёта

4 Результаты расчётов в среде QB.

5 Письменные ответы на контрольные вопросы.

6 Выводы по работе

 

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


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 662; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.024 с.)
Главная | Случайная страница | Обратная связь