Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы с ответами ЯП.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
231.17 Кб
Скачать

13) Принципы работы с массивами (на примере е97).

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

Для работы с элементами массива достаточно знать адрес первого элемента и их количество. Номер элемента массива называют его индексом. Чаще всего при решении задач с массивом его элементы просматриваются поочередно, с первого до последнего.

Типовые задачи на обработку массивов данных:

  • поиск элементов с определенными свойствами;

  • сортировка (расположение в порядке возрастания или убывания);

  • изменение элементов по определенному правилу;

  • заполнение массива по определенному правилу.

На примере Е97 можно рассмотреть следующий пример решения одной из таких задач.

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

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

План решения задачи можно оформить в виде некого алгоритма действий, который описан ниже.

1. i := 2

2. max := 1

3. otr := 0

4. Если a[1]<0, то k:=1, otr:= 1.

5. Сравнить i с n.

6. Если i>n, перейти к п. 11.

7. Если a[i]<0 и otr=0, то k:=i, otr:= 1.

8. Если a[i]>a[max], то max := i.

9. i := i + 1.

10. Перейти к п. 5.

11. vsp := a[k].

12. a[k] := a[max].

13. a[max] := vsp.

14. Стоп.

После чего перейдем к распределению памяти

Сама же программа с подробными комментариями, которые ссылаются уже на составленный алгоритм действий.

Адрес Команда Действие Замечания

0000 01D5 2 => (R1) i := 2

0002 0002

0004 0103 R0 => R3 адрес максимального элемента

0006 02D1 R1 := R1 + 2 адрес otr

0008 0002

000A 01D5 0 => (R1) otr := 0

000C 0000

000E 04D4 сравнить a[1] с 0 (R0) - 0

0010 0000

0012 2D06 если a[1]>=0, переход на 6 байт

0014 0106 R0 => (R2) адрес первого отрицательного элемента

0016 01D5 1 => (R1) otr := 1

0018 0001

001A 02D2 R2 := R2 + 2 адрес n

001C 0002

001E 03D1 R1 := R1 - 2 адрес i

0020 0002

0022 02D0 R0 := R0 + 2 адрес 2-го элемента массива

0024 0002

0026 0456 сравнить (R1) с (R2) (i с n) (R2) - (R1)

0028 3D32 если <0, переход на 32 байта переход на обмен значений

002A 02D1 R1 := R1 + 2 адрес otr

002C 0002

002E 04D4 сравнить (R0) c 0 (R0) - 0

0030 0000

0032 2D14 если >= 0, переход на 14 байт

0034 04D5 сравнить (R1) c 0 (R1) - 0

0036 0000

0038 4D0E если <>0, переход на E байт

003A 03D2 R2 := R2 - 2 адрес k

003C 0002

003E 0106 R0 => (R2) адрес первого отрицательного элемента

0040 01D5 1 => (R1) otr := 1

0042 0001

0044 02D2 R2 := R2 + 2 адрес n

0046 0002

0048 0447 ср. (R0) с (R3) (a[i] c a[max]) (R3) - (R0)

004A 2D02 если >=0, переход на 2 байта если a[max]>=a[i]

004C 0103 R0 => R3 адрес максимального элемента

004E 03D1 R1 := R1 - 2 адрес i

0050 0002

0052 02D5 (R1) := (R1) + 1 i:= i + 1

0054 0001

0056 02D0 R0 := R0 + 2 адрес i-го элемента

0058 0002

005A 1DCA переход на -36(16) байт на сравнение i с n

005C 03D2 R2 := R2 - 2 адрес k

005E 0002

0060 0162 (R2) => R2

0062 0161 (R2) => R1 vsp := a[k]

0064 0176 (R3) => (R2) a[k] := a[max]

0066 0117 R1 => (R3) a[max] := a[k]

0068 0F00 стоп