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

Учебное пособие 1958

.pdf
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
3.16 Mб
Скачать

5. ЗАДАНИЕ № 4. ОДНОМЕРНЫЙ МАССИВ

Одномерные массивы описываются в разделе var с помощью служебного слова array. Например, вещественный массив А, имеющий размер 10 элементов, можно описать следующим образом:

Var

A: array[1..10] of real;

Рассмотрим реализацию следующей задачи: в массиве А размерностью 10 найти максимальный элемент.

Возможный вид пользовательского интерфейса приведен на рис. 7.

Рис. 7. Форма для работы с одномерным массивом

Для формы в целом в программе в разделе var можно описать глобальные переменные (размер массива – n, массив – a).

n: integer;

a: array[1..100] of real;

29

На форму помещены следующие компоненты. Компонент label1; в свойстве Caption внесена фраза:

«Введите размер массива».

Компонент edit1; в свойстве Text удалена надпись.

На форму из вкладки Additional поставлен компонент StringGrid1 для ввода элементов массива. Для данного компонента необходимо выставить:

– в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;

-в свойстве ColCount – 2;

-в свойстве RowCount – 2;

-в свойстве +Options, goEditing выставить true, чтобы можно было вводить элементы массива.

Кнопка button1; в свойстве Caption внесена фраза: «Ввод размера массива». Для данной кнопки в событии OnClick создана следующая процедура:

if edit1.text <> '' then begin

n := StrToInt(edit1.Text);

StringGrid1.RowCount:=n+1; for i:=1 to n do

StringGrid1.Cells[0,i]:=IntToStr(i);

Label2.Enabled:=true; else

MessageDlg('Ошибка, размер массива не введен', mtError, [mbOK],0);

Данная процедура вводит строку из поля edit1 (если оно не пусто) и преобразует ее в число (n). Затем переменная StringGrid1.RowCount (количество строк) получает значение n+1. В нулевом столбце компонента StringGrid1 вводятся в

цикле номера строк. Компонент Label2 сделан доступным.

30

Если размер массива не введен, то выводится сообщение об ошибке.

В компоненте Label2 в свойство Caption введена фраза «Введите элементы массива и щелкните по данной кнопке». При щелчке по данному компоненту запускается следующая процедура:

var

i,p: integer; begin p:=0;

for i:= 1 to n do

if StringGrid1.Cells[1,i] ='' then p:=1; if p = 0 then

begin

for i:=1 to n do a[i]:=StrToFloat(StringGrid1.Cells[1,i]); ShowMessage('Массив задан'); Button4.Enabled:=true;

end

else ShowMessage('Массив не задан полностью'); end;

Данная процедура сначала проверяет то, что введены все элементы массива. Если все элементы введены, то числа из ячеек компонента StringGrid1 присваиваются элементам массива а. Также становится доступной кнопка Button4 (кнопка «Поиск максимума»). Если не все ячейки заполнены, то выдается сообщение об ошибке.

На форму поставлена кнопка button4, в свойстве Caption введено «Поиск максимума». Для данной кнопки в событии OnClick может быть создана следующая процедура, которая

31

ищет максимум, выводит найденный максимальный элемент и его номер (в компонент label3):

var

i,n1: integer; max: real; begin

max := a[1]; n1:=1; For i:= 1 to n do

if max < a[i] then begin max := a[i]; n1:=i; end; label3.Caption := 'max= '+ floatToStrF(max,ffFixed,6,2)+ '

номер= '+ IntToStr(n1); end;

На форму поставлена кнопка button5, в свойстве Caption введено «Очистить». Для данной кнопки в событии OnClick может быть создана следующая процедура:

var

i, i1: integer; begin label3.Caption :=''; edit1.text:='';

for i := 0 to n+1 do for i1 := 0 to 1 do

StringGrid1.Cells[i1,i]:=''; StringGrid1.Cells [0,0]:='№ п/п'; StringGrid1.Cells [1,0]:='x'; StringGrid1.RowCount := 2; StringGrid1.ColCount := 2; Label2.Enabled:=false; Button4.Enabled:=false;

