Модули, записи и файлы

Сибирский Государственный Унивеверситет Телекамуникаций и
Информатики
Кафедра ВТ и ТС
КУРСОВАЯ РАБОТА
ДИСЦИПЛИНА: Информатика
ПРЕПОДАВАТЕЛЬ: Моренкова Ольга Илинична
ТЕМА: Модули, записи и файлы.
ИСПОЛНИТЕЛЬ: Грязина Дмитрия Владимировича
Новосибирск
2000г.
С О Д Е Р Ж А Н И Е
Введение 3
Глава 1. Модули в Турбо Паскале. 6
1.1. Назначение и структура модуля 6
1.2. Компиляция модулей. 9
Глава 2. Алгоритмы 11
2.1. Вызывающая программа 12
2.2.Процедура формирование массива А 13
2.3. Процедура вывода массива А 14
2.4. Процедура произведение элементов массива А 15
2.5. Функция поиска максимального элемента векторного массива С…….…….16
Глава 3. Модуль основной программы 17
Глава 4. Основная программа 19
Глава 5. Результаты первой части курсовой работы 21
Глава 6. Записи. 22
Глава 7. Файлы.………………………………………………………………………..24
7.1. Операция с файлами как единое целое. 24
7.2. Структура файлов 26
Глава 8. Задание второй части курсовой работы 30
Глава 9. Алгоритм основной программы 31
Глава 10. Основная программа 32
Глава 11. Результаты второй части курсовой работы……………………………….34
Заключение 35
Список использованных источников: 36
Введение
Целью курсового проектирования является приобретение и закрепление навы-
ков в организации вычислительных процессов и программирования на алгоритми-
ческом языке ПАСКАЛЬ. Основной акцент в работе уделяется рассмотрению мо-
дульного программирования, использованию процедур и функций. Кроме того,
большое внимание уделяется работе с файлами, подробно рассматриваются функ-
ции открытия и закрытия файла. Полученные знания помогут в будущем более
эффективно подходить к процессу разработки программного обеспечения.
Язык программирования Pascal был разработан в 1968—1971 гг. Никлаусом
Виртом в Цюрихском Институте информатики (Швейцария). Первоначальная цель
разработки языка диктовалась необходимостью инструмента "для обучения про-
граммированию как систематической дисциплине". Однако очень скоро обнару-
жилась чрезвычайная эффективность языка Pascal в самых разнообразных прило-
жениях, от решения небольших задач численного характера до разработки слож-
ных программных систем — компиляторов, баз данных, операционных систем и
т.п. К настоящему времени Pascal принадлежит к группе наиболее распространен-
ных и популярных в мире языков программирования. Существуют многочислен-
ные реализации языка практически для всех машинных архитектур; разработаны
десятки диалектов и проблемно-ориентированных расширений языка Pascal;
обучение программированию и научно-технические публикации в значительной
степени базируются на этом языке.
Характеристика и особенности языка. Существует ряд объективных причин,
обусловивших выдающийся успех языка Pascal. Среди них в первую очередь не-
обходимо указать следующие:
1. Язык в естественной и элегантной форме отразил важнейшие современные
концепции технологии разработки программ: развитая система типов, ориентация
на принципы структурного программирования, поддержка процесса пошаговой
разработки.
2. Благодаря своей компактности, концептуальной целостности и ортогонально-
сти понятий, а также удачному первоначальному описанию, предложенному авто-
ром языка, Pascal оказался весьма легок для изучения и освоения. В противопо-
ложность громоздким многотомным описаниям таких языков, как PL/I, Cobol,
FORTRAN, достаточно полное описание языка Pascal занимает около 30 страниц
текста, а его синтаксические правила можно разместить на одной странице.
3. Несмотря на относительную простоту языка, он оказался пригоден для весьма
широкого спектра приложений, в том числе для разработки очень больших и
сложных программ, например операционных систем.
4. Pascal весьма технологичен для реализации практически для всех, в том числе
и нетрадиционных, машинных архитектур. Утверждается, что разработка Pascal-
транслятора "почти не превышает по трудоемкости хорошую дипломную работу
выпускника вуза". Благодаря этому для многих ЭВМ существует несколько раз-
личных реализации языка, отражающих те или иные практические потребности
программистов.
Язык Pascal стандартизован во многих странах. В 1983 году был принят между-
народный стандарт (ISO 7185:1983). Готовится (сведения на 1989 год) стандарт
СЭВ на Pascal.
Рассмотрим основные особенности языка Pascal.
1. Pascal является традиционным алгоритмическим языком программирования,
продолжающим линию Algol-60. Это означает, что программа на языке Pascal
представляет собой специально организованную последовательность шагов по
преобразованию данных, приводящую к решению некоторой задачи. Это отличает
Pascal от так называемых непроцедурных языков типа Prolog, по существу пред-
ставляющих собой формализмы для записи начальных условий некоторой задачи
и синтезирующих решение посредством встроенных механизмов логического вы-
вода.
2. Язык Pascal содержит удобные средства для представления данных. Развитая
система типов позволяет адекватно описывать данные, подлежащие обработке, и
конструировать структуры данных произвольной сложности. Pascal является ти-
пизированным языком, что означает фиксацию типов переменных при их описа-
нии, а также строгий контроль преобразований типов и контроль доступа к дан-
ным в соответствии с их типом (как на этапе компиляции, так и при исполнении
программ).
3. Набор операторов языка Pascal отражает принципы структурного программи-
рования и позволяет записывать достаточно сложные алгоритмы в компактной и
элегантной форме.
Pascal является процедурным языком с традиционной блочной структурой и ста-
тически определенными областями действия имен. Процедурный механизм соче-
тает в себе простоту реализации и использования и гибкие средства параметриза-
ции.
4. Синтаксис языка достаточно несложен. Программы записываются в свобод-
ном формате, что позволяет сделать их наглядными и удобными для изучения.
Глава 1. Модули в Турбо Паскале.
1.1. Назначение и структура модуля
Модуль - это автономно компилируемая программная единица, включающая в
себя различные компоненты раздела описаний (типы, константы, переменные,
процедуры и функции) и, возможно, некоторые исполняемые операторы ини-
циирующей части. В модулях Turbo PASCAL явным образом выделяется
некоторая "видимая" интерфейсная часть, в которой сконцентрированы описания
глобальных типов, констант и переменных, а также приводятся заголовки
глобальных процедур и функций. Появление объектов в интерфейсной части
делает их доступными для других модулей и основной программы. Тела проце-
дур и функций располагаются в исполняемой части модуля, которая может
быть скрыта от пользователя. Модули представляют собой прекрасный инст-
румент для разработки библиотек прикладных программ и мощное средство
модельного программирования. Важная особенность модуля заключается в
том, что компилятор Turbo PASCAL размещает их программный код в отдель-
ном сегменте. Модуль имеет следующую структуру:
UNIT
BEGIN
- имя модуля (должно совпадать с именем файла, в
который помещен модуль);
IMPLEMENTATION - зарезервированное слово (выполнение), начинает испол-
няемую часть; BEGIN - зарезервированное слово, начинает инициирующую
часть (часть модуля BEGIN необязательна); END - за-
резервированное слово, признак конца модуля.
Заголовок модуля состоит из зарезервированного слова UNIT и следующе-
го за ним имени модуля. Для правильной работы Turbo PASCAL и возможности
подключения средств, облегчающих разработку крупных программ, это имя
должно совпадать с именем файла, в который помещается исходный текст моду-
ля. Имя модуля служит для его связи с другими модулями и основной про-
граммой. Эта связь устанавливается специальным приложением USES - список
модулей, с которыми устанавливается связь, элементами списка являются име-
на модулей, отделяемые друг от друга запятыми. Если объявление USES ис-
пользуется, то оно должно открывать раздел описаний основной программы.
Модули могут использовать другие модули. Предложение USES в модулях
может следовать либо сразу за зарезервированным словом INTERFACE, либо
сразу за словом IMPLEMENTATION. Интерфейсная часть открывается зарезер-
вированным словом INTERFACE. В этой части содержатся объявления всех
глобальных объектов модуля (типов, констант, переменных и подпрограмм),
которые должны стать доступными основной программе и (или) другим моду-
лям. При объявлении глобальных подпрограмм в интерфейсной части указы-
вается только их заголовок. Объявление подпрограмм в интерфейсной части ав-
томатически сопровождается их компиляцией с использованием дальней
модели памяти. Таким образом, обеспечивается доступ к подпрограммам из
основной программы и других модулей. Порядок появления различных разде-
лов объявлений и их количество может быть произвольным. Исполняемая
часть начинается зарезервированным словом IMPLEMEN- TATION и содержит
описания подпрограмм, объявленных в интерфейсной части. В ней могут объяв-
ляться локальные для модуля объекты - вспомогательные типы, константы, пере-
менные и блоки, а также метки, если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в ис-
полняемой части должен предшествовать заголовок, в котором можно опускать
список формальных переменных (и тип результата для функции), так как они
уже описаны в интерфейсной части. Но если заголовок программы приводит-
ся в полном виде, т.е., со списком формальных параметров, то он должен
совпадать с заголовком, объявленным в интерфейсной части. Иниции-
рующая часть завершает модуль. Она может отсутствовать вместе с начи-
нающим ее словом BEGIN или быть пустой - тогда за BEGIN сразу следует при-
знак конца модуля (слово END и следующая за ним точка). В инициирую-
щей части размещаются исполняемые операторы, содержащие некоторый фраг-
мент программы. Эти операторы исполняются до передачи управления основной
программе и обычно используются для подготовки ее работы. Например, в них
могут инициироваться переменные, открываться нужные файлы, могут устанав-
ливаться связи с другими ПК по коммуникационным каналам и т.п. Не реко-
мендуется делать инициирующую часть пустой, лучше ее опустить: пустая
часть содержит пустой оператор, которому будет передано управление при за-
пуске программы.
1.2. Компиляция модулей.
В среде Turbo PASCAL имеются средства, управляющие способом
компиляции модулей и облегчающие разработку крупных программных проек-
тов. В частности, определены три режима компиляции: COMPILE, MAKE и
BUILD. Режимы отличаются только способами связи компилируемого модуля и
основной программы с другими модулями, объявленными в приложении USES.
При компиляции модуля или основной программы в режиме COMPILE ком-
пилируется только файл, находящийся в активном окне. По умолчанию
предполагается, что используемые модули уже откомпилированы и ре-
зультаты помещены в одноименные файлы с расширением .TPU; файл с рас-
ширением .TPU (от английского Turbo Pаscal Unit) создается в результате ком-
пиляции модуля. В режиме МАКЕ компилятор проверяет наличие TPU-файлов
для каждого объявленного модуля. Если какой-либо из файлов не обнаружен,
то система пытается отыскать одноименный файл с расширением .PAS, т.е.
файл с исходным текстом модуля. Если PAS-файл найден, то происходит его
компиляция. Кроме того, в этом режиме система следит за возможными изме-
нениями исходного текста любого используемого модуля. Если в PAS-файл
(исходный текст модуля) внесены какие-либо изменения, то независимо от то-
го, есть ли уже в каталоге соответствующий TPU-файл или нет, система осуще-
ствляет его компиляцию перед компиляцией основной программы. Если измене-
ния внесены в интерфейсную часть модуля, то будут перекомпилированы так-
же и все другие модули, обращающиеся к нему. Режим МАКЕ существенно
облегчает процесс разработки крупных программ с множеством модулей. В
режиме BUILD существующие TPU-файлы игнорируются, и система пыта-
ется отыскать и компилировать соответствующий PAS-файл для каждого объ-
явленного в предложении USES модуля. После компиляции в режиме BUILD
программист может быть уверен в том, что учтены все сделанные им измене-
ния в любом из модулей.
Подключение модуля к основной программе и их возможная компиляция
осуществляется в порядке их объявления в предложении USES. При перехо-
де к очередному модулю система предварительно отыскивает все модули, на
которые он ссылается. Ссылки модулей друг на друга могут образовывать дре-
вовидную структуру любой сложности, однако запрещается явное или косвен-
ное обращение модуля к самому себе. Дело в том, что Turbo PASCAL разреша-
ет ссылки на частично откомпилированные модули, что приблизительно со-
ответствует опережающему описанию подпрограммы. Если интерфейсные
части любых двух модулей независимы, Turbo PASCAL сможет идентифициро-
вать все глобальные идентификаторы в каждом из модулей, после чего откомпи-
лирует тела модулей обычным способом.
Глава 2. Задание первой части курсовой работы
Разработать модуль (схемы алгоритмов и программы), содержащие процедуры и
функции, решающие поставленную задачу :
Вариант № 21
Вычислить произведение элементов каждого столбца матрицы :
Определить максимальное значение произведения :
Разработать вызывающую программу (алгоритм и текст программы), предусмот-
рев процедуру очистки экрана и вывода информации на экран с текстовыми ком-
ментариями. Например :
Курсовую работу выполнил студент группы А – 61 Иванов Роман Борисович
Вариант № 21
Разработанный модуль содержит следующие программы :
1. Процедуру формирования элементов матрицы в интервале –1.0 до 1.0.
2. Функцию определения суммы элементов той строки, где находиться макси-
мальный элемент.
3. Процедуру вывода элементов матрицы.
Результаты :
Сформированная матрица :
------------------------------
------------------------------
Сумма элементов строки, где находится максимальный элемент =…….
2.1. Вызывающая программа
2.2.Процедура формирования массива А
PROCEDURE FORM
2.3.Процедура ввывода массива А
PROCEDURE VIVOD
2.4.Процедура произведения элементов массива А
PROCEDURE PR
2.5.Функция поиска максимального элемента в векторном массиве С
FUNCTION MAX
Глава 3. Модуль основной программы
unit kurp1;
interface
const n=5;
type matr=array[1..n,1..n] of real;
vect=array[1..n] of real;
procedure form(var a:matr);
procedure vivod (var a:matr);
function max(c:vect):real;
procedure pr(a:matr;var c:vect);
implementation
procedure vivod (var a:matr);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write (a[i,j]:6:2);
writeln;
end;
writeln;
end;
procedure form(var a:matr);
var i,j:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random*2-1;
end;
function max( c:vect):real;
var i:integer;
m:real;
begin
m:=-2;
for i:=1 to n do
if c[i]>m then m:=c[i];
max:=m
end;
procedure pr(a:matr;var c:vect);
var i,j:integer;
begin
c[i]:=1;
for i:=1 to n do
begin
for j:=1 to n do
c[i]:=a[j,i]*c[i];
writeln('Произведение ',i,'-го столбца =',c[i]:6:4);
end;
writeln;
end;
end.
Глава 4. Основная программа
program kursovik;
uses crt,kurp1;
var a:matr;
c:vect;
begin
clrscr;
window (45,2,75,7) ;
writeln ('Курсовая работа по информатике') ;
writeln('Факультет АЭС группа А-92');
writeln ('студента: Грязина Дмитрия ');
window(1,1,80,25);
writeln('вариант 21');
window(10,8,80,20);
writeln('Разработанный модуль содержит следующие программы:');
writeln('1.Процедуру формирования элементов матрицы в интервале от 1.0
до 1.0.');
writeln('2.Процедуру вывода матрицы на экран.');
writeln('3.Процедуру определения произведения каждого столбца матрицы.');
writeln('4.Функцию определения максимального произвелдения.');
window(1,1,80,25);
gotoxy(10,24);
writeln('Для продолжения нажмите пробел');
clrscr;
form(a);
writeln('Сформированная матрица');
vivod(a);
pr(a,c);
writeln('Максимальное произведение =',max(c):6:4);
readln;
end.
Глава 5. Результаты первой части курсовой работы
Сформированная матрица
-0.68 0.22 0.58 -0.62 -0.14
0.25 -0.11 -0.90 0.41 -0.57
0.24 -0.69 -0.84 0.28 0.71
-0.46 -0.26 0.16 0.49 -0.73
0.60 0.17 0.28 -0.77 -0.61
Произведение 1-го столбца =0.0112
Произведение 2-го столбца =-0.0007
Произведение 3-го столбца =0.0187
Произведение 4-го столбца =0.0264
Произведение 5-го столбца =0.0243
Максимальное произведение =0.0264
Глава 6. Записи.
Запись – это структура данных, состоящая из фиксированного числа компонентов,
называемых полями записи. В отличие от массива, компоненты (поля) записи мо-
гут быть различного типа. Чтобы можно было ссылаться на тот или иной компо-
нент записи, поля именуются.
Структура обьявления типа записи такова:
- правельный индификатор;
RECORD, END – зарезервированные слова (запись, конец);
- список полей; представляют собой последовательность
разделов записи, между которыми ставится точка с запитой.
Каждый раздел записи состоит из одного или нескольких индификаторов полей,
отделяемых друг от друга запятыми. За индификатором ставится двоеточие и опи-
сание типа поля например:
type
birthday = record
day, month : byte;
year : word:
end;
var
a,b : Birthday;
. . . . . . . .
В этом примере тип Birthday есть запись с полями DAY, MONTH, и YEAR; пере-
менные А и В содержат записи типа Birthday.
Как в массиве, значения переменных типа записи можно присваивать другим пе-
ременным того же типа, например:
a : = b;
К каждому из компонентов записи можно получить доступ, если использовать со-
ставное имя, т.е. указать имя переменной, затем точку и имя поля:
a.day := 27; b.year := 1991;
Чтобы упростить доступ к полям записи, используется оператор присоединения
WITH:
WITH - имя переменной типа запись, за которым,
возможно, следует список вложенных полей;
- любой оператор Турбо Паскаля.
Например:
with c.bd do month := 9;
Имена полей должны быть уникальными в пределах той записи, где они обьявле-
ны, однако, если записи содержат поля – записи, т.е. вложена одна в другую, име-
на могут повторяться на разных уровнях вложенности.
.
Глава 7. Файлы.
Под файлом понимается именованная область памяти на магнитном носителе,
используемая для долговременного хранения некоторой логически связанной ин-
формации. В эту область внешней памяти можно как поместить определенные
данные, так и извлечь их из нее. Эти действия имеют общее название - ввод-
вывод.
7.1. Операция с файлами как единое целое.
Программирование доступа к файлу в языке Turbo Pascal начинается с описания
файловой переменной (переменной файлового типа). Это описание строится с по-
мощью служебного слова file, после которого (после служебного слова of) может
быть указан тип отдельных элементов файла, например:
var
F : file of integer;
При необходимости можно отдельно определить некоторый файловый тип, ко-
торым в дальнейшем пользоваться при описании файловых переменных:
type
RecordFile = file of record
А, В : real;
end;
var
Fl, F2 : RecordFile;
Очень важно различать собственно файл (область памяти на магнитном носите-
ле с некоторой информацией) и переменную файлового типа в некоторой Turbo
Pascal- программе. Считается, что файловая переменная является представителем
некоторого дискового файла в программе. Для того, чтобы реализовать доступ к
файлу па магнитном диске, программа должна связать его с файловой переменной.
Для этого необходимо сопоставить переменную с именем файла. Это имя пред-
ставляется в виде строки, содержащей полное имя файла и, быть может, цепочку
объемлющих каталогов и обозначение дисковода. Такая строка носит название
маршрута (или пути) к файлу и формируется по общим правилам MS-DOS.
Связывание маршрута и файловой переменной производится стандартной про-
цедурой Assign, которой передаются два параметра: имя переменной файлового
типа и строка с именем (маршрутом) дискового файла, например:
Assign (F, 'с: \books\book4\test3 .раз ' ) ;
Помимо маршрута, во втором параметре может быть указано условное (симво-
лическое) обозначение некоторого «псевдофайла» MS-DOS, то есть файла, свя-
занного с конкретным физическим устройством. Допускаются имена, в основном
совпадающие с принятыми в MS-DOS обозначениями ('CON' – консоль, то есть
экран дисплея и/или клавиатура, 'LPTI' или 'PRN' – печатающее устройство и т. д.).
До тех пор, пока файловая переменная не связана с каким-либо дисковым фай-
лом, никакие операции с ней в программе невозможны, Заметим, что можно свя-
зать файловую переменную с еще не существующим дисковым файлом. Это мо-
жет быть оправдано для случая последующего создания Turbo Pascal-программой
файла с данным именем с помощью некоторой системной процедуры.
После того, как файловая переменная с помощью процедуры Assign связана с
конкретным дисковым файлом, можно выполнить любую допустимую операцию с
ним. Здесь рассмотрим две операции общего характера, позволяющие переимено-
вывать и уничтожать существующие дисковые файлы. Такие операции выполня-
ются системными подпрограммами Rename и Erase со следующими специфика-
циями:
Rename ( var f; nevname : string );
Erase ( var f );
Основным параметром этих процедур является файловая переменная (она мо-
жет идентифицировать файл любого типа, и к ней должна была быть ранее приме-
нена процедура Assign), а процедуре Rename дополнительно передается новое имя
файла. Действие указанных процедур основывается на соответствующих DOS-
функциях и функционально эквивалентно командам REN и DEL командного про-
цессора.
7.2. Структура файлов
7.2.1Открытие и закрытие файлов
В этом и следующем разделах рассматриваются файлы традиционной для языка
Pascal структуры, которые описываются в программе в терминах составляющих
компонент. Кроме таких файловых переменных (они также называются "типизи-
рованными" файлами), в языке Turbo Pascal имеются также файлы специального
типа - текстовые файлы, которые введены для поддержки одного практически
важного частного случая файловых структур, и нетипизированные файлы, кото-
рые используются для более эффективной организации обменов на низком уровне.
Важнейшим моментом при использовании переменных файловых типов являет-
ся интерпретация файла как потенциально бесконечного списка значений одного и
того же (базового) типа. Например, описание переменной F вида
var
F : file of integer;
понимается как определение в программе под именем F списка неопределенного
количества целых чисел, расположенного на некотором внешнем запоминающем
устройстве (например, на магнитном диске).
С каждой переменной файлового типа также связано понятие текущего указа-
теля файла. Текущий указатель можно понимать как скрытую переменную (то
есть переменную, неявно описанную вместе с файловой
переменной), которая обозначает ("указывает" на) некоторый конкретный элемент
файла. Таким образом, можно графически так представить интерпретацию файла,
связанного с переменной F: 0 1 2 N
Целое
Целое
Целое
. . . . .
Целое
. . .
Текущий указатель —————
Как правило, все действия с файлом (чтение из файла, запись в файл) произво-
дятся поэлементно, причем в этих действиях участвует тот элемент файла, кото-
рый обозначается текущим указателем. В результате совершения операций теку-
щий указатель может перемещаться, настраиваясь на тот или иной элемент файла.
Все элементы файла считаются пронумерованными; начальный элемент имеет ну-
левой номер. Имеется возможность явной установки текущего указателя на неко-
торый элемент файла.
Заметим, что один и тот же внешний файл в различных Turbo Pascal-программах
(или даже в различных частях одной и той же программы) может интерпретиро-
ваться по-разному, например, как последовательность целых чисел, или как по-
следовательность символов, или как последовательность некоторых записей, и т.
д. Эта возможность очень важна и часто используется в работе с файлами сложной
структуры. Например, в процессе работы с внутренним представлением файлов
баз данных (в частности, с DBF-файлами) может понадобиться интерпретировать
файл по-разному в зависимости от того, какую его компоненту (заголовок или со-
держательную часть) мы обрабатываем.
Нужно также отметить, что все операции с файлами в языке Turbo Pascal реали-
зованы с использованием базовых средств операционной системы; в частности,
понятие текущего указателя файла поддержано в MS-DOS. Однако все перемеще-
ния по файлу (как явное управление указателем, так и сдвиги при обменах) вы-
полняются в терминах байтов. Таким образом, все аспекты, связанные с типизаци-
ей содержимого файлов, представляют собой системную надстройку языка Turbo
Pascal.
Для выполнения некоторой операции по вводу-выводу необходимо прежде всего
открыть дисковый файл (напомним, что предварительно нужно связать файловую
переменную с дисковым файлом с помощью процедуры Assign). Под открытием в
данном случае понимается подготовка к обмену с файлом со стороны программы,
заключающаяся прежде всего в поиске файла на внешнем носителе, установке его
текущего указателя на определенный (как правило, нулевой элемент) и формиро-
вании буфера в оперативной памяти, посредством которого будут производиться
обмены.
Обычные типизированные файлы открываются с помощью одной из двух сис-
темных процедур - Reset или Rewrite, единственным параметром
которых в данном случае является файловая переменная. Обе эти процедуры от-
крывают файл для обмена. Разница между ними заключается в начальных дейст-
виях с файлом.
Процедура Reset предполагает, что открываемый дисковый файл уже существу-
ет, в противном случае возникает ошибка. Процедура Rewrite допускает, что от-
крываемый файл может еще не существовать; в этом случае она создаст заданный
файл. Если же файл существует, то Rewrite очищает его. Повторим, что в обоих
случаях текущий указатель файла устанавливается на его нулевой элемент. Следу-
ет иметь в виду, что обе операции допускают в дальнейшем как чтение из файла,
так и запись в него (это будет обсуждаться в следующем разделе).
Разумеется, две введенные процедуры носят в основном подготовительный ха-
рактер, однако можно указать практически важные случаи их вполне самостоя-
тельного использования. Так, процедура Rewrite может применяться для стирания
содержимого файла без его удаления с диска или для создания нового файла.
Процедура close завершает действия с файлом, который указывается в качестве
ее единственного параметра. При этом буфер, образованный при открытии файла,
ликвидируется. После этого файловую переменную можно связать посредством
процедуры Assign с каким-либо другим дисковым файлом. Заметим, что при
окончании работы всей программы происходит автоматическое закрытие всех
файлов, открытых в программе. Однако хорошим правилом является явное закры-
тие файлов процедурой close после окончания работы с ними.
Помимо закрывающей процедуры close, в системе Turbo Pascal также имеется
дополнительная процедура Flush (ее параметр - файловая переменная). Flush ис-
пользуется для завершения обменов с файлом без его закрытия. Обмены с файла-
ми всегда реализуются через некоторый буфер в оперативной памяти, поэтому в
процессе записи на файл последние записываемые элементы могут еще находить-
ся ("застрять") в буфере. Процедура Flush вызывает принудительный сброс этих
элементов в файл. Эта процедура имеет смысл в том случае, если с файлом прово-
дились операции записи, и используется редко, так как процедура close произ-
водит такие же действия.
Глава 8. Задание по второй части курсовой работы
В файле содержаться справочные сведенья о предприятиях-задолжниках по
уплате налогов

ИНН
Наименование
предприятия
Средство на
начало года
Начислено на-
логов в отчет.
период
Уплачено
налогов в
отч. Период
……...
…………..
………………
…………….
………………
…………..
……...
…………..
………………
…………….
………………
…………..
Сведенья на конец отчетного периода
…………………..
……………….
……………
………………
………….
…………………..
……………….
…………….
……………..
………….
Тип полей:
№ - тип INTEGER[3]
ИНН – тип STRING[12]
Наименование
Предприятия – тип STRING[20]
Остальные поля – INTEGER
Разработать алгоритм и программу для обработки файла согласно варианту зада-
ния
Вариант №26
Выдать информацию о предприятиях, которые не начисляют налоги в отчетном
периоде.
Сведенья выдать в виде таблицы с соответствующим заголовком.
НАПРИМЕР :
СВЕДЕНЬЯ О ЗАДОЛЖНИКАХ > 20 тыс.
Глава 9. Алгоритм второй части курсовой работы
Глава 10. Основная программа
program part2;
uses crt;
type table = record
n : integer ;
inn : string[12];
Name : string[20];
Sng : integer;
Nop : integer;
Uop : integer;
Skop : integer;
End;
Var
f : file of table;
x : table;
begin
clrscr;
window(45,2,75,7);
textcolor (5) ;
writeln ('Курсовая работа по информатике ') ;
writeln ('Факультет АЭС группа А-92 ') ;
writeln ('студента: Грязина Д.') ;
window (1, 1, 80, 25) ;
gotoxy (30, 5) ;
writeln ('Часть 2') ;
window(10, 8, 80, 20) ;
writeln ('В файле table.txt содержатся справочные сведения') ;
writeln ('о предприятиях-задолжниках по уплате налогов ') ;
writeln ;
writeln ('Задание') ;
writeln ('Выдавать полные сведения о предприятиях, которые не ') ;
writeln ('начисляли налоги в отчетный период.') ;
window(1, 1, 80, 25);
gotoxy(10, 24);
textcolor (4 + blink);
writeln ('Для продолжения нажмите Enter ') ;
readln ;
textcolor (10) ;
clrscr ;
assign (f, table.txt) ;
reset (f) ;
writeln ('Cведения о предприятиях, которые не начисляли ') ;
writeln ('налоги в отчетный период ') ;
writeln ('+----------------------------------+') ;
writeln ('| № | ИНН | Наименование | 1 | 2 | 3 | 4 |') ;
writeln (' | ---+----------+----------------+----+----+----+-----| ') ;
while not Eof(f) do
begin
read (f, x) ;
with x do
if Nop = 0 then
begin
writeln ('| '№ : 3' | ',Inn : 12,' | ',Name : 20,' | ' ,Sng :4,' | ',Nop : 4,' | ',Uop : 4,'|' ) ;
writeln (Skop : 4, ' | ') ;
end;
end;
writeln ('+-----------------------------------------------------------------------+') ;
writeln ;
writeln ('1- Сведения на начало года ') ;
writeln ('2 – Начислено налогов в отчетный период ') ;
writeln ('3 – Уплачено налогов в отчетный прериод ') ;
writeln ('4 – Сведения на конец отчетного преиода ') ;
writeln ;
readln ;
end.
Глава 11. Результаты второй части курсовой работы
Сведения о предприятиях которые не начисляли
налоги в отчетный период.
+-----------------------------------------------------------------------+
¦ № ¦ ИНН ¦ Наименование ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦
¦-----+-----------------+------------------------+----+----+----+-----¦
¦ 3 ¦ 54090903618 ¦ Детский сад №275¦ -8 ¦ 0 ¦ 8 ¦ 0 ¦
¦ 10 ¦ 54091032618 ¦ Школа №25 ¦ -7 ¦ 0 ¦ 7 ¦ 0 ¦
+------------------------------------------------------------------------+
1 - Сведения на начало года
2 - Начислено налогов в отчетный период
3 - Уплачено налогов в отчетный период
4 - Сведения на конец отчетного периода
Заключение
Полученный мною практический опыт применительно к программированию
на ПАСКАЛЕ позволяет использовать эффективное модульное программирова-
ние. Кроме того, изучив представленный в курсовом проектировании материал, я
приобрел практические навыки использования процедур, функций. Наряду с этим
я научился правильно использовать файловые функции операционной системы
MS-DOS, что является одним из основных вопросов программирования.
Список использованных источников:
Фаронов В. В., Турбо Паскаль 7.0., Учебное пособие. – М.: «Нолидж», 1999.
Бляшкин И. И. Буров А. А. Новые возможности Турбо Паскаля 6.0. – СПб.: Изда-
тельство «Макет»,1992.
Фаронов Н.Н. Програмирование на персональных ЭВМ в среде Турбопаскаль. –
М.: Издательство МГТУ, 1990.
Грязина Дмитрия Владимировича "Модули, записи и файлы." (курсовая работа)
_________________________________________________________________________________________________________________
36