Модули и Файлы

Федеральное Агентство Связи

Сибирский Государственный  Университет  Телекоммуникаций и  Информатики

Кафедра Информатики 
 
 

Курсовая  работа на тему:

«Модули и  Файлы» 
 
 

Выполнила:

 Студентка  1 курса, ф. АЭС,

гр. А-94 Сбитнева Ольга.

Проверила:

Парначева Т.И. 
 
 
 
 
 
 
 
 
 
 
 
 
 

Новосибирск

2010 г.

Содержание.

Введение…………………………………………………………………………………………………..  3

Часть 1. Модули в  Турбо Паскале.

Теоретические сведения по теме «Модули»………………………………………….  4

Алгоритм подпрограммы процедуры form (схема 1.)……………………………  6

Алгоритм подпрограммы процедуры vivod (схема 2.)………………………….   6

Алгоритм подпрограммы функции get_kol (схема 3.)……………………………  7

Алгоритм подпрограммы процедуры umn (схема 4.)……………………………  7

Алгоритм вызывающей программы………………………………………………………   8

Программа создания модуля…………………………………………………………………   8

Вызывающая программа………………………………………………………………………..  10

Результаты выполнения программы……………………………………………………..  11

Часть 2: «Файлы в Турбо Паскале»

Теоретические сведения по теме «Файлы»…………………………………………..  12

Схемы алгоритма…………………………………………………………………………………….  15

Программа создания файла…………………………………………………………………...  18

Программа обработки  записи………………………………………………………………..  19

Результаты выполнения программы……………………………………………………..  20

Заключение……………………………………………………………………………………………..  22

Список использованной литературы……………………………………………………..  23 
 
 
 
 
 
 

 

Введение.

Целью моей курсовой работы является приобретение и закрепление  навыков в организации вычислительных процессов и программирования на алгоритмическом языке Pascal. Основной частью курсовой является рассмотрение модульного программирования (использование процедур и функций) и файлов (рассмотрение функций открытия и закрытия файлов). 

 

Часть 1: «Модули в Турбо  Паскале». 

Стандартный Паскаль  не предусматривает раздельной компиляции подпрограмм с дальнейшей сборкой в общую программу. В Турбо Паскале эту задачу можно решить, создав и откомпилировав модуль.

Модули бывают стандартные  и нестандартные (созданные пользователем). Использование пользовательских модулей  позволяет повысить уровень структурированности программы, что обеспечивает их понятность и простоту модернизации. 

Структура модуля:

Unit имя_модуля;

interface

 …

раздел открытых описаний (раздел объявлений);

…

implementation

 раздел закрытых  описаний (раздел реализации);

begin

раздел операторов

end. 

-В разделе объявлений  описываются глобальные объекты:  константы, типы данных, переменные, а также заголовки всех процедур  и функций, которые могут быть  использованы в программах и  других модулях, которые подключают  данный модуль. В заголовках процедуры функций необходимо указывать формальные параметры с их типом. Все эти объекты хранятся в сегменте данных.

-В разделе реализации  записываются все подпрограммы, объявленные ранее, причем допускается  не писать список формальных  параметров в заголовках.

-В разделе операторов  помещаются те операторы, которые  должны быть выполнены до передачи  управления в вызывающей программе.  Этот раздел может отсутствовать  вместе со словом begin. 

Замечание: модуль сохраняется  на диске под тем же именем, что и сам модуль. Модуль компилируется, но не выполняется.

Структура вызывающей программы:

uses имя модуля;

var

…

раздел описания программы

…

begin

раздел операторов программы

end.

 

Задание.

Разработать модуль (схемы алгоритмов и программы), содержащие процедуры и функции, решающие  поставленную задачу:

Все элементы матрицы  умножить на число, равное количеству нулей в правом верхнем треугольнике.

Проектирование модуля.

Процедура  form.

Задание матрицы  размерностью [5*5] датчиком случайных  чисел. 

Процедура vivod.

Вывод матрицы. 

Функция  get_kol.

Поиск количества нулей  в верхнем правом верхнем треугольнике. Количеству  kol присваиваю 0. Цикл по строке от 1 до N и по столбцу от i до N. Проверяю условие x [i, j]=0. Если верно, то переменной kol присваиваю значение kol+1.  

Процедура  umn.

Каждый элемент  матрицы умножаю на количество нулей, полученных в правом верхнем треугольнике. Таким образом, формируется новая  матрица.

 

 

 
 
 
 
 
 
 

Схема 1. Алгоритм подпрограммы процедуры form.

 
 
 
 
 

Схема 2. Алгоритм подпрограммы процедуры vivod. 
 
 

 

 

 
 
 

     0 
 
 
 
 

Схема 3. Алгоритм подпрограммы функции get_kol.  

 
 
 
 
 
 
 
 
 
 

Схема 4. Алгоритм подпрограммы процедуры umn. 

Алгоритм вызывающей программы.                                                                                                                                       
 

 

 
 

 
 
 

Типы параметров в подпрограммах:

идентификатор                 назначение
N Константа, задающая размер матрицы.
Х Исходная матрица
Get_kol Переменной присваивается  значение функции get_kol
X1 Полученная матрица
   
 
 

Программа создания модуля: 

Unit mod_so; 

INTERFACE 

Uses crt;

const

N=5;

type

matr=array[1..N,1..N]  of integer;

procedure form(var X:matr);

procedure vivod(X:matr);

function get_kol(X:matr):integer;

procedure umn(X:matr; var X1:matr); 
 

IMPLEMENTATION 

procedure form(var X:matr);

var

I, j: integer;

begin

for i:=1 to N do

for j:=1 to N do

X[i,j]:=random(11)-5;

end; 

procedure vivod(X:matr);

var

i, j: integer;

begin

for i:=1 to N do

begin

for j:=1 to N do

write(X:[I, j]:4);

writeln;

end;

end; 

function get_kol(X:matr):integer;

var

I, j, kol: integer;

begin

kol:=0;

for i:=1 to N do

for j:=i  to N do

if X[i, j] = 0 then

kol:=kol+1;

get_kol:=kol;

end; 

procedure umn(X:matr; var X1:matr);

var

i, j, kol: integer;

begin

for i:=1 to N do

for j:=1 to N do

X1[i, j]:= X[i, j];

kol:= get_kol(X1);

writeln(‘Количество нулей в верхнем правом треугольнике матрицы: ’, kol);

for i:=1 to N do

for j:=1 to N do

X1[i, j]:=X1[i, j]*kol;

end; 

end.  
 

Вызывающая  программа: 

Begin clrscr;

randomize;

writeln(‘         Курсовую работу выполнила студентка А-94 Сбитнева О. В.’);

writeln(‘                                                    Вариант 20’);

writeln(‘Разработанный модуль содержит:’);

writeln(‘1. Процедуру формирования матрицы в интервале от -5 до 5’);

writeln(‘2. Процедуру вывода матрицы’);

writeln(‘3. Функцию поиска кол-ва нулей в верхнем правом треугольнике

                     матрицы');

writeln(‘4. Процедуру умножения элементов матрицы на кол-во нулей’);

writeln;

writeln(‘Исходная матрица:’);

form(A);

vivod(A);

writeln;

umn(A, A1);

writeln;

writeln(‘Полученная матрица:’);

vivod(A1);

readln;

end. 
 

Результаты выполнения программы: 

Курсовую работу выполнила студентка группы А-94 Сбитнева О. В.

                                                  Вариант 20

Разработанный модуль содержит:

  1. Процедуру формирования матрицы в интервале от -5 до 5
  2. Процедуру вывода матрицы
  3. Функцию поиска кол-ва нулей в верхнем правом треугольнике матрицы
  4. Процедуры умножения элементов матрицы на кол-во нулей
 

Исходная матрица:

-5      -1     1     0      0

-3      -2     2     4     -5

  5      -4     0      2    -3

-1      -4      1    -3    -4

  5       4    -1    -2      1

Количество нулей  в верхнем правом треугольнике маторицы: 3 

Полученная матрица:

-15    -3    3     0     0 

-9      -6    6   12   -15

15    -12   0    6    -9

-3     -12   3   -9   -12

15     12  -3   -6     3   

Часть 2: «Файлы в Турбо  Паскале».  

Основные понятия:

При решении класса задач, обрабатывающих большое количество данных редко обновляемых для  описания этих данных и хранения их используется файловый тип.

Файл – племенованная  область памяти на внешнем носителе, предназначенная для хранения различных данных.

Элементы файла  называется записями, нумерация записи с нуля.

Текущий указатель  указывает на обрабатываемую в данный момент запись и после обработки  смещается на одну запись вперед.

Каждый файл имеет  имя и может иметь расширение(до 3х символов), полное имя файла (спецификация) содержит имя диска и всех папок, а также имя файла.

При описании длина  файла не задается и ограничивается только объемом свободного пространства на внешнем носителе. 

Описание файловой переменной:

  1. В разде type: имя = file of базовый тип (кроме файлового);

                                    var

                                   идентификатор: имя;

  1. var

    идентификатор: file of базовый;

в зависимости от описания различают три типа файлов:

1)типизированные;

