Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Belova_TM

.pdf
Скачиваний:
57
Добавлен:
06.05.2015
Размер:
2.46 Mб
Скачать

Программирование с использованием одномерных массивов

91

Параметрами этих процедур являются: x, y − имена динамических массивов, n – размер массивов.

Для определения длины, минимального и максимального номеров элементов динамического массива используются функции Length( ), Low( ) и High( ) соответственно. Нумерация элементов динамического массива начинается с нуля, поэтому функция Low( ) всегда возвращает значение 0.

Пример

Подсчитать сумму s элементов динамического одномерного массива mas.

var n,s:integer; mas:array of integer;

begin SetLength(mas,10);

//ввод массива

for n:= Low(mas) to High(mas) do mas[n]:=StrToInt(StringGrid1.Cells[i,0]); //вычисление суммы

s:=0;

for n:= Low(mas) to High(mas) do s:=s+mas[n];

//вывод результата

Label1.Caption:='сумма = '+IntToStr(s); end;

Пример программирования с использованием одномерного массива

Задание. Найти минимальный элемент в одномерном массиве. Задача поиска минимального и (или) максимального значений в массиве чисел весьма распространена. Типовым приемом поиска

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

1. Разработка алгоритма (рис. 5.1):

а) входные данные: маs – массив целых чисел;

б) выходные данные: min – целочисленная переменная; в) промежуточные данные: i – счетчик цикла.

92

Программирование с использованием одномерных массивов

mas

min:=mas[1]

i:=2,n

min>mas[i]

Нет

Да

min:=mas[i]

min

Рис. 5.1. Схема алгоритма программы

2. Разработка формы (табл. 5.1, рис. 5.2).

 

 

 

 

Таблица 5.1

 

 

Используемые компоненты

 

 

 

 

 

 

 

Имя

Страница

Настраи-

Значение

 

 

палитры

ваемое

 

компонента

 

компонент

свойство

 

 

1.

Form1

Caption

Поиск минимального эле-

 

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

 

 

 

 

 

 

2.

Label1

Standard

Caption

Введите элементы целочис-

 

ленного массива

 

 

 

 

 

 

 

 

 

FixedCols

0

 

3.

StringGrid1

Additional

FixedRows

0

 

RowCount

1

 

 

 

 

 

 

 

 

Options

[goEditing, goTab]

 

4.

Button1

Standard

Caption

Поиск минимума

 

5.

Label2

Standard

Caption

 

 

Программирование с использованием одномерных массивов

93

Рис. 5.2. Изображение формы

3. Текст программы:

unit Unit1; interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm) Label1: TLabel; StringGrid1: TStringGrid; Button1: TButton; Label2: TLabel;

procedure Button1Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TForm1; implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); const N=5;

94

Программирование с использованием одномерных массивов

var min, i : integer; mas:array[1..N] of integer;

begin

{ввод одномерного массива} for i:=0 to N–1 do

mas[i+1]:=StrtoInt(StringGrid1.Cells[i,0]); {поиск min}

min:=mas[1]; for i:=2 to N do

if min>mas[i] then min:=mas[i]; {вывод результата}

Label2.Caption:='минимум = '+IntToStr(min); end;

end.

Контрольные вопросы к главе 5

1.Может ли массив содержать один элемент?

2.Можно ли во время выполнения программы изменить размер массива?

3.Могут ли элементами некоторого массива быть числа 1, 1.41, 4.98, 30?

4.Верно ли, что тип элементов массива может быть любым?

5.Какой тип может иметь индекс массива?

6.Имеются описания:

type

d = (вчера, сегодня, завтра); v = array [1..30] of real;

a = array [1..5] of integer; var

mas1: d; mas2, mas3: v;

mas4: array [1..10] of real; mas5: a;

mas:array of integer;

Программирование с использованием одномерных массивов

95

Какие массивы определены? Какие значения могут принимать массивы?

7.Какие операции над массивами как единым целым допустимы в среде Delphi?

8.Дан фрагмент программы:

var

x:array [1..40] of char;

y:array [0..39] of char;

Можно ли переписать элементы массива х в массив у с помощью оператора у:=х?

9. Написать фрагмент программы ввода и вывода с помощью компонента StringGrid1 массива В, описанного следующим образом:

type T = array [1..7] of integer; var B: T;

10. Написать фрагмент программы ввода и вывода с помощью компонента StringGrid1 массива А, описанного следующим образом:

var A: array [0..5] of real;

11.Присвоить нулевые значения N элементам массива A: var A: array of real;

12.Может ли быть описан массив в разделе объявления кон-

стант?

13.Для чего предназначается компонент StringGrid?

14.Какие свойства компонента StringGrid нужно настроить для ввода и вывода элементов одномерного массива?

Задания к лабораторной работе № 5

1. Дана последовательность из 10 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами (в сумму включить и оба эти числа).

96Программирование с использованием одномерных массивов

2.Даны координаты n точек на плоскости: х1, у1, ... , хn, уn (n=10), которые являются вершинами ломаной. Найти номера 2-х точек, расстояние между которыми наибольшее. Считать, что такая пара точек единственная.

3.Дан целочисленный массив А[n]. Минимальный элемент этого массива заменить целой частью среднего арифметического всех элементов массива, остальные члены оставить без изменения.

4.Даны натуральные числа А1, ...,Аn. Определить количество членов Аk последовательности А1,...,Аn, удовлетворяющих условию

Аk<(Ak-1 + Аk+1)/2.

5. Даны натуральные числа А1,...,Аn. Определить количество

членов Аk последовательности А1,...,Аn, удовлетворяющих условию Аk>2к.

6.Даны натуральное число n и целые числа А1,...,Аn. Найти наименьшее из четных чисел в последовательности А1,...,Аn.

7.Даны натуральные n и целые числа А1,...,Аn. Найти наибольшее из нечетных и количество четных чисел, входящих в последовательность А1,...,Аn.

8.Дана последовательность из 15 целых чисел. Найти наибольшее и наименьшее число в этой последовательности и поменять эти числа местами.

9.Дана последовательность из 15 вещественных чисел. Наименьшее число в этой последовательности поменять с первым числом и наибольшее число поменять с последним числом.

10.Дан целочисленный массив А[n], среди элементов которого есть одинаковые. Создать массив из различных элементов А[n].

11.Дан массив вещественных чисел, содержащий 10 элементов. Если минимальный элемент или максимальный элемент этого массива равен 0, то поменять эти элементы местами.

12.Дан массив целых чисел, содержащий 10 элементов. Если минимальный элемент в этом массиве находится на первом месте,

амаксимальный – на последнем месте, то поменять местами эти элементы.

13.Дан массив из 15 вещественных чисел. Если минимальный элемент массива предшествует максимальному элементу, то подсчитать сумму максимального и минимального элементов.

Задания к лабораторной работе № 5

97

14.Дан массив из 15 вещественных чисел. Если максимальный элемент массива предшествует минимальному элементу, то подсчитать произведение минимального и максимального элементов.

15.Дан массив из 10 целых чисел. Вывести значение TRUE для случая, если минимальный элемент массива меньше максимального в 2 раза, и FALSE − в противном случае.

16.Дан целочисленный массив А[n]. Найти наименьшее количество элементов, которые нужно удалить из данной последовательности, чтобы осталась возрастающая последовательность.

17.Дан массив из 10 целых чисел. Если минимальный элемент массива расположен на 5 месте, а максимальный – рядом (слева или справа), то подсчитать среднее арифметическое максимального и минимального элементов массива.

18.Дан массив из 15 целых чисел. Если минимальный элемент массива меньше максимального в 3 раза, то каждый элемент массива увеличить в 3 раза.

19.Дан массив из 15 вещественных чисел. Если минимальный элемент массива находится на 2 месте, а максимальный – на 1 месте в массиве, то все элементы массива уменьшить в 2 раза.

20.Дан массив из 15 целых чисел. Если минимальный или максимальный элемент равен 0, то обнулить элементы массива, предшествующие минимальному элементу в массиве.

21.Дан массив из 15 целых чисел. Если минимальный элемент меньше максимального в 2 раза, то все элементы, предшествующие максимальному элементу, установить равными минимальному элементу.

22.Дан массив из 10 целых чисел. Если максимальный элемент находится на 2 месте, а минимальный элемент – на 5 месте, то все элементы, расположенные от минимального элемента и до конца массива, установить равными максимальному элементу.

23.Дан массив из 10 целых чисел. Если минимальный элемент находится на 1 месте, а максимальный элемент – на 2 месте, то обнулить все элементы, следующие за максимальным элементом, до конца массива.

98Программирование с использованием одномерных массивов

24.Дан массив из 10 целых чисел, среди которых могут быть одинаковые числа. Установить все элементы, имеющие наименьшее значение, равными нулю.

25.Дан массив из 10 вещественных чисел. Максимальный элемент массива увеличить в 2 раза, а минимальный элемент уменьшить в 2 раза. Вывести преобразованный массив.

26.Даны натуральные n и целые числа: А1,...,Аn. Подсчитать максимальную длину последовательности подряд расположенных элементов, имеющих одинаковые значения.

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

6. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ДВУМЕРНЫХ МАССИВОВ В СИСТЕМЕ DELPHI

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

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

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

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

Пример

const n=3; m=5; type

vec = array [0..m-1] of integer; mas = array [0..n-1] of vec; var

massiv : mas;

В данном примере объявлен двумерный массив massiv. Massiv представляет матрицу, состоящую из 3 строк и 5 столбцов.

Возможны и другие способы описания двумерных массивов:

var

massiv : array [1..3,1..5] of integer;

Так же, как и одномерные массивы, двумерные массивы можно описывать как типизированные константы:

соnst

massiv : array [1..2,1..3] of integer = ((5,8,1),(3,1,9));

100

Программирование с использованием двумерных массивов

Двумерные массивы объявляются так же, как и одномерные, за исключением того, что в квадратных скобках после зарезервированного слова array стоят два разделенных запятыми определения индексов, относящихся к двум размерностям массива. Каждое определение индекса независимо одно от другого. Индексы могут быть порядкового типа. Типы первого и второго индексов могут различаться.

По такому же принципу можно объявить не только двумерные, но и многомерные массивы. Размерность массивов ограничивает только объем памяти конкретной ЭВМ.

Пример описания трехмерных массивов a и b

type

vec = array [1..3] of integer; mas = array [1..5] of vec; tmas = array [1..8] of mas; var

a:tmas;

b:array [1..3,1..5,1..8] of integer;

Над многомерными массивами как единым целым можно выполнить три действия: операции отношения =, < >; оператор присваивания. Эти действия выполняются аналогично, как и с одномерными массивами.

В многомерных массивах последний индекс возрастает первым, например:

var

A: array [1..2,1..3] of real; A [1,1]

A [1,2]

A [1,3]

A [2,1]

A [2,2]

A [2,3]

Первый индекс обозначает номер строки в матрице, второй индекс – номер столбца. Например, запись А[2,3] делает доступным для обработки значение элемента, находящегося во второй строке третьего столбца массива А.