Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
02.05.2014
Размер:
553.98 Кб
Скачать

42. Эквивалентирование текстовых переменных

С помощью оператора EQUIVALENCE можно приводить в соответствие два объекта данных текстового типа.

Если в списке оператора EQUIVALENCEописать две переменные, например А и В, то при выполнении программы в оперативной памяти ЭВМ переменной В будет соответствовать блок памяти переменной А. То есть, если переменной А присвоить какое-либо значение, то из-за того, что обе переменные занимают в памяти ЭВМ один и тот же блок, значение переменной В будет соответствовать значению переменной А и наоборот.

Пример:

CHARACTER*12 A,B*3

EQUIVALENCE(A(1:3),B)

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

Задача:

В файле DEKANATхранятся записи, в каждой записи записаны:

Фамилия и инициалы, и 4 оценки по экзаменам.

Написать подпрограмму, которая по запросу выдаёт сообщения об успеваемости студента, фамилия которого вводится с клавиатуры.

CHARACTER*12 FAM1,FAM2

OPEN (3,FILE=’DEKANAT’)

WRITE (6,*)’Введите искомую фамилию’

READ (5,’(A12)’) FAM1

Происходит считывание искомой фамилии студента. Запись READ(5,‘(A12)’)FAM1 можно заменить на следующие две строки:

READ (5,7) FAM1

7 FORMAT (A12) или 7 FORMAT(A) , что абсолютно аналогично предыдущему.

4 READ (3,8,END=1) FAM2,K1,K2,K3,K4

В этой строке из файла DEKANAT происходит считывание Ф.И.О.(переменная FAM2) и оценок за экзамены (переменные K1,K2,K3,K4) при помощи оператора FORMAT с меткой 8. При возникновении ситуации “конец файла” управление передаётся на метку 1.

  1. FORMAT(A15,4I5)

If(fam1.Eq.Fam2) write(6,9) fam2,k1,k2,k3,k4

  1. FORMAT(1X,A15,4I5)

В этой строке происходит сравнивание исходной фамилии (введённой с клавиатуры после запроса) и очередной считанной фамилии из файла DEKANAT. Если фамилии совпадают, то выводим на экран: Ф.И.О. и 4 оценки. Затем происходит переход на новую строку файла и считывание очередной фамилии и проверка её по условию.

GOTO 4

  1. STOP

END

Недостатком программы является то, что фамилия в файле и фамилия, введённая с клавиатуры, должны совпадать полностью. Если будет различие хоть в одном символе (другая буква или лишний символ пробел), то программа не выведет никакого результата (так как не выполнится условие оператора IF). Еще необходимо бы доработать программу, чтобы выводимый текст выводился с поясняющей информацией (Ф.И.О.: …, Оценка №1: …, Оценка №2: … и т.д.).

Пример данной программы не является идеальным решением этой задачи, это всего лишь простейший способ решения, призванный показать основные приёмы, которые лучше использовать в аналогичных ситуациях.

Задача:

В отдел кадров предприятия из КГБ пришла телеграмма: “Сотрудник вашего предприятия Михаил, 1962 года рождения, замешан в связях с вражеской разведкой. Используя вашу базу данных, представьте все сведения о сотрудниках по имени Михаил 1962 года рождения”.

База данных предприятия содержится в файле KADRYв виде записей:

Ф.И.О.год рождениядомашний адрестабельный № телефон40 поз.5 позиций 15 поз. 5 поз. 7 поз.

CHARACTER*40 FIO,DOM*15,TEL*7,IMJA*6/’Михаил’/ В операторе character можно не только описывать длину текстовых переменных, но и задавать значение 'Михаил' также, как и в операторе Data.

OPEN (4,FILE=’WYWOD’)

WRITE (4,*)’Сведения по вашему запросу’

OPEN (3,FILE=’KADRY’,STATUS=’OLD’)

4 READ (3,7,END=10) FIO, NGOD, DOM, NTAB, TEL

Считывает первую запись: Ф.И.О., год рождения, домашний адрес, номер по табелю, телефон.

Соседние файлы в папке Программирование на Фортране