Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Операции с индексированными переменными

Массивы одномерные

Массив – это поименованный набор однотипной информации.

Массив объединяет элементы одного типа данных. Всему набору данных присваивают общее имя - имя массива. Каждый элемент массива определяется с помощью индекса, определяющего место этого элемента в общем наборе.

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

Характеристики массива:

тип – общий тип всех элементов массива;

размерность (ранг) – количество индексов массива;

диапазон изменения индексов – определяет количество элементов в массиве.

Вектор (одномерный массив) – это массив, в котором элементы нумеруются одним индексом.

 

Описание массивов

 

Для одномерного массива:

var

a: array[1…n] of <тип>;

где a - имя массива;

n - максимальное количество элементов массива;

<тип> - тип элементов массива.

Например:

var

mas: array [1…10] of real;

begin

...

Описан массив mas - содержащий 10 элементов вещественного типа.

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

a [ i ], a [i+2], a [9]

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

Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через const.

Например:

const

n = 10;

var

mas: array [1…n] of real;

begin

 

Ввод элементов массива

for i:=1 to n do

readln( a[ i ] );

Каждое прохождение через цикл соответствует вводу одного элемента массива.

 

Вывод элементов массива

for i:=1 to n do

writeln( a[ i ] );

 

Каждое прохождение через цикл соответствует выводу одного элемента массива.

 

Обработка одномерных массивов

 

Рассмотрим типовые задачи обработки одномерных массивов.

 

Задача.

 

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

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Размер массива n
Индекс массива i
Сумма элементов S
Произведение элементов p

 

program mas_1;

uses

crt;

var

a : array [1…100] of real;

n, I : integer;

p, s : real;

begin

clrscr;

{подготовить переменные для суммы и произведения}

s: = 0; p: =1;

writeln ('введите размер массива n<=100');

readln (n);

writeln ('введите элемент массива');

for i:=1 to nk do

readln (a[i] );

for i:=1 to nk do

begin

s:= s + a[ i ];

p:= p * a[ i ];

end;

writeln ('Сумма = ',s:8:3,'Произведение =',p:8:3);

readln;

end.

 

При накапливании суммы переменную необходимо обнулить, а при накапливании произведения – присвоить 1.

 

Задача.

Дан массив a(n). Найти максимальный элемент массива и определить его номер.

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Размер массива n
Индекс массива i
Максимальный элемент max
Номер максимального элемента nmax

 

 

program mas_2;

var

a: array [1…100] of real;

i,n,nmax: integer;

max: real;

begin

writeln ('введите размер массива n<=100');

readln (n);

writeln ('введите элементы массива');

for i:=1 to n do

readln (a[ i ] );

{за максимальный принимается первый элемент массива}

max:=a[1]; nmax:=1;

for i:=1 to n do

If a[i]>max then

begin

max:=a[i];

nmax:=i;

end;

writeln ('max =', max, ' N=', nmax);

readln;

end.

 

Задача.

 

Задан массив целых чисел. Отсортировать элементы одномерного массива по возрастанию.

 

Существует много способов сортировки элементов массива

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Размер массива n
Индекс массива i
Флажок flag
Дополнительная переменная для обмена местами сосодних элементов p

 

program mas_3;

uses

crt;

var

a: array [1…100] of integer;

f, n, i,p : integer;

 

begin

clrscr;

writeln ('введите размер массива n<=100');

readln (n);

writeln ('введите элементы массива');

for i:=1 to n do

readln (a[i]);

repeat

f:=0;

for i:=1 to n-1 do

if a[ i ]>a[i+1] then

begin

p: =a[ i ];

a[ i ]:=a[i+1];

a[i+1]:=p; f:=1;

end;

until f=0;

for i:=1 to n do writeln (a[ i ]);

readln;

end.

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

Внутренний цикл (for…to…do) – позволяет один раз пройтись по массиву, сравнивая соседние элементы. В случае, если предыдущий элемент (a[ i ]) окажется больше последующего (a[i+1]), элементы меняются местами через дополнительную переменную p.

Внешний цикл(repeat…until) – повторяется до тех пор, пока массив не будет упорядочен.

В программе применяется переменная – флажок.

f =1 – признак того, что два соседних элемента менялись местами, массив еще не упорядочен.

f =0 – признак того, что массив упорядочен.

 

Пример программы обработки одномерного массива

Задача.

Задан одномерный массив целых чисел. Найти количество нечетных чисел среди элементов массива

2. Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Размер массива n
Индекс массива i
Количество нечетных чисел kol

 

3. Листинг программы

 

program lab5;

uses

crt;

var

a: array [1…100] of integer;

n, i,kol : integer;

begin

clrscr;

writeln ('Введите размер массива n<=100');

readln (n);

writeln ('Введите элементы массива');

for i:=1 to n do

readln (a[ i ]);

kol:=0;

for i:=1 to n do

if odd(a[ i ]) then kol:=kol+1;

writeln(‘Количество нечетных = ’, kol);

readln;

end.

 

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

 

  1. Что такое массив?
  2. Будут ли сохранены данные массива в памяти компьютера после окончания работы программы?
  3. Что такое индекс массива?
  4. Какого типа должны быть переменные, являющиеся индексами массива?
  5. Как можно задавать размер массива?
  6. Может ли реальное количество элементов в массиве быть меньше, чем указано при описании?
  7. Может ли реальное количество элементов в массиве быть больше, чем указано при описании?

11.4. Методические указания для выполнения практического задания №7. «Операции с индексированными переменными»

Цель работы: Ознакомиться со способом хранения однотипной информации в поименованном наборе, массиве,

Задание:

1. В приложении 8 выбрать вариант задания.

2. Выполнить практическое задание №7, используя пример программы обработки одномерного массива.

3. Составить блок-схему алгоритма.

4. Написать программу и отладить ее по заранее подготовленному тесту.

5. Оформить задание в тетради для практических работ.

6. Результат выполнения программы предъявить преподавателю.

7. Ответить на вопросы самоконтроля.

8. Защитить выполненную работу у преподавателя.

Приложение 8. Таблица вариантов заданий

 

