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

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

Задача:

Одномерный массив А(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

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

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

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

Соседние файлы в папке Программирование на Фортране