Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_3.doc
Скачиваний:
33
Добавлен:
13.03.2016
Размер:
158.72 Кб
Скачать

Функции работы с символьными величинами

Вид функции

Назначение функции

IACHAR(c)

Возвращает ASCII–код символа

ICHAR(c)

Возвращает код символа из кодировки, поддерживаемой операционной системой

ACAR(i)

Возвращает символ типа CHARACTER(1) сASCII–кодом, равнымi

CHAR(i[,kind])

То же, что ACHAR, но позволяет задать параметр разновидности символьного типа

LGE(str1, str2)

Возвращает .TRUE., если длинаstr1 больше или равна длинеstr2, иначе - .FALSE.

LGT(str1, str2)

Возвращает .TRUE., если длинаstr1 больше длинsstr2, иначе - .FALSE.

LLE(str1, str2)

Возвращает .TRUE., если длинаstr1 меньше или равна длинеstr2, иначе – .FALSE.

LLT(str1, str2)

Возвращает .TRUE., если длинаstr1 , меньше длиныstr2, иначе – .FALSE

INDEX(str1, str2 [,back])

Номер позиции первого вхождения str2 вstr1. Еслиback= .false. или отсутствует, то поиск происходит слева, еслиback=.true., то справа

REPEAT(str, N)

Возвращает строку, в которой Nраз повторяетсяstr

Пример 3. Дано целое число. Требуется перевести его в символьное представление, т.е. получить строку, состоящую из тех же цифр, что и данное число. Например, из числа 32564 получить строку ‘32564’.

program numch

integer:: num, k, p

character(10) string

read *, num

k=num; p=0

do while k>0 ! Определение количества цифр

k=k/10; p=p+1

enddo

call numchar(num, p, string)

print *, string

end program numch

subroutine numchar(n, m, c)

integer n !исходное число

integer m !количество цифр

character(*) c !выходная строка

integer i,j,k

k=n

do i=m,1,-1 !позиция символа

j=MOD(k,10) !выделение разряда единиц

c(i:i)=char(j+48) !занесение цифры в строку

k=k/10 !отбрасывание разряда единиц

enddo

end subroutine

Код символа ‘0’ (ноль) равен 48. Поскольку цифры в кодовой таблице расположены последовательно по возрастанию, то код любого цифрового символа равен 48 плюс значение соответствующей цифры. Обратите внимание на то, что параметр символьного типа в подпрограмме может быть описан с произвольной длиной (len=*).

Упражнения

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

  2. Перевернуть данную строку.

  3. В данную строку S1 вставить строку S2 начиная с указанной позиции.

  4. В данной строке удалить N символов начиная с позиции K.

  5. В данной строке вставить пробел после каждого символа.

  6. В данной строке удалить все пробелы.

  7. Составить программу преобразования строки, содержащей последовательность цифр, в соответствующее целое число.

3.13. Файлы Фортрана

В программах на Фортране используются внутренние файлы и внешние файлы. В качестве внутреннего файла может выступать символьная строка или символьный массив. Внешний файл – это поименованная область во внешней памяти ЭВМ . Внешние файлы используются для длительного хранения данных на магнитных, оптических или флэш-носителях, а также для передачи данных между оперативной памятью и устройствами ввода-вывода. Далее речь будет идти только о внешних файлах.

Чтение (read) данных из внешнего файла и занесение их в оперативную память называются вводом. Обратная ситуация: запись (write) данных из оперативной памяти во внешний файл называется выводом.

Каждому используемому в программе файлу ставится в соответствие свой номер устройства, который может лежать в диапазоне от 0 до 32767 или обозначаться * (звездочкой). При вводе данных номера устройств 0, 5, а также * связаны с клавиатурой. При выводе данных номера устройств 0, 6, * связаны с монитором (экраном). При выполнении любой программы файлы клавиатуры и монитора всегда открыты. Файлы на устройствах внешней памяти требуют открытия в программе.

Открытие файла. Открытие файла происходит при выполнении оператора OPEN. При этом создается устройство с заданным номером N и к нему присоединяется внешний файл, имя которого указано опцией file= имя файла:

