Мегаобучалка Главная | О нас | Обратная связь


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



2016-01-26 663 Обсуждений (0)
Функции работы с символьными величинами 0.00 из 5.00 0 оценок




Символьный тип данных

Символьный тип данных используется для хранения и обработки последовательностей символов из компьютерного алфавита – строк символов. Один символ занимает один байт памяти. Его внутреннее представление соответствует используемой таблице кодировки. В системах программирования в среде ОС 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’

Внутренняя нумерация символов в ней будет следующей:

C O M P U T E R

Подстрока – это часть последовательно расположенных символов строки. Формат идентификации подстроки следующий:

Имя_строки([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 – строку.

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

Вид функции Назначение функции
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 больше длинs str2, иначе - .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. Составить программу преобразования строки, содержащей последовательность цифр, в соответствующее целое число.

 

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

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

Чтение (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-файлы);

– двоичные;

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

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

 



2016-01-26 663 Обсуждений (0)
Функции работы с символьными величинами 0.00 из 5.00 0 оценок









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

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (663)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)