end;

32

Для формы в целом в событии OnActive создана процедура, которая задает названия граф в компоненте StringGrid1:

StringGrid1.Cells [0,0]:='№ п/п'; StringGrid1.Cells [1,0]:='x';

Для формы в целом в событии OnShow создана процедура, которая делает недоступными надпись Label2 и кнопку Button4:

Label2.Enabled:=false;

Button4.Enabled:=false;

Варианты четвертого задания по обработке одномерных массивов приведены ниже.

1.Дан массива а из n элементов, вычислить и вывести новый массив, элементы которого формируются по правилу: а1, а12, …, а12+…+аn.

2.Дан массив а из n элементов, вычислить и вывести но-

вый массив, элементы которого формируются по правилу: а12, а1а2, а1а3,…, а1аn.

3.Дан массив целых чисел K(15), найти и вывести четные числа из этого массива.

4.Найти сумму максимального и минимального элементов массива A(10), вывести сумму и найденные элементы.

5.Дан массив D(12), переписать в A целые числа, а в B - числа с дробной частью. Массивы A и B вывести.

6.Дан массив целых N(15), определить в нем количество

исумму четных чисел. Вывести результаты.

7.Дан массив Y(15), сформировать из него новый, переписав положительные элементы без изменения, а вместо отрицательных элементов - их модули. Вывести новый массив.

8.Дан массив L(15), определить количество и сумму чисел, имеющих дробную часть. Вывести результат.

9.Дан массив целых чисел M(12), определить количество

исумму нечетных чисел в массиве. Вывести результаты.

33

10.В массиве B(12) найти сумму элементов с четными номерами, а затем - с нечетными. Среди полученных сумм найти максимальную. Вывести обе суммы и максимальную сумму.

11.В массиве Z(10) найти минимальный элемент и сформировать новый массив, каждый элемент которого получится умножением элемента массива Z на его минимальный элемент. Вывести новый массив.

12.В массиве P(10) найти произведение положительных элементов и сформировать новый массив, каждый элемент которого получится в результате деления элемента массива P на это произведение. Вывести новый массив и произведение.

13. Вычислить 10 значений функции yi = xi3 - 2ai + ln| xi3| , а затем среди них найти минимальное и максимальное значение Y, а также их сумму. Вывести минимальное и максимальное значения, их сумму и массив Y.

14.В массиве Y(10) найти сумму отрицательных элементов и сформировать новый массив, у которого элемент с четным номером останется без изменений, а элемент с нечетным номером будет поделен на эту сумму. Вывести сумму и новый массив.

15.Сформировать из массива Q(10) новый, в котором каждый отрицательный элемент массива Q будет возведен в квадрат, а из каждого положительного будет извлечен квадратный корень. Вывести новый массив.

16.Сформировать новый массив из массивов Y(10) и B(10) таким образом, что нечетный элемент массива Y складывается с четным элементом массива X и наоборот: четный элемент массива Y складывается с нечетным элементом массива X. Вывести новый массив.

17.Сформировать новый массив из массивов Z(10) и B(10), в котором каждый элемент с четным номером будет представлять сумму элементов массивов Z и B (с идентичными

34

номерами ( Z2 + B2, Z4 + B4, ... ), а элемент с нечетным номером

-их разность (Z1 - B1, Z3 - B3, ... )). Вывести новый массив.

18.Сформировать новый массив из элементов массива Z(10), которые удовлетворяют условиям C1 <= | Zi | <= C2. Вывести новый массив.

19.В массиве B(10) найти сумму квадратов всех элементов с нечетными номерами и произведение модулей элементов с четными номерами. Вывести сумму и произведение.

20.В массиве X(10) определить, каким по счету идет элемент Xi = a, i=[1..20]. Если такого элемента нет, то вывести соответствующее сообщение. Если такой элемент есть, то вывести его номер.

21.Упорядочить массив K(10) по убыванию. Вывести массив К после упорядочивания.

22.Элементы массива A(10) определяются по формуле ai

= (i - 1) / (i + 1) + sin((i - 1)3 / (i + 1)), i=[1..10]. Найти макси-

мальный элемент в этом массиве. Вывести максимальный эле-

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

23.Элементы массива Q(10) определяются как ai = iesin(i + 1); i=[1..30]. Определить минимальный элемент этого массива и сумму всех его элементов. Вывести массив Q, минимальный элемент и сумму.

24.Упорядочить массив L(15) по возрастанию. Вывести массив после упорядочивания.

25.В массиве Z(10) определить число соседств двух элементов с разными знаками и число соседств двух элементов с положительными знаками. Вывести найденные количества.

26.В массиве B(10) найти разность квадрата минимального элемента и минимального из квадратов элементов, то есть

min2 (b1, ... , b20 ) – min (b12 , ... , b220 ). Вывести результат и оба минимальных элемента.

35

27.В массиве A(10) вычислить обратную величину произведения тех элементов ai , i=[1.. 10] , для которых справедливо 1 < ai < i + 10. Вывести произведение.

28.Массив L(10) состоит из нулей, единиц и двоек. Упорядочить элементы массива так, чтобы сначала шли нули, затем единицы, затем двойки. Вывести массив после упорядочивания.

29.Из массива D(10) сформировать массив С(5) такой, чтобы каждый элемент нового массива определялся по правилу

c1 = d1 + d10, с2 = d2 + d9, ck = dk + d10 - (k - 1) . Вывести новый массив.

30. В массиве C(15) подсчитать число положительных и отрицательных элементов, сформировать из них два массива, в один из которых занести положительные элементы, а в другой - отрицательные. Вывести новые массивы.

6. ЗАДАНИЕ № 5. ДВУМЕРНЫЙ МАССИВ (МАТРИЦА)

Матрицы (или двумерные массивы) описываются в разделе var с помощью служебного слова array. Например, вещественную матрицу А, имеющую размеры - 3 строки и три столбца, можно описать следующим образом:

Var

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

Рассмотрим реализацию следующей задачи: в матрице А, размер которой вводится, найти минимальный элемент и номера строк и столбцов, где он стоит.

Возможный вид пользовательского интерфейса приведен на рис. 8.

36

Рис.8. Форма для работы с матрицей

Для формы в целом в программе в разделе var можно описать глобальные переменные (размеры матрицы – n, m, массив – mas, вещественный массив имеет размер 50 на 50).

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

На форму помещены следующие компоненты. Компонент кнопка button1; в свойстве Caption внесена

фраза: «Введите размеры матрицы и щелкните по данной кнопке».

Компонент label1; в свойстве Caption внесена фраза: «Число строк».

Компонент edit1 для ввода количества строк; в свойстве Text удалена надпись.

37

Компонент label2; в свойстве Caption внесена фраза: «Число столбцов».

Компонент edit2 для ввода количества столбцов; в свойстве Text удалена надпись.

Компонент кнопка button2; в свойстве Caption внесена фраза: «Введите элементы матрицы и щелкните по данной кнопке».

Компонент label3; в свойстве Caption внесена фраза: «Вывод массива».

Компонент StringGrid1 для ввода элементов матрицы. Для данного компонента необходимо выставить:

в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;

- в свойстве ColCount – 2; - в свойстве RowCount – 2;

- в свойстве +Options, goEditing выставить true, чтобы можно было вводить элементы массива.

Компонент StringGrid2 для вывода элементов матрицы. Для данного компонента необходимо выставить:

в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;

- в свойстве ColCount – 2; - в свойстве RowCount – 2.

Компонент кнопка button4; в свойстве Caption внесена фраза: «Поиск минимального элемента».

Компонент кнопка button5; в свойстве Caption внесена фраза: «Очистить».

Для компонента button1 (кнопка «Введите размеры матрицы и щелкните по данной кнопке») в свойстве OnClick создана следующая процедура. Процедура проверяет, введены ли размеры матрицы. Если размеры введены, то их преобразуют в целые числа. Задают количества строк и столбцов для компо-

38