Вариант Задание
Даны натуральное n, целые числа а1, … , аn, каждое из которых отлично от нуля. Если в массиве отрицательные и положительные элементы чередуются ( +, - ,+ , - … или -, +, -, +, …), то ответом должен служить исходный массив. Иначе получить все отрицательные элементы массива, сохранив порядок их следования.
Даны натуральное n и действительные числа a1, … , an (n - четное). Получить max (a1+ an, a2+ an-1, … , an/2+ a(n/2)+1).
Даны натуральное число n, действительные числа a1, … , an. Найти максимальный среди отрицательных элементов имеющих четные индексы.
Даны натуральное n, действительные числа a1, … , an. Получить числа в1, в2, … , вn, где вi – среднее арифметическое всех элементов массива а1, … , аn, кроме аi (i = 1, 2, … , n).
Даны натуральное n, действительные числа a1, … , an. Если в результате замены отрицательных элементов массива a1, … , an их квадратами элементы будут образовывать неубывающую последовательность, то получить сумму элементов исходного массива; в противном случае получить их произведение.
Даны натуральное n, m, целые числа a1, … , an, b1, … , bm. Найти сумму тех элементов массива a1, … , an, индексы которых совпадают со значением элементов массива b1, … , bm.  
Даны натуральное n, действительные числа a1, … , an (все числа попарно различны). Поменять в этом массиве местами наибольший и наименьший элементы.
Даны натуральное n, действительные числа a1, … , an. Получить преобразованный массив, заменяя a i нулями, если | ai | не равно max (a1, … , an), и заменяя a i единицей в противном случае (i = 1, 2, … , n).
Даны натуральное n, действительные числа a1, … , an (все числа попарно различны). Поменять в этом массиве местами наименьший и последний элементы.
Даны натуральное n, действительные числа a1, … , an, b1, … , bn. Получить новый массив с1, … , сn, каждый элемент которого сi = max (ai, bi), i = 1, 2, … , n.  
Даны натуральное n, действительные числа a1, … , an, b1, … , bn. Преобразовать b1, … , bn по правилу: если ai < 0, то bi увеличить в 10 раз. Иначе bi заменить нулем, i = 1, 2, … , n.
Даны натуральное n, действительные числа a1, … , an. Требуется умножить элементы массива a1, … , an на квадрат ее наименьшего элемента, если ai ³ 0. И на квадрат ее наибольшего члена, если ai < 0.
Даны натуральное n, действительные числа a1, … , an. Вычислить сумму тех элементов массива, индексы которых являются степенями двойки (1, 2, 4, 8, 16, …).
Даны натуральные n, m, действительные числа a1, … , an, b1, … , bm. Элементы каждого из массивов упорядочены по не убыванию. Объединить элементы этих двух массивов в один массив с1, … , сn + m так, чтобы они снова оказались упорядочены по не убыванию.
Даны натуральные n, m, действительные числа a1, … , an и b1, … , bm. Найти наименьший среди элементов a1, … , an, который не входит в b1, … , bm.
Даны натуральные n, целые числа a1, … , an. Найти сумму неповторяющихся элементов массива.
Даны натуральные n, целые числа a1, … , an. Наименьший элемент массива a1, … , an заменить целой частью среднего арифметического всех элементов, остальные элементы оставить без изменения. Если в массиве несколько элементов со значением min (a1, … , an), то заменить последний по порядку.
Даны натуральные n, целые числа a1, … , an. Преобразовать массив по правилу: все отрицательные элементы перенести в его начало, а все остальные в конец, сохраняя исходное взаимное расположение как среди отрицательных, так и среди остальных элементов.
Даны натуральные n, действительные числа a1, … , an (n - четное). Получить min (a1 * an, a2 * an-1, … , a[n/2] * a[n/2]+1).
Даны натуральные n, действительные числа a1, … , an. Преобразовать массив, расположив элементы в обратном порядке.
Даны натуральное n, действительные числа a1, … , an. Все элементы массива с четными номерами, предшествующие первому по порядку элементу со значением max (a1, … , an), умножить на max (a1, … , an).
Даны натуральное n, целые числа a1, … , an. Найти сумму квадратов тех элементов массива, которые по модулю больше максимального элемента.
Даны натуральное n, действительные числа a1, … , an. Если в результате замены отрицательных элементов массива a1, … , an их квадратами элементы будут образовывать неубывающую последовательность, то получить сумму элементов исходного массива; в противном случае получить их произведение.
Даны натуральное n, действительные числа a1, … , an. Найти максимальный элемент массива среди отрицательных элементов, имеющих четные индексы.
Даны натуральное n, действительные числа a1, … , an. Получить преобразованный массив, заменяя ai нулями, если | ai | не равно max (a1, … , an), и заменяя ai единицей в противном случае.
Даны натуральное n, действительные числа a1, … , an (все числа попарно различны). Поменять в этом массиве местами наименьший и наибольший элементы.
Даны натуральное n, действительные числа a1, … , an. Вычислить сумму тех элементов массива, индексы которых являются степенями двойки (1, 3, 9, 27, …).
Даны натуральное n, действительные числа a1, … , an. Если в результате замены отрицательных элементов массива a1, … , an их квадратами элементы будут образовывать невозрастающую последовательность, то получить произведение элементов исходного массива; в противном случае получить их сумму.
Даны натуральное число n, действительные числа a1, … , an. Найти максимальный элемент среди отрицательных элементов имеющих нечетные индексы.
Даны натуральное n, действительные числа a1, … , an. Найти произведение индексов отрицательных элементов массива.

 

Двумерные массивы

 

Матрицы

 

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

В памяти компьютера все элементы массива занимают одну непрерывную область. Двумерный массив располагается в памяти по строкам.

Двумерный массив можно представить в виде матрицы:

.

 

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

 

Для двумерных массивов:

 

var

a :array[1..n ,1..m] of <тип>;

 

Где a - имя массива;

n, m - количество строк и столбцов в массиве;

<тип> - тип элементов массива.

Количество элементов в массиве - n m.

Например:

var

mas: array [1…10,1..10] of real;

begin

 

Описан массив mas - содержащий 100 элементов вещественного типа (10 строк и 10 столбцов).

Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через const.

 

Например:

const

n = 5, m=5;

var

mas: array[1…n,1..m] of real;

begin

Описан массив mas - содержащий 25 элементов целого типа (5 строк и 5 столбцов).

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

a[i, j] - элемент стоящий на пересечении i-ой строки и j-го столбца.

a[i, i] - элементы главной диагонали.

a[i, 2] - элементы второго столбца.

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

Если количество строк равно количеству столбцов, матрица называется квадратной.

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

Все элементы главной диагонали удовлетворяют условию:

i=j

(номер строки равен номеру столбца).

 

Все элементы побочной диагонали удовлетворяют условию:

i+j=n+1

(n - количество строк и столбцов).

Элементы, расположенные над главной диагональю удовлетворяют условию:

i<j

(номер строки строго меньше номера столбца).

Элементы, расположенные под главной диагональю удовлетворяют условию:

i>j

(номер строки строго больше номера столбца).

 

Последнее изменение этой страницы: 2017-09-14

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...