OPEN(N, file= имя_файла)

Имя файла может быть задано в форме символьной константы или символьной переменной. Например:

open(2, file=’d:\a.txt’)

В операторе OPEN может быть указано 17 различных опций. Значения опций, которые явно не указываются, принимаются «по умолчанию». Опции записываются через запятую с указанием после знака «=» значения опции. Перечислим некоторые опции оператора OPEN.

Опция ACTION определяет возможные действия с файлом:

‘READ’ – только для чтения,

‘WRITE’ – только для записи,

‘READWRITE’ – для чтения и записи (по умолчанию).

Опция FORM определяет формат файла. Есть три варианта значений опции:

‘BINARY’ – двоичный файл,

‘FORMATTED’ – форматный (по умолчанию),

‘UNFORMATTED’ – неформатный.

Опция ACCESS определяет способ доступа к файлу. Возможные значения:

‘DIRECT’ – прямой доступ,

‘SEQUENTIAL’ – последовательный доступ (по умолчанию),

‘APPEND’ – последовательный с добавлением данных в конец файла.

Опция STATUS:

‘OLD’ – указывает, что файл уже существует на устройстве,

‘NEW’ – файл новый, т.е. не должен существовать.

“UNKNOWN” – если файл уже существует, то он открывается, если нет, то создается (по умолчанию).

Опция IOSTAT = iostat – целая переменная, возвращающая 0 при отсутствии ошибок выполнения оператора OPEN, или номер возникшей ошибки.

Пример 1

Character(20) fname

Integer(1) ios

Print *, ‘Введите имя файла’

Read *, fname

! Открывается существующий двоичный файл только для ! чтения

Open(1,file=fname, action=’read’, status=’old’, & form=’binary’, iostat=ios)

! В случае ошибки будет выдано сообщение

If (ios .NE. 0) print *, ‘ошибка при открытии файла’

Закрытие файла происходит при выполнении оператора CLOSE(N). Оператор отсоединяет файл от устройства номер N и закрывает это устройство. При нормальном завершении программы происходит автоматическое закрытие всех открытых в ней файлов. Поэтому явное присутствие в программе операторов CLOSE не является обязательным.

Структура файла. Содержание файла – последовательная цепочка записей на устройстве. В памяти существует ячейка, в которой хранится файловый указатель (ФУ) на текущую запись файла. Файловый указатель устанавливается на запись, которая будет читаться при выполнении команды чтения или на ту позицию в файле, куда будет произведена запись.

Запись 1

Запись 2

…..

Запись N

Конец файла

↑ (ФУ)

Файл заканчивается специальным кодом «конец файла». При установке ФУ на конец файла логическая функция EOF(номер устройства) принимает значение .TRUE. (EOF – end of file). Для файлов любых типов действуют следующие правила:

– при открытии файла ФУ позиционируется на первую запись файла, если файл не пустой, или на конец файла, если в файле нет записей;

– при выполнении оператора REWIND n ФУ с любой текущей позиции устанавливается на первую запись файла (n – номер устройства);

– в результате выполнения оператора BACKSPASE n ФУ перемещается на одну запись назад.

Файлы последовательного доступа допускают лишь последовательное чтение записей, начиная с первой, в порядке возрастания номеров и добавление новых записей в конец файла. Нельзя вносить изменения в отдельную запись внутри файла. Если это сделать, то все последующие записи в файле исчезнут (выставится код «конец файла»).

Файлы прямого доступа допускают прямую установку ФУ на любую запись по ее номеру с последующим чтением или изменением этой записи.

Форматы файлов. Ввод и вывод данных могут происходить либо без преобразования формы их представления, либо с преобразованием формы. По форматам представления данных различаются файлы :

– форматные (текстовые, ASCII-файлы);

– двоичные;

– неформатные.

Ввод-вывод форматных файлов происходит с преобразованием представления данных. Ввод-вывод двоичных и неформатных файлов происходит без преобразования.