- •Www.Msta.Ru
- •Москва – 2005
- •1 Цель и задачи дисциплины
- •2 Тематическое содержание программы
- •3 Перечень рекомендуемых лабораторных работ
- •4 Экзаменационные вопросы по дисциплине
- •1. Введение
- •Var a,d: integer; X: real; d: string;.
- •2. Простейшие операторы языка
- •3. Организация ветвлений
- •Var a,b,c: real;
- •4. Логические функции
- •5. Организация циклов
- •Program p5_2; {другой вариант}
- •Var X,y: real;
- •С помощью этого оператора гораздо проще решить пример 5-2 (program p5_2). Оператор цикла с постусловием:
- •6. Массивы
- •Var X,z: array [1..8] of real;
- •Var I,j: integer;
- •Var n,I,j:integer; s,y,sr:real; X: array [1..10,1..5] of real;
- •Var n,I,j,st,kl,k:integer;
- •7. Символьные данные
- •Var n:integer;y:string;
- •Var X:string[1]; d:string; I:integer;
- •8. Записи
- •Var X:vr; y:array [1..5] of vr;
- •9. Файлы
- •Ввод и вывод информации для типизированных и текстовых файлов производится процедурами:
- •X,y:real;
- •X,y:real; I:integer;
- •Im: string[4];
- •I: integer;
- •Im: string[4];
- •I: integer;
- •10. Подпрограммы
- •11. Графика
- •Var d,I,m,rx,ry:integer;
- •Var d,m,rx,ry:integer;
- •X,y,xn,xk,ymin,ymax,dx:real; msy,msx:real;
Ввод и вывод информации для типизированных и текстовых файлов производится процедурами:
read(f,x1,x2,…xn) или readln(f,x1,x2,…xn) – чтение информации х1,х2,…,xn из логического файла f.
write(f,x1,x2,…xn) или writeln(f,x1,x2,…xn) – запись информации х1,х2,… хn в логический файл f.
Для управления текстовыми файлами используется следующие процедуры и функции:
append(фп) |
Открывает файл для дополнения. |
eoln(фп) |
Признак конца строки (True, если конец). |
read(фп,переменные) |
Считывает данные из файла. |
readln(фп,переменные) |
Считывает данные из файла, переходит на следующую строку. |
write(фп,переменные) |
Записывает данные в файл. |
writeln(фп,переменные) |
Записывает данные в файл, переходит на следующую строку. |
Для нетекстовых файлов:
filesize(фп) |
Число записей в файле. |
filepos(фп) |
Номер текущей записи. |
seek(фп,номер) |
Устанавливает указатель на запись с заданным номером. |
truncate(фп) |
Усекает файл до текущей позиции. |
Различают два способа доступа к файлам. Последовательный, когда к конкретной записи можно перейти, только перебрав все предыдущие, и прямой (или произвольный) доступ к любой записи по ее номеру. Текстовые файлы могут иметь в каждой строке записи произвольной длины и поэтому реализуют только последовательный доступ. Другие типы файлов имеют записи фиксированной длины. В виду этого здесь можно вычислить положение любой записи на диске, т.е. организовать прямой доступ.
Пример 9-1.
а). Вычислить по точкам функцию y=x/2 для x=0,0.5,1.0, …4 и записать результаты в текстовый файл с именем func. Текстовый файл удобен тем, что его можно просмотреть в любом текстовом редакторе и, при желании откорректировать данные. Файлу не обязательно иметь расширение. Мы придали ему расширение txt с тем, чтобы проще было его просматривать в файлерах Проводник или TotalCommander (эти программы для файлов с расширением txt автоматически вызывают Блокнот). Физическому файлу дадим имя func.txt, а логическому имя f, и именно с ним будем далее работать.
б). Cоставить программу чтения из файла func.txt записанной ранее в него информации.
program 9_1a;{запись вычисленной функции в файл}
var f:text; {объявлен текстовый логический файл f}
X,y:real;
begin
{логический файл f связывается с физическим func.txt}
assign(f,'func.txt');
rewrite(f); {файл f открывается для записи в него}
x:=0;
while x<=4 do begin {вычисление в цикле функции}
y:=x/2; x:=x+0.5;
writeln(f,x:3:1,y:4:1); {запись в файл переменных х и у}
end;
close(f); {закрытие файла}
end.
program 9_1b;{чтение записанных ранее данных из файла}
var f:text; {объявлен текстовый файл f}
X,y:real; I:integer;
begin
assign(f,'func.txt');
reset(f); {открытие файла для чтения}
for i:=1 to 9 do begin
read(f,y,x); {чтение из файла в память}
{вывод на монитор, считанной из файла информации}
writeln('y=',y:3:1,' x=',x:4:1);
end;
close (f); {закрытие файла}
end.
Пример 9-2. Посчитать зарплату рабочих. Сведения об их месячной выработке находятся в типизированном (типа record) файле VIR (рис. 9.1).
файл |
Vir |
|
|
|
файл |
Ved |
|
|
tab |
im |
tarif |
dn |
|
im |
zar |
nalog |
vid |
таб |
имя |
тариф |
дни |
|
имя |
зарплата |
налог |
выдать |
35 |
Иван |
100 |
20 |
|
Иван |
2000 |
|
|
48 |
Петр |
150 |
30 |
|
Петр |
4500 |
|
|
15 |
Олег |
200 |
10 |
|
Олег |
3000 |
|
|
|
|
|
|
Рис. |
9.1 |
|
|
|
Он содержит поля: табельный номер tab, имя im (длиной до 4-х знаков), дневной тариф tarif работника, число отработанных им за месяц дней dn. Эти данные вводятся оператором. На основании их компьютером подсчитывается и заполняется файл ведомости VED, содержащий имя im, зарплату zar (=tarif*dn), налог nalog (=13%*zar) и сумму к выдаче vid (=zar-nalog). Далее содержимое файла выводится с подсчетом итоговых сумм. Здесь придется написать две программы. Программой Vvod выполняется следующая последовательность действий: 1). Заполняется файл Vir. 2). Считывается содержимое Vir в массив V. 3). Выполняются все расчеты и заносятся в массив R. 4). Данные из R сохраняются в файле Ved. Программа Vivod реализует только два действия: вывод всей ведомости к оплате или вывод сведений только об одном работнике по запросу (по имени).
program Vvod; {ввод данных и сохранение результата к примеру 9-2}
uses crt;
const n=3;
type vr=record {объявление записи для Выработки}
tab: integer; {табель}
im: string[4]; {имя}
tarif, dn: real;
end;
vd=record {объявление записи для Ведомости}