Функции работы с символьными величинами
Символьный тип данных Символьный тип данных используется для хранения и обработки последовательностей символов из компьютерного алфавита – строк символов. Один символ занимает один байт памяти. Его внутреннее представление соответствует используемой таблице кодировки. В системах программирования в среде ОС MS Windows это код ASCII. Символьная константа – строка, заключенная в апострофы или двойные кавычки. Например: `constant` или ``constant`` . Если внутри строки используется символ апострофа или кавычек, то ограничитель должен быть другим символом. Например: ``It`s constant``. Символьные переменные объявляются оператором character: Character[([len=]длина)] список переменных Пример: character(len=20) str1, str2 или то же самое: character(20) str1, str2 characters В последнем случае s – односимвольная величина. Длина символьного объекта (константы или переменной) находится в пределах от 0 до 32767. Для указания длины можно использовать именованную константу. Например: integer, parameter:: n=10 character (len=n) word character (len=2*n) longword Строковую переменную можно инициализировать при объявлении: character (len=10):: st=’price’ В результате значение переменной st станет следующим: ‘price^^^^^`. В конце добавятся 5 хвостовых пробелов. Если же переменную st описать следующим образом: character (len=3):: st=’price’ , то в переменную войдут лишь первые три символа: `pri`. Символьная именованная константа объявляется с атрибутом PARAMETR. Например: character (10), parameter:: day=`Sunday`. Константа получит 4 хвостовых пробела. Если же константу описать так: character (*), parameter:: day=`Sunday`, то ее длина будет равна 6, т.е. длине константы. Выделение подстроки. Символы в строке нумеруются начиная с единицы. Пусть объявлена переменная: character (8):: St=’COMPUTER’ Внутренняя нумерация символов в ней будет следующей:
Подстрока – это часть последовательно расположенных символов строки. Формат идентификации подстроки следующий: Имя_строки([first]:[last]) , где first – номер первого символа подстроки, last – номер последнего символа подстроки. По умолчанию first=1, last = длине строки. Например: St(1:5) – первые 5 символов строки (‘COMPU’). То же самое обозначает St(:5). St(4:8) равносильно обозначению St(4:). Один символ рассматривается как подстрока с совпадающими значениями first и last. Например: St(1:1) – первый символ, St(5:5) – пятый символ и т.д.
Массивы строк–этопоследовательность пронумерованных строк.Приведем примеры описания массива строк. character(100), dimension(50)::spisok - массив из 50 строк длиной 100 символов. Тот же самый объект можно описать так: character(100) spisok(50). Далее в программе могут использоваться следующие обозначения: spisok(1) – первая строка, spisok(20) – 20-я строка, spisok(5)(1:1) – первый символ пятой строки, spisok(100)(:20) – первые 20 символов 100-й строки. Функции определения длины строки. Различаются понятия: длина строки по описанию и длина строки по присвоенному значению. Вторая величина не учитывает хвостовых пробелов. LEN(string) – функция определения длины строки по описанию; LEN_TRIM(string) – функция определения длины строки без хвостовых пробелов. Примеры использования функций: character (10):: st=’COMPUTER’ print *, len(st) ! результат: 10 print *, len_trim(st) ! результат: 8 Пример 1: подсчитать число букв ‘a’ в данной строке. character (20) str print *, ‘введите строку:’ read *, str k=0 do i=1, len_trim(str) if(str(i:i)= = ‘a’) k=k+1 Enddo print *,’k=’, k End Операция конкатенации – объединение строк. Знак конкатенации – // (два слэша): строка // строка В результате операции получается строка с суммарной длиной операндов. Символьный оператор присваивания имеет вид: символьная переменная = символьное выражение Например: character(20) st1 character(9):: st2=’Microsoft’, st3=’Office’ st1=st2//’_’//st3 !результат: Microsoft_Office Пример 2. Из строки S выбрать все цифры и построить из них строку S1, сохраняя последовательность. character (10) S, S1 integer k,i read *,S ! вводим: ab1c23d4 k=1 doi=1,len_trim(S) if (S(i:i)>=’0’ .and. S(i:i)<=’9’) then S1(k:k)=S(i:i) k=k+1 Endif Enddo print *, S1 End Встроенные функции обработки символьных данных Помимо функций LEN и LEN_TRIM, которые описывались выше, в Фортране имеется еще ряд функций работы с символьными величинами. Некоторые из них описаны в таблице. Замечание: С обозначает символьную величину, I – целую величину, 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. Составить программу преобразования строки, содержащей последовательность цифр, в соответствующее целое число.
Файлы Фортрана В программах на Фортране используются внутренние файлы и внешние файлы. В качестве внутреннего файла может выступать символьная строка или символьный массив. Внешний файл – это поименованная область во внешней памяти ЭВМ . Внешние файлы используются для длительного хранения данных на магнитных, оптических или флэш-носителях, а также для передачи данных между оперативной памятью и устройствами ввода-вывода. Далее речь будет идти только о внешних файлах. Чтение (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 не является обязательным. Структура файла. Содержание файла – последовательная цепочка записей на устройстве. В памяти существует ячейка, в которой хранится файловый указатель (ФУ) на текущую запись файла. Файловый указатель устанавливается на запись, которая будет читаться при выполнении команды чтения или на ту позицию в файле, куда будет произведена запись.
Файл заканчивается специальным кодом «конец файла». При установке ФУ на конец файла логическая функция EOF(номер устройства) принимает значение .TRUE. (EOF – end of file). Для файлов любых типов действуют следующие правила: – при открытии файла ФУ позиционируется на первую запись файла, если файл не пустой, или на конец файла, если в файле нет записей; – при выполнении оператора REWIND n ФУ с любой текущей позиции устанавливается на первую запись файла (n – номер устройства); – в результате выполнения оператора BACKSPASE n ФУ перемещается на одну запись назад. Файлы последовательного доступа допускают лишь последовательное чтение записей, начиная с первой, в порядке возрастания номеров и добавление новых записей в конец файла. Нельзя вносить изменения в отдельную запись внутри файла. Если это сделать, то все последующие записи в файле исчезнут (выставится код «конец файла»). Файлы прямого доступа допускают прямую установку ФУ на любую запись по ее номеру с последующим чтением или изменением этой записи. Форматы файлов. Ввод и вывод данных могут происходить либо без преобразования формы их представления, либо с преобразованием формы. По форматам представления данных различаются файлы : – форматные (текстовые, ASCII-файлы); – двоичные; – неформатные. Ввод-вывод форматных файлов происходит с преобразованием представления данных. Ввод-вывод двоичных и неформатных файлов происходит без преобразования.
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Почему стероиды повышают давление?: Основных причин три... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (663)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |