Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 22:50, курсовая работа
Введение файлового типа в язык ПАСКАЛЬ вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.
Файл определяет упорядоченную совокупность произвольного числа однотипных компонент.
I. Теоретическая часть 3
1.1. Основные процедуры для работы с файлами 3
1.2. Текстовые файлы 5
1.3. Типизированные файлы 8
II. Практическая часть 10
При открытии файла резервируется буфер. Размер буфера кратен длине записи. При чтении, если буфер пуст, то инициируется чтение с диска, такого количества записей, сколько вмещает буфер. Затем из буфера запись переносится в поле вводимой переменной. Если при инициации чтения буфер не пуст, то происходит пересылка записи из буфера в память. При выводе данные накапливаются в буфере и только при полном заполнении буфера происходит перенос из буфера на диск.
Компонентами файла могут быть все скалярные типы, а из структурированных - массивы, множества, записи. Но конструкция "файл файлов" недопустима.
Все операции над компонентными файлами производятся с помощью стандартных процедур:
Reset, Rewrite, Read, Write, Close.
Для типизированных файлов обе процедуры Reset и ReWrite устанавливают режим «чтение/запись», т.е. независимо от выбора процедуры открытия, файл открывается и для чтения, и для записи. Если процедурой ReWrite открывается ранее существовавший файл, то он стирается.
Для ввода - вывода используются процедуры:
Read(f,X);
Write(f,X);
Где f - имя логического файла, Х - либо переменная, либо массив, либо строка, либо множество, либо запись с таким же описанием, какое имеет компонента файла.
Выполнение процедуры Read(f,X) состоит в чтении с внешнего устройства одной компоненты файла и запись ее в X. Повторное применение процедуры Read(f,X) обеспечит чтение следующей компоненты файла и запись ее в X.
Выполнение процедуры Write(f,X) состоит в записи X на внешнее устройство как одной компоненты. Повторное применение этой процедуры обеспечит запись X как следующей компоненты файла.
Для работы с компонентными файлами введена расширенная форма операторов ввода и вывода:
Read(f,X1,X2,...XN)
Write(f,X1,X2,...XN)
Здесь f - компонентный файл, а переменные Х1, Х2,...ХN должны иметь тот-же тип, что и объявленный тип компонент файла f.
Используются следующие процедуры и функции для прямого доступа к компонентам типизированного файла.
FileSize
FileSize (var f): LongInt возвращает число записей компонентов в открытом файле f.
FilePos
FilePos (var f): LongInt возвращает номер записи компонента в открытом файле f, предшествующий тому, который будет считан или записан последующей операцией ввода-вывода.
Seek
Seek (var f; N: LongInt) устанавливает текущим компонентом в открытом файле f компонент с номером N, отсчитанным от нулевого (доступ к первой записи Seek(f, 0)). Назначенный компонент будет считан или записан последующей операцией ввода-вывода.
Описать структуру с именем WORKER, содержащую следующие поля:
NAME – фамилия и инициалы работника;
POST – название занимаемой должности;
YEAR – год поступления на работу;
ZARPL – массив ежемесячных зарплат за год
1. написать программу, выполняющую следующие действия:
Ввод с клавиатуры данных в массив TABL, состоящих из 10 структур типа WORKER.
Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец массива
Сортирует записи в порядке возрастания среднемесячной зарплаты
Вывод на дисплей информации о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, то вывести соответствующее сообщение
2. Создать типизированный файл TABL, состоящий из 10 структур типа WORKER.
отсортировать записи в файле в порядке возрастания среднемесячных зарплат
Вывести в новый типизированный файл информацию о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, вывести соответствующее сообщение.
Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец файла.
3. Создать текстовый файл TABL, состоящий из 10 структур типа WORKER.
Вывести в новый текстовый файл информацию о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, вывести соответствующее сообщение.
Ввести в файл записи о поступивших на работу в конец файла ( любое количество).
1. написать программу, выполняющую следующие действия:
Ввод с клавиатуры данных в массив TABL, состоящих из 10 структур типа WORKER.
Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец массива
Сортирует записи в порядке возрастания среднемесячной зарплаты
Вывод на дисплей информации о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, то вывести соответствующее сообщение
program ex1;
uses crt;
const n=10; m=12;
type
worker=record
name: string [10];
post: string [15];
year: integer;
zrpl: array [1..m] of integer;
end;
var
z: worker;
w: array [1..n] of worker;
b: array [1..n] of integer; {massiv srednemes zarpl}
i, j, y, Fa, max, nmax, F, x, q: integer;
function sr ( T:worker): integer;
var
s: integer;
ii:integer;
begin
s:= 0;
for ii:= 1 to m do
s:= s+ T.zrpl[ii];
sr:= s div m; {writeln ('sr=', sr:2);} end;
begin
clrscr; textcolor (white);
for i:= 1 to n do begin
writeln ('vvedite familii');
readln ( w[i].name);
writeln ('vvedite dolgnost');
readln (w[i].post);
writeln ('vvedite god postypleniya');
readln (w[i].year);
writeln ('vvedite v poslednee pole ', m, ' zarplat');
for j:= 1 to m do
readln ( w[i].zrpl[j]); { b[i]:=0;}
b[i]:=sr(w[i]);
writeln (' srednyaya', b[i]:2);
readln;
end;
max:=b[1];
nmax:=1;
for i:=2 to n do
if b[i]>max then begin
max:=b[i];
nmax:=i;
end;
writeln ('max=', nmax);
q:=n-nmax; {kol-vo sdvigov ravno}
for i := 1 to q do
begin
x:=b[n];
z:=w[n];
for j:= n downto 2 do
begin
b[j]:=b[j-1];
w[j]:=w[j-1];
end;
b[1]:= x;
w[1]:=z;
end;
for i:=1 to n do
write (w[i].name,' ', b[i]:2, ' ');
writeln;
for i:= 1 to n do
begin
for j:= 1 to n-1 do
begin
if b[j] > b[j+1] then
begin
y:= b[j];
b[j]:= b[j+1];
b[j+1]:=y;
z:= w[j];
w[j]:= w[j+1];
w[j+1]:= z;
end;
end;
end;
textcolor (blue);
writeln ( ' spisok sotrydnikov po vozr sr zarpl' );
for i:= 1 to n do
writeln ( w[i].name,' ', b[i]);
Fa:=0;
for i:= 1 to n do begin
F:=0;
for j:= 1 to m-1 do
if w[i].zrpl[j] >= w[i].zrpl[j+1] then F:=1;
if F=0 then begin textcolor (red);
writeln ( 'zrpl rastet');
writeln (w[i].name); Fa:=1;
end;
end;
if Fa=0 then
begin
textcolor (green);
writeln ('net rabotnikov y kogo zarplata povishaeysya');
end;
readkey;
end.
2. Создать типизированный файл TABL, состоящий из 10 структур типа WORKER.
program ex2_0;
uses crt;
const n=10; m=12;
fout='f:\work.tip';
type
worker=record
name: string [10];
post: string [15];
year: integer;
zrpl: array [1..m] of integer;
end;
var
tabl: file of worker;
w: worker;
i, j: integer;
begin
clrscr; textcolor (white);
assign (tabl, fout);
rewrite (tabl);
for i:= 1 to n do
begin
writeln ('vvedite familii');
readln ( w.name);
writeln ('vvedite dolgnost');
readln (w.post);
writeln ('vvedite god postypleniya');
readln (w.year);
writeln ('vvedite v poslednee pole ', m, ' zarplat');
for j:= 1 to m do
readln ( w.zrpl[j]);
write (tabl,w);
end;
close (tabl);
end.
2.1. отсортировать записи в файле в порядке возрастания среднемесячных зарплат
program ex2_1;
uses crt;
const n=10; m=12;
fout='f:\work.tip';
type
worker=record
name: string [10];
post: string [15];
year: integer;
zrpl: array [1..m] of integer;
end;
var
tabl: file of worker;
z: worker;
w: array [ 1..n] of worker;
i, j, b: integer;
function sr ( T:worker): integer;
var s: integer;
i:integer;
begin
s:= 0;
for i:= 1 to m do
s:= s+ T.zrpl[i];
sr:= s div m;
end;
begin
clrscr; textcolor (white);
assign (tabl, fout);
reset (tabl);
i:=1;
while not eof (tabl) do begin
read (tabl, w [i]);
i:= i+1;
end;
for j:= 1 to n-1 do
for i:= 1 to n-j do
if sr (w[i]) > sr (w[i+1]) then
begin
z:= w[i];
w[i]:= w[i+1];
w[i+1]:= z;
end;
for i:= 1 to n do
begin
b:=sr(w[i]);
writeln (' srednyaya ', b:2);
end;
close (tabl);
rewrite (tabl);
for i:= 1 to n do
write (tabl, w[i]);
close (tabl);
readkey;
end.
2.2 Вывести в новый типизированный файл информацию о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, вывести соответствующее сообщение.
program ex2_2;
uses crt;
const n=10; m:=12;
fin='f:\work.tip';
fout='f:\over.tip';
type
worker=record
name: string [10];
post: string [15];
year: integer;
zrpl: array [1..m] of integer;
end;
var
tabl, ov: file of worker;
w:array [1..n] of worker;
i, j, Fa, F: integer;
begin
clrscr;
assign (tabl, fin);
assign (ov, fout);
reset (tabl);
rewrite (ov);
writeln ( ' spisok sotrydnikov po vozr sr zarpl' );
:=1;
while not eof (tabl) do
begin
read (tabl, w[i] );
i:= i+1;
end;
Fa:=0;
for i:= 1 to n do
begin
F:=0;
for j:= 1 to m-1 do
if w[i].zrpl[j] >= w[i].zrpl[j+1] then F:=1;
if F=0 then
begin
textcolor (red);
writeln ( 'zrpl rastet');
writeln (w[i].name); Fa:=1;
write ( ov, w[i]);
end;
end;
if Fa=0 then
begin
textcolor (green);
writeln ('no');
end;
else
writeln ('new= ', filesize(ov));
close (tabl);
close (ov);
readkey;
end.
2.3 Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец файла.
program ex2_3;
uses crt;
const n=10; m=12;
fout='f:\work.tip';
type
worker=record
name: string [10];
post: string [15];
year: integer;
zrpl: array [1..m] of integer;
end;
var
tabl: file of worker;
wк: array [1..n] of integer;
z, w, x: worker;
b: array [1..m] of integer;
i, j, max, nmax: integer;
function sr ( T:worker): integer;
var s: integer;
i:integer;
begin
s:= 0;
for i:= 1 to m do
s:= s+ T.zrpl[i];
sr:= s div m;
end;
begin
clrscr; textcolor (white);
assign (tabl, fout);
reset (tabl);
i:=1;
while not eof (tabl) do
begin
read (tabl, w);
b[i]:=sr(w);
writeln (' srednyaya ', w.name:6, b[i]:2);
i:=i+1;
end;
max:=b[1];
nmax:=1;
for i:=2 to n do
if b[i]>max then
begin
max:=b[i];
nmax:=i;
end;
writeln (' nmax=', nmax);
close (tabl);
if nmax< n then
begin
reset (tabl);
for i := 1 to n-nmax do
begin
seek(tabl, n-1);
read (tabl, w);
x:= w;
textcolor (red);
for j:= n-1 downto 1 do
begin
seek (tabl, j-1); read ( tabl, z);
seek (tabl, j); write (tabl, z);
end;
seek (tabl, 0); write ( tabl, x);
end;
close( tabl);
end;
reset (tabl);
while not eof(tabl) do
begin
read ( tabl, w);
writeln (w.name);
writeln;
end;
close (tabl);
readkey;
end.
3. Создать текстовый файл TABL, состоящий из 10 структур типа WORKER.
3.1. вывести в новый текстовый файл информацию о работниках, зарплата которых из месяца в месяц неуклонно повышалась.
Если таких работников нет, вывести соответствующее сообщение.
program ex3_1;
uses crt;
const n=10; m=12;
fin='e:\k3_0y.dat';
{ fin='e:\k3_0n.dat';}
fout='e:\over.dat';
type
worker=record
name: string [7];
post: string [6];
year: integer;
zrpl: array [1..m] of integer;
end;
var
tabl, ov: text;
w: worker;
i, j, Fa, F: integer;
begin
clrscr;
assign (tabl, fin);
assign (ov, fout);
reset (tabl);
rewrite (ov);
writeln ( ' spisok sotrydnikov po vozr sr zarpl' );
Fa:=0;
while not eof (tabl) do
begin
f:=0;
readln (tabl,w.name,w.post,w.year);
writeln (w.name,w.post,w.year);
for j:= 1 to m do
begin
read (tabl, w.zrpl[j]);
readln(tabl);
writeln (w.zrpl[j]);
end;
for j:= 1 to m-1 do
if w.zrpl[j] >= w.zrpl[j+1] then F:=1;
if F=0 then
begin
textcolor (red);
writeln ( 'zrpl rastet');
writeln (w.name);
Fa:=1;
writeln ( ov, w.name:7, w.post:6, w.year:2);
for j:= 1 to m do
write ( tabl, w.zrpl[j]:2)
end;
end;
if Fa=0 then begin
textcolor (green); writeln ('no'); end;
close (tabl);
close (ov);
readkey;
end.
Исходные:
Фамилия | должность | год | зарплата | |||||||||||
Сидоров | кассир | 1996 | 4000 | 4000 | 4000 | 4500 | 4500 | 4300 | 4500 | 4600 | 5000 | 5000 | 5000 | 5000 |
Петров | продавец | 2008 | 4500 | 4500 | 4700 | 4700 | 5000 | 5000 | 5500 | 5500 | 6000 | 6000 | 6500 | 6500 |
Иванов | продавец | 2000 | 4500 | 4500 | 4700 | 4700 | 5000 | 4500 | 4500 | 5500 | 5000 | 5000 | 5500 | 5500 |
Каблуков | менеджер | 1999 | 7000 | 7000 | 7500 | 7500 | 8000 | 8000 | 8500 | 8500 | 8500 | 8000 | 8000 | 8000 |
Смирнов | кассир | 2006 | 4000 | 4000 | 4000 | 4500 | 4500 | 4300 | 4500 | 4600 | 6000 | 6000 | 6000 | 6500 |
Стрельцов | продавец | 2000 | 4000 | 4000 | 4000 | 4500 | 4500 | 4300 | 4500 | 4600 | 5000 | 5000 | 5000 | 5000 |
Матвеев | менеджер | 1997 | 7000 | 7500 | 7500 | 7500 | 8000 | 8000 | 8500 | 8500 | 8500 | 9000 | 9000 | 9000 |
Соколов | консультант | 2005 | 3000 | 3500 | 3500 | 5000 | 4500 | 4500 | 5000 | 4000 | 5000 | 5500 | 5500 | 5000 |
Дубов | кассир | 2002 | 5000 | 5500 | 5500 | 5500 | 6000 | 6000 | 6000 | 6500 | 6500 | 6000 | 7000 | 7000 |
Скворцов | консультант | 1998 | 4000 | 4000 | 5000 | 5000 | 5500 | 5500 | 5500 | 5500 | 6000 | 6000 | 6000 | 6000 |