Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Consp_p1.rtf
Скачиваний:
12
Добавлен:
22.08.2019
Размер:
7.3 Mб
Скачать

Сортировка массива

Задача:

Одномерный массив А(200) отсортировать по убыванию.

Решение. В цикле сравниваем поочередно два рядом стоящих элемента массива. И, если последующий элемент больше предыдущего, то меняем их местами. За один цикл от 1 до N-1 поменяются местами все элементы, значения которых удовлетворяет условию. Если же цикл поместить внутри такого же цикла, то поменяются местами все элементы и массив будет отсортирован.

С первый способ сортировки массива

REAL A(200)

WRITE(6,*)’Введите количество элементов массива А и их

*значения

READ(5,*) N,(A(I),I=1,N)

DO 8 J=1,N–1

DO 7 I=1,N–1

IF(.NOT.(A(I+1).GT.A(I))) GO TO 7 Если ложно условие, что A(I+1) больше, чем A(I), то ничего не переставлять и идти на конец цикла

Или можно записать проще: IF(A(I+1).LE.A(I)) GO TO 7

Или ещё можно записать: IF(A(I).GT.A(I+1)) GO TO 7

C Блок перестановки соседних чисел в массиве

B=A(I)

A(I)=A(I+1)

A(I+1)=B

7 CONTINUE

8 CONTINUE

WRITE(6,*)’Отсортированный массив:’

DO 28 I=1,N,2 Выводится в два столбца

28 WRITE(6,*) ’A(‘,I,’)=’,A(I),’ A(‘,I+1,’)=’,A(I+1)

PAUSE

STOP

END

Для того чтобы этой программой можно было сделать сортировку по возрастанию необходимо убрать .NOT. (или .GT. заменить .LT.).

Недостаток способа:

– для того чтобы отсортировать массив необходимо сделать очень большое количество циклов ((N–1)2 циклов).

Лучше использовать второй способ сортировки массива, который лишён указанного недостатка.

Второй способ сортировки массива:

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

С Второй способ сортировки массива

REAL A(200)

WRITE(6,*)’Введите количество элементов массива А и их

*значения

READ(5,*) N,(A(I),I=1,N)

DO 8 J=1,N–1 Задаем внешний цикл

AMA=A(J) Делаем подготовку к нахождению максимума

DO 7 I=J,N Задаем внутренний цикл

C Внутренний цикл определения максимального элемента и его номера

С Он начинается с J-того элемента и продолжается до N

IF(A(I).GT.AMA) AMA=A(I) Запоминаем максимум

7 IF(A(I).EQ.AMA) NMA=I и его номер

C Блок перестановки

B=A(J)

A(J)=AMA

A(NMA)=B

  1. CONTINUE

WRITE(6,*)’Отсортированный массив:’

DO 28 I=1,N

28 WRITE(6,*) ’A(‘,I,’)=’,A(I)

PAUSE

STOP

END

16. Конструкция if then–else if then–else – end if

Эта конструкция позволяет разветвлять программу в нескольких направлениях.

If (логическое выражение 1) then

С IF – блок

A=…

IF

DO 8 … выполняемые операторы

WRITE

READ

CALL

ELSE IF (логическое выражение 2) THEN

С ELSE IF – блок 1

……. Выполняемые операторы

…….

ELSE IF (логическое выражение N) THEN

С ELSE IF – блок N-1

……. Выполняемые операторы

…….

ELSE

С ELSE – блок

……. Выполняемые операторы

…….

END IF

Конструкция обязательно начинается с IF THEN, а заканчивается END IF. Другие блоки могут отсутствовать. Конструкция IF THEN работает следующим образом:

анализируется логическое выражение 1. Если оно истинно, то выполняются все операторы IF – блока, а затем выполнение передаётся оператору, следующему за END IF. Если логическое выражение 1 ложно, то анализируется логическое выражение 2 ELSE IF – блока. При истинном значении логического выражения 2 выполняются все операторы ELSE IF – блока 1, а затем выполнение передаётся оператору, следующему за END IF. Если логическое выражение 2 ложно, то анализируется следующее логическое выражение следующего ELSE IF – блока. Таких выражений может быть бесконечное количество. Если ни одно из логических выражений не оказалось истинным, то мы доходим до ELSE – блока и происходит выполнение всех операторов ELSE – блока.

Затем управление передается оператору, следующему после END IF.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]