Программа подсчета суммарной и средней заработной платы отдела
n=6 'размерность исходных массивов данных (до 6 сотрудников)
'исходные массивы - фамилии, отделы, зарплаты
DIM fam$(n), ot(n), zar(n)
DATA "Иванов",123,800, "Петров",564,780, "Сидоров",123,950
DATA "Ильин",123,700, "Семина",564,600, "Коваль",123,900
READ fam$(1), ot(1), zar(1), fam$(2), ot(2), zar(2), fam$(3), ot(3), zar(3)
READ fam$(4), ot(4), zar(4), fam$(5), ot(5), zar(5), fam$(6), ot(6), zar(6)
'открытие файла KADR.DAT для ввода данных
OPEN "kadr.dat" FOR OUTPUT AS 1
PRINT " Список сотрудников"
PRINT "ФИО Отдел Зарплата"
FOR i=1 TO n'запись данных в файл из массивов
WRITE #1, fam$(i), ot(i), zar(i)
PRINT fam$(i), ot(i), zar(i)
NEXT
CLOSE #1 'закрытие файла
OPEN "kadr.dat" FOR INPUT AS 1'открытие файла для просмотра
sum = 0: k = 0 'переменные для суммы и числа работников в отделе
DO WHILE NOT EOF(1)
INPUT #1, f$, o, z 'считывание данных из файла
IF o=123 THEN 'для отдела 123
sum=sum+z 'суммируется зарплата
k=k+1 'число работников
PRINT f$,o,z 'вывод сведений о сотрудниках отдела
END IF
LOOP
CLOSE #1
'вывод суммарной зарплаты отдела
PRINT "Фонд зарплаты отдела="; sum
PRINT "Средняя зарплата="; sum/k
Результат работы программы:
Список сотрудников
ФИО Отдел Зарплата
Иванов 123 800
Петров 564 780
Сидоров 123 950
Ильин 123 700
Семина 564 600
Коваль 123 900
Иванов 123 800
Сидоров 123 950
Ильин 123 700
Коваль 123 900
Фонд зарплаты отдела= 3350
Средняя зарплата= 837.5
Пример. Данные из файла KADR.DAT отсортировать по номерам отделов и занести в файл OTDEL.DAT.
Программа сортировки данных из файла KADR.DAT
DIM no(20)'массив для хранения номеров всех найденных отделов
'открытие файла KADR.DAT c номером 1 для просмотра
OPEN "kadr.dat" FOR INPUT AS 1
nn=0'переменная для подсчета числа существующих отделов
DO WHILE NOT EOF(1)'просмотр файла 1
INPUT #1, f$, o, z'считывание данных
FOR i = 1 TO nn'просмотр номеров уже найденных в файле отделов
'если такой отдел уже попадался, переход к следующей записи
IF no(i) = o THEN GOTO m:
NEXT
'если такой отдел в массиве не найден, он заносится в элемент no(nn)
nn=nn+1: no(nn)=o
m: LOOP
'сортировка номеров отделов по возрастанию
FOR i=1 TO nn-1: FOR j=i+1 TO nn
IF no(j)<no(i) THEN SWAP no(i),no(j)
NEXT j, i
KILL "otdel.dat"
'открытие файл OTDEL.DAT для добавления
OPEN "otdel.dat" FOR APPEND AS 2
FOR i = 1 TO nn'просмотр номеров отделов в массиве NN
SEEK #1, 1'переход в начало исходного файла KADR
DO WHILE NOT EOF(1)'просмотр записей в файле KADR
INPUT #1,f$,o,z'считывание данных из него
'если номера отделов в массиве и файле KADR совпадают,
'данные из файла KADR записываются в OTDEL
IF no(i)=o THEN WRITE #2, f$,o,z
LOOP
NEXT
CLOSE #2'закрытие файла OTDEL.DAT
OPEN "otdel.dat" FOR INPUT AS 2'открытие его для вывода
ot'переменная для фиксации изменения номера отдела
DO WHILE NOT EOF(2)'просмотр записей в файле
INPUT #2, f$,o,z'считывание списка сотрудников
'Если это новый отдел, запоминается (в OT) и выводится его номер
IF ot<>o THEN PRINT " Отдел "; o: ot=o
PRINT f$,o,z'вывод на экран списка сотрудников
LOOP
CLOSE'закрытие всех файлов
Результат работы программы:
Отдел 123
Иванов 123 800
Сидоров 123 950
Ильин 123 700
Коваль 123 900
Отдел 564
Петров 564 780
Семина 564 600
¶ФАЙЛЫ ПРЯМОГО ДОСТУПА. Ввод/вывод данных в файл/из файла здесь осуществляется с помощью следующих операторов.
üPUT номер_файла [,[номер_записи][,переменная]]
üGET номер_файла [,[номер_записи][,переменная]]
Если опущен параметр номер записи, будет читаться следующая запись после последнего оператора PUT/GET или запись, указанная последним оператором SEEK.
Для организации перемещения данных удобно использовать так называемые комбинированные типы данных. Это сложный тип данных, определяемый пользователем с помощью операторов:
üTYPE имя_типа
Элемент AS тип
[элемент AS тип]
. . .
END TYPE
Здесь: имя типа – имя пользовательского типа данных
элемент – имя элемента пользовательского типа
тип – указатель типа данных языка (INTEGER, LONG, SINGLE, DOUBL, STRING). Тип STRING задается в форме STRING* число_знаков_в_переменной.
Пример. Положим, структура файла данных о сотрудниках некоторой организации состоит из двух полей: символьного поля фамилий длиной до 12 букв (STRING*12) и целочисленного поля зарплаты (INTEGER). После определения пользовательского типа SOTR можно указать конкретные переменные и массивы – здесь массив ORG(50) и переменная А.
Обращение к элементам такой структуры должно осуществляться по составному имени, включающему имя переменной и через точку – имя элемента структуры. Например, имя ORG(1).FAM указывает на первый элемент массива ORG типа FAM. Здесь же показаны операторы присваивания и печати.
TYPE sotr
fam AS STRING*12
Zar AS INTEGER
END TYPE