Реферат: Модули, записи и файлы
2.1. Вызывающая программа
2.2.Процедура формирования массива А
PROCEDURE FORM
2.3.Процедура ввывода массива А
PROCEDURE VIVOD
2.4.Процедура произведения элементов массива А
PROCEDURE PR
2.5.Функция поиска максимального элемента в векторном массиве С
FUNCTION MAX
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
Здесь <имя типа> - правельный индификатор;
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 <переменная> DO <оператор>
Здесь WITH, DO – ключевые слова (с, делать);
<переменная> - имя переменной типа запись, за которым,
возможно, следует список вложенных полей;
<переменная> - любой оператор Турбо Паскаля.
Например:
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.