- •Лекция 3
- •3. Алгоритмический язык фортран /3,5,11/
- •3.1. Историческая справка
- •1978 Г., Фортран 77.
- •3.2. Элементы языка Фортран
- •3.2.1. Алфавит, форматы записи программы
- •3.2.2. Имена, объекты данных, атрибуты
- •3.2.4. Программные единицы
- •3.3. Порядок следования операторов и метакоманд в программной единице
- •3.4. Организация данных
- •3.4.1. Типы данных
- •3.4.2. Описание несимвольных типов данных
- •3.4.3. Буквальные (неименованные) константы
- •3.4.4. Задание именованных констант
- •3.4.5. Задание начальных значений переменных
- •3.4.6. Символьные данные
- •3.5. Выражения, операции и присваивания
- •3.5.1. Арифметическое выражение
- •Integer(2)
- •Integer(4)
- •3.5.2. Выражения отношения и логические выражения
- •3.5.3. Правила вычисления выражений
- •3.5.4. Константные и описательные выражения
- •3.6. Управляющие операторы и конструкции
- •3.6.2. Конструкция select case
- •1 Continue
- •3.6.5. Операторы pause, stop, end
- •3.7. Форматный ввод-вывод
- •3.7.1. Вводный комментарий
- •3.7.2. Оператор format
- •3.7.3. Дескрипторы данных
- •3.7.4. Дескрипторы управления
- •3.7.5. Задание формата в операторах ввода-вывода
- •20 Format (f5.0, 2p, 2f5.0, 3p, f5.0)
- •21 Format (1x, 2p, e10.3, 3x, 3p, f10.3)
- •3.7.6. Списки ввода-вывода
- •3.7.7. Управляемый списком ввод-вывод
- •Namelist / имя списка b/b / список переменных &
- •24.000000 Qwertyuiop sub
- •3.8. Массивы
- •3.8.1. Описание размерности статических массивов
- •3.8.2. Сечение массива
- •3.8.3. Присваивание значений элементам массива
- •Where (логическое выражение - массив) присваивание массива
- •3.8.4. Динамические массивы
- •Integer n, m, kp
- •Integer I
- •Interface
- •3.8.5. Массивы – формальные параметры процедур
- •Integer n, m, j
- •Integer n, I, j
- •Interface
- •3.9. Файлы Фортрана
- •3.9.1. Основные понятия
- •3.9.2. Операции над внешними файлами
- •3.9.3.Операторы передачи данных
- •Endfile u
- •3.9.4. Порядок выполнения передачи данных
- •3.9.5. Операторы подсоединения устройств к файлам
- •24.000000 Qwertyuiop sub
- •3.9.6. Операторы позиционирования файла
- •3.10. Встроенные функции и процедуры
3.6.2. Конструкция select case
<имя:> SELECT CASE (тест-выражение)
CASE (СП1) <имя>
<БЛОК1>
<CASE (СП2) <имя>
<БЛОК2>>
............................
<CASE DEFAULT <имя>
<БЛОКn>>
END SELECT <имя>
Пример. Найти число положительных, отрицательных и нулевых элементов целочисленного массива.
program yok2
integer a(15), ap/0/, ae/0/, az/0/, i ! описание и инициализация данных
print *, 'Input a(15)' ! вывод сообщения
read *, (a(i), i=1,15) ! ввод массива:
! -2 10 -3 0 3 14 -7 0 4 12 0 8 1 0 2
! определение числа положительных ap, отрицательных ae и нулевых az
! элементов в массиве а
i=1 ! подготовка цикла
1 continue ! точка возврата на повторение цикла
select case (a(i)) ! использование конструкции SELECT CASE
case (1:) ! определение количества
ap=ap+1 ! положительных чисел
case (:-1) ! определение количества
ae=ae+1 ! отрицательных чисел
case (0) ! определение количества
az=az+1 ! чисел, равных нулю
end select
i=i+1 ! увеличение счетчика цикла
if (i<=15) goto 1 ! проверка условия конца цикла
print *, ap,'(>0)', ae,'(<0)', az,'(=0)' ! вывод результатов:
end program yok2 ! 8(>0) 4(<0) 3(=0)
3.6.3. Операторы DO, EXIT и CYCLE
Оператор цикла с известным числом повторений:
<имя:> DO v = m1 ,m2 ,m3
БЛОК
END DO <имя>
Логический оператор цикла:
<имя:> DO WHILE (ЛВ)
БЛОК
END DO <имя>
Оператор EXIT <имя>
Оператор CYCLE <имя>
Пример использования операторов цикла. Вычислить сумму элементов главной диагонали матрицы аr. Найти значение квадратного корня из числа b заданной точностью . Вычислить сумму элементов одномерного массива а, значения которых больше 5 (вычисления завершаются при обнаружении нулевого элемента).
program yok3
integer :: a(10), summa = 0, i ! описание и
real :: b, eps=0.001, x0, x1 ! инициализация
real ar(5,5), sumar /0.0/ ! переменных
! ввод исходных данных
print *, 'Input real array 5*5' ! вывод сообщения
read *, ar ! ввод двухмерного массива по столбцам
print *, 'Input real x, x0 (<>0)' ! вывод сообщения
read *, b, x0 ! ввод числа b и примерного значения корня из b
print *, 'Input integer array a(10) ' ! вывод сообщения
read *, (a(i), i=1,10) ! ввод элементов одномерного массива
do j=5,1,-1 ! вычисление суммы
sumar= sumar + ar(j,j) ! элементов главной диагонали
end do ! матрицы аr
! вычисления квадратного корня из числа b с заданной точностью
if (x0==0.) then ! проверка: исключение
goto 1 ! деления на 0
else
x1=(x0+b/x0)/2 ! квадратный корень x из числа b
do while(abs(x1-x0).gt.eps) ! вычисляется по формуле
x0=x1 ! x xi=0,5(xi-1 + b/xi-1)
x1=(x0+b/x0)/2 ! пока |xi - xi-1| >
end do
x=x1 ! присвоение значения корня
end if