Программа подсчета суммарной и средней заработной платы отдела

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

PRINT

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

Наши рекомендации