2)текстовые;

3)нетипизированные. 

По способу доступа  к записям файлы делятся на два класса:

а)файлы с непосредственным доступом(прямого доступа); для них  существует специальная процедура  перемещения текущего указателя  на нужную запись.

б)файлы последовательного  доступа; особенность их в том, чтобы  прочитать какой-то элемент или  записать на место какую-то информацию. Необходимо последовательно обработать все предыдущие записи, начиная сначала. 

Процедуры и функции  работы с файлами:

- процедура назначения. Связывает файловую переменную с существующим или создаваемым на диске физическим файлом: assign(переменная, специфика файла)

Эта же процедура  связывает файловую переменную с  логическим устройством.

- процедура инициализации  файла для чтения из него информации: reset(f).

Процедура устанавливает  текущий указатель на запись 0.

- процедура инициализации  файла для записи в него  информации: rewrite(f).

Создает пустой файл с указателем на нулевой записи.

- процедура закрытия  файла: close(f).

Эта процедура обязательно  должна присутствовать в программе  по созданию файла; при работе этой процедуры ликвидируются все  буферные переменные, однако связь  файловых переменных со спецификацией  остается.

- процедура переименования  файла: rename(f).

- процедура стирания файла: erase(f).

- процедура чтения  из файла:  read(f, список ввода).

- функция проверки  конца файла: eof(f).

- процедура записи  файла: write(f).

Замечания: списки ввода  и вывода должны содержать переменные того же типа, что и переменные, описанные файловые, f. Информация при чтении из файла и записи в него считывается и записывается через буфер. Размер буфера устанавливается автоматически, на основе размера записи файла. 

Типизированные файлы:

Они характерны тем, что длина любой компоненты одинакова и постоянна.

Для них существует дополнительный набор процедур и  функций.

а) процедура  seek(f,n); смещает текущий указатель на запись с номером n.

б) функция filesize(f); определяет число записи в файле.

в) функция filepos(f); определяет порядковый номер той записи, которая обрабатывается в данный момент.

г) процедура transcate(f); удаляет часть файла, начиная с текущей позиции до конца.

Особенность типизированного  файла в том, что он позволяет  считывать и записывать структурную  переменную одной командой. 

Задание. 

Создать файл, состоящий  из 20 записей:

Данные о работниках предприятия:

- № п/п;

- Табельный номер;

- Ф. И. О;

- № цеха;

- Основной оклад;

- Дополнительные  оплаты;

- Сумма к выдаче. 

Вывести данные о  работнике 4 цеха с самой большой  заработной платой. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Схемы алгоритма. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

Типы параметров в подпрограммах.

идентификатор назначение
N Константа, равная количеству записей
N, No, FIO, Ceh, oklad, dop, sum Поля записей
I, j Счетчик циклов
   
 

 

Программа создания файла: 

Program kurs2_1;

uses crt;

type

spisok=record

N: 1..20;

No: integer;

FIO: string[20];

Ceh: integer;

oklad: integer;

dop: integer;

sum: integer;

end;

const

list: array[1..20] of spisok=

((N:1; No:15; FIO:’Батурина А.Д.’; Ceh:5; oklad:15000; dop:1000; sum:16000);

(N:2; No:17; FIO:’Воскобоков Д.В.’; Ceh:3; oklad:15320; dop:1500; sum:15830);

(N:3; No:19; FIO:’Дудка В.Д.’; Ceh:4; oklad:14000; dop:2000; sum:16000);

(N:4; No:21; FIO:’Шаров А.А.’; Ceh:2; oklad:6000; dop:1000; sum:7000);

(N:5; No:23; FIO:’Зайцева М.В.’; Ceh:1; oklad:7530; dop:1500; sum:9030);

(N:6; No:25; FIO:’Игонин А.И.’; Ceh:7; oklad:10000; dop:2000; sum:12000);

(N:7; No:27; FIO:’Кузьмина К.В.’; Ceh:4; oklad:25330; dop:1000; sum:26330);

(N:8; No:29; FIO:’Ларинов С.С.’; Ceh:3; oklad:17000; dop:1500; sum:18500);

(N:9; No:31; FIO:’Осонина О.Д.’; Ceh:2; oklad:12050; dop:2000; sum:14050);

(N:10; No:33; FIO:’Панасеенко Т.В.’; Ceh:4; oklad:13000; dop:1000; sum:14000);

(N:11; No:35; FIO:’Рудакова В.В.’; Ceh:1; oklad:12000; dop:1500; sum:13500);

(N:12; No:37; FIO:’Солаценко Т.В.’; Ceh:5; oklad:11010; dop:2000; sum:13010);

(N:13; No:39; FIO:’Томченко А.Д.’; Ceh:4; oklad:3000; dop:1000; sum:4000);

(N:14; No:41; FIO:’Ухов  Л.В.’; Ceh:2; oklad:20050; dop:1500; sum:21550);

(N:15; No:43; FIO:’Фролова З.П.’; Ceh:1; oklad:17050; dop:2000; sum:19050);

(N:16; No:45; FIO:’Храмов Т.П.’; Ceh:3; oklad:11000; dop:1000; sum:12000);

(N:17; No:47; FIO:’Цаплина А.А.’; Ceh:5; oklad:13050; dop:1500; sum:14550);

(N:18; No:49; FIO:’Чадов А.А.’; Ceh:4; oklad:15050; dop:2000; sum:17050);

(N:19; No:51; FIO:’Шеремет Т.П.’; Ceh:3; oklad:17000; dop:1000; sum:18000);

(N:20; No:53; FIO:’Яблоков Я.П.’; Ceh:2; oklad:21000; dop:1500; sum:22500););

