Смекни!
smekni.com

Методические указания к выполнению лабораторных работ Фрейз И. И (стр. 5 из 11)

22.

23.

24.

25.

26.

27.

28.

x>1.

29.

30. arthx=

31. arthx=

32.

Лабораторная работа №5. Одномерные массивы

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

До настоящего момента мы использовали в программах простые переменные стандартных типов данных. В этом случае каждой области памяти для хранения одной величины соответствует свое имя. Если переменных много, программа, предназначенная для их обработки, получается длинной и однообразной. Поэто­му в любом процедурном языке есть понятие массива — ограниченной совокуп­ности однотипных величин. Элементы массива располагаются в памяти непре­рывным блоком и имеют одно и то же имя (рис.). Различают элементы по порядковому номеру (индексу).

Пять простых переменных:

a

b

c

d

e

Массив из пяти элементов:

a[1]

a[2]

a[3]

a[4]

a[5]

a

Рис. Простые переменные и массив

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

Чтобы описать массив, надо сообщить компилятору:

o сколько в нем элементов;

o какого типа эти элементы;

o как они нумеруются.

Массив не является стандартным типом данных, поэтому он задается в разделе описания типов:

type имя_типа = аrrау [тип_индекса] of тип_элемента

Здесь tуре — признак начала раздела описания типов, array и of — ключевые сло­ва, тип индекса задается в квадратных скобках, например:

type mas = аrrау [1 .. 10] of rеаl;

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

var a, b : mas;

Компилятор, встретив такой оператор, выделит по 60 байт под каждый из масси­вов а и b (10 элементов по 6 байт). К элементу массива обращаются, указав его имя, за которым в квадратных скобках записывается порядковый номер элемента:

а[4] b[i]

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

ВНИМАНИЕ: Тип элементов массива может быть любым, кроме файлового, тип индексов — интервальным, перечисляемым или byte. При описании типа индексов можно использовать только константы или константные выражения. Переменные не допускаются, потому что место под массив резервируется до выполнения программы.

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

const n = 100:

var x,у : array [1 . . n] of integer;

С массивами в целом можно выполнять только одну операцию — присваивание. При этом массивы должны быть одного типа, например:

х := у;

Задача 4.1. Количество элементов между минимумом и максимумом

………………………………………………………………………………………………………………..

Написать программу, которая для 10 целочисленных элементов определяет, сколько положительных элементов располагается между максимальным и минимальными элементами.

Запишем алгоритм в самом общем виде:

1. Считать исходные данные в массив.

2. Определить, где расположены его максимальный и минимальный элементы, то есть найти их индексы.

3. Просмотреть все элементы, расположенные между ними. Если элемент мас­сива больше нуля, увеличить счетчик элементов на единицу.

Перед написанием программы полезно составить тестовые примеры, чтобы более наглядно представить себе алгоритм. Ниже представлен массив из 10 чисел и обо­значены искомые величины:

6

-8

15

9

-1

3

5

-10

12

2

макс

+

+

+

мин

Для этого примера программа должна вывести число 3.

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

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

Например, сначала первый элемент сравнивается со вторым, затем тот из них, который оказался больше — с третьим, тот, который оказался больше — с четвер­тым, и так далее до последнего элемента.

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

Сформулируем алгоритм поиска максимума:

1. Принять за максимальный первый элемент массива.

2. Просмотреть массив, начиная со второго элемента.

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

Для решения поставленной задачи нам требуется знать не значение максимума, а его положение в массиве, то есть индекс:

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

Запишем уточненный алгоритм решения нашей задачи:

1. Определить, где в массиве расположены его максимальный и минимальный элементы:

o задать начальные значения индексов искомых максимального и минималь­ного элементов;

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

2. Определить границы просмотра массива для поиска положительных элементов, находящихся между его максимальным и минимальным элементами:

o если максимум расположен в массиве раньше, чем минимум, принять левую границу просмотра равной индексу максимума, иначе — индексу минимума;

o если максимум расположен в массиве раньше, чем минимум, принять пра­вую границу просмотра равной индексу минимума, иначе — индексу мак­симума.

3. Определить количество положительных элементов в найденном диапазоне:

o обнулить счетчик положительных элементов;

o просмотреть массив в указанном диапазоне. Если очередной элемент боль­ше нуля, увеличить счетчик на единицу.

Для экономии времени значения элементов массива при отладке задаются путем инициализации.

program num_positive_1;

uses crt;

const

n=10;

a:array[1..n] of integer=(1,3,-5,1,-2,1,-1,3,8,4);

var

i:integer; {индекс текущего элемента}

imax:integer; {индекс максимального элемента}

imin:integer; {индекс минимального элемента}

ibeg:integer; {начало интервала}

iend:integer; {конец интервала}