Вывод одномерного массива
Все, сказанное о вводе массивов, можно отнести и к операторам вывода массивов, с одним важным дополнением – вывод должен быть форматным.
Очевидно, что для вывода элементов массива, так же как и для ввода, целесообразно использовать циклы.
Пример 1. Вывод всех элементов одномерного массива:
integer, parameter :: Len = 256 ! количество элементов
real, dimension(1:Len) :: array
open(1, file=’out.txt’)
write(1,40) array ! длина списка вывода равна 256
40 format(F6.2) ! длина списка спецификаций равна 1
В операторе write использовано имя массива без индексов, поэтому длина списка вывода равна длине массива, определенной в его описании. Так как эта длина превышает длину списка спецификаций формата, то список спецификаций используется многократно, причем после каждого его использования вывод начинается с новой строки. Элементы массива будут выведены «в столбик», то есть по одному элементу в строке. Для распечатки такого файла потребуется несколько листов бумаги.
Для более компактного вывода элементов массива используем повторитель перед спецификацией формата:
40 format(10F6.2)
В этом случае количество строк в файле ’out.txt’ уменьшится в 10 раз, а последняя строка содержит только 6 значений.
Пример 2. Вывод второй половины одномерного массива:
При решении этой задачи не обойтись без циклов.
integer, parameter :: Len = 256
integer::i ! индексная переменная
real, dimension(1:Len) :: array
open(1, file=’out.txt’)
doi = Len/2+1, Len
write(1,40) array(i) ! длина списка вывода равна 1
End do
40 format(10F6.2)
Количество выводимых элементов равно 128, и все они принадлежат второй половине массива. Но использование повторителя формата не спасло от вывода «в столбик» – ведь длина списка вывода равна единице, а каждый оператор write начинает вывод с новой строки. Из 10 спецификаций формата 9 не используются.
Решить проблему поможет неявный цикл:
integer, parameter :: Len = 256
Integer:: i
real, dimension(1:Len) :: array
open(1, file=’out.txt’)
write(1,40) (array(i),i=Len/2+1,Len) ! длина списка вывода равна 128
40 format(10F6.2)
Список вывода длиной 128 элементов выводится в 13 строк по 10 элементов в строке (последняя строка неполная, в ней 8 элементов)
Примеры задач.
Пример 3. Создать и вывести в два столбца целочисленный массив, значения элементов которого – квадраты чисел натурального ряда от 1 до 10
program make_array
integer, parameter :: count = 10 ! количество элементов
integer, dimension(1:count) :: Q ! целочисленный массив
integer :: i ! индексная переменная
do i=1, count
Q(i) = i**2
Enddo
open(1, file=’out.txt’)
write(1,40) Q
40 format(2I6)
Список вывода длиной 10 элементов выводится в 5 строк по 2 элемента в строке.
Пример 4. Вычислить средний балл, полученный на экзамене группой студентов, и количество студентов, чья оценка выше среднего балла. Предполагается, что студентов не больше 100.
1) Количество студентов вводится из первой строки исходного файла, а оценки студентов, представленные целыми числами, – из остальных строк. Входные данные в файле разделяются запятыми, пробелами или переводом строки. Исходные данные, подготовленные в файле 'in.txt', имеют вид:
20 50 44 37 17 14 48 39 19 30
2) Результаты выполнения программы с этими исходными данными должны иметь вид:
Оценки 10 студентов
20 50 44 37 17
14 48 39 19 30
Средняя оценка: 31.8
Количество студентов с оценкой выше средней: 5
Программа
Дата добавления: 2017-09-19; просмотров: 914;