var

f: file of spisok;

i: integer;

begin clrscr;

assign(f,’.\sp.dat’);

rewrite(f);

writeln(‘N      Таб      ФИО      Nцеха     Осн.окл.       Доп.окл.        Сумма ’);

for i:=1 to 20 do

begin

write(f, List[i]);

with List[i] do

writeln(N:3, No:5, FIO:20, Ceh:5, oklad:10, dop:8, sum:9);

end;

writeln;

writeln(‘Файл создан’);

readln;

close(f);

end. 

Программа обработки записи: 

Program kurs2_2;

uses crt;

type

spisok=record

N: 1..20;

No: integer;

FIO: string[20];

Ceh: integer;

oklad: integer;

dop: integer;

sum: integer;

end;

var

i, max, k: integer;

s: array [1..N] of spisok;

f: file of spisok; 

procedure get_max;

begin

max:=0;

for i:=1 to N do

with s[i] do

if (max < sum) and (ceh = 4) then

begin

max:=sum;

k:=i;

end;

end;

begin clrscr;

assign(f,’.\sp.dat’);

reset(f);

for i:=1 to N do

begin

read(f, s[i]);

end;

writeln(‘N      Таб      ФИО      Nцеха     Осн.окл.       Доп.окл.        Сумма ’);

for i:=1 to N do

begin

with s[i] do

writeln(N:3, No:5, FIO:20, Ceh:5, oklad:10, dop:8, sum:9);

end;

writeln;

get_max;

writeln(‘Работник 4 цеха с самой большой з\п:’);

with s[k] do

writeln(N:3, No:5, FIO:20, Ceh:5, oklad:10, dop:8, sum:9);

readln;

close(f);

end. 

Результаты  выполнения программы:

№  Таб          ФИО                       №цеха    Осн.окл.   Доп.опл.   Сумма

1     15    Батурина А.Д.                5              15000       1000           16000

2     17    Воскобоков Д.В.           3               15320      1500           15830

3     19    Дудка В.Д.                     4                14000      2000           16000

4    21      Шаров А.А.                 2                6000         1000           7000

5    23      Зайцева М.В.             1                7530         1500           9030

6     25      Игонин А.И.               7                10000       2000           12000

7     27      Кузьмина К.В.           4                25330       1000           26330

8     29      Ларинов С.С.             3                17000       1500           18500

9     31      Осонина О.Д.            2               12050        2000           14050

10   33     Панасеенко Т.В.        4               13000        1000           14000

11   35     Рудакова В.В.             1              12000         1500           13500

12   37     Солаценко Т.В.          5              11010         2000           13010

13   39     Томченко А.Д.           4               3000          1000            4000

14   41      Ухов  Л.В.                   2              20050         1500           21550

15   43      Фролова З.П.            1              17050         2000           19050

16   45      Храмов Т.П.              3              11000         1000           12000 

№  Таб          ФИО                       №цеха    Осн.окл.   Доп.опл.   Сумма

17  47      Цаплина А.А.            5               13050         1500          14550

18  49      Чадов А.А.                 4               15050         2000          17050

19  51      Шеремет Т.П.           3               17000         1000          18000

20  53      Яблоков Я.П.            2               21000         1500          22500 

Работник 4 цеха с  самой большой з\п:

7   27   Кузьмина  К. В.             4               25330         1000         26330 
 
 
 
 
 
 
 
 
 
 

 

Заключение. 

На основе проделанной  работы я приобрела навыки использования  модулей в среде Турбо Паскаль, научилась работать с файлами и использовать записи. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Список  литературы:

Модули и Файлы