Программирование на языке «Турбо-Паскаль»
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«ТОМСКИЙ
ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Факультет ИДО
Кафедра ОСУ
Направление:
Прикладная информатика в экономике
Курсовая работа
по «Информатике и программированию»
тема
«Программирование
на языке «Турбо-Паскаль»»
Выполнили: студенты
гр. З-8581 ____________ М. В. Рыболов
Проверил
____________ И. П. Степанова
Томск 2009
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«ТОМСКИЙ
ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
ЗАДАНИЕ
на выполнение
курсовой работы
Студенту гр. З-8581 М. В. Рыболову
1. Тема курсовой работы: “Программирование на языке Турбо-Паскаль”
2. Срок сдачи студентом готовой работы: июня 2009 года.
3. Исходные данные к работе: задание на курсовою работу (вариант 14)
4. Содержание текстового
документа (перечень подлежащих разработке вопросов)
5. Дата
выдачи задания на выполнение курсовой
работы: 2 февраля 2009 года.
Руководитель_______________ И.П. Степанова
(подпись,
дата)
Задание
принял к исполнению
__________________________ М. В. Рыболов
(подпись,
дата)
Реферат
Курсовая работа 24 с., 6 рисунков, 3 приложения.
Ключевые слова: Работа с файлами, Работа с массивами
Цель работы - разработка надежного и гибкого кода для требуемого комплекса программ.
В
результате исследования были созданы
и опробованы программы с учетом
требований.
Содержание
Введение
Программирование,
как наука, всё шире и шире охватывает
различные области нашей жизни.
Но даже в основе самых современных
языков программирования лежат базовые
принципы и понятия. В данной работе
продемонстрированы базовые знания,
с помощью языка
Глава 1. Постановка задачи
1.1. Задание с использованием итерационных циклов
Спроектировать программу обработки членов ряда до члена ряда с заданной точностью (табл. 15), вывода требуемого результата и значения количества итераций (этапов) цикла.
Для вычисления текущего члена ряда использовать рекуррентную формулу.
Таблица 1
| 1. | Вычислить сумму
членов ряда:
до члена ряда , где |
1.2. Обработка элементов массива
Спроектировать программы по обработке значений элементов массивов, задавая их значения в разделе констант (в Turbo Pascal – это CONST).
Таблица 2
| 1. | Дан массив C(30). Подсчитать количество элементов и вывести номера их позиций, которые не попали в интервал значений [-3, 3]. |
| 2. | Дан массив Z(20). Найти среднюю сумму отрицательных элементов и среднее произведение положительных элементов. |
| 3. | Дан массив Q(24). Осуществить в нём перестановку: в каждой тройке элементов на первое место поставить максимальное. Изменённый массив распечатать. |
| 4. | Заполнить матрицу
Q(7,7) следующим образом:
, то есть по главной диагонали должны стоять нули, а остальные значения должны быть равны трём. Заполненную матрицу вывести на экран. |
1.3. Файлы
Составить программу обработки пяти записей заданной структуры из созданного ранее файла во внешнем представлении (файл имеет в программе тип описателя TEXT).
В программе создать новый файл во внутреннем представлении (файл имеет описатель FILE OF…), в который переписать часть записей по заданному условию.
Таблица 3
| Ф.И.О. студента | Вес (кг) | Рост (см) |
| Нгуен Хонг Шон | 64,5 | 170 |
В новый файл вывести список студентов, вес которых больше 60 кг. Организовать изменение записи, удаление записи, создание записи через меню, с использованием процедур.
Глава 2. Реализация проекта
2.1. Основная схема решения задания с использованием итерационных циклов
Для решения задач подобного типа используем рекуррентную формулу. В нашем случае:
запись типа , приводим к виду
, где
- предыдущее значение функции. Уравнение
получившегося типа нетрудно реализовать
в программном коде. Листинг программы
приведён в приложении А. Результат работы
программы приведён на рис. 1.
Рис. 1
2.2. Основная схема решения задач на элементы массива
Решение задач подобного рода сводится к организации циклического перебора элементов массива. В случае с одномерными массивами обходимся одним циклом, в случае с двумерными – двумя (вложенный цикл). Листинг программ приведён в приложении Б. Результат работы программ приведён на рис. 2, рис.3, рис. 4 и рис. 5 соответственно.
Рис. 2
Рис. 3
Рис. 4
Рис. 5
2.3. Основная схема решения задач с файлами
Прежде всего, необходимо понять, что такое файл. Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов». В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. Следует помнить, что физические файлы на магнитных дисках и переменные файлового типа в программе на Паскале – объекты различные. Переменные файлового типа в Паскале могут соответствовать не только физическим файлам, но и логическим устройствам, связанным с вводом/выводом информации. Например, клавиатуре и экрану соответствуют файлы со стандартными именами Input, Output.
Как известно, каждый тип данных в Паскале, вообще говоря, определяет множество значений и множество операций над значениями этого типа. Однако над значениями файлового типа Паскаля не определены какие-либо операции, в том числе операции отношения и присваивания, так что даже такое простое действие, как присваивание значения одной файловой переменной другой файловой переменной, имеющей тот же самый тип, запрещено. Все операции могут производиться лишь с элементами (компонентами) файлов. Естественно, что множество операций над компонентами файла определяется типом компонент.
Переменные файлового типа используются в программе только в качестве параметров собственных и стандартных процедур и функций.
Для работы с файлами используют следующие стандартные функции и процедуры:
EOF (var F: File):Boolean,
где: 1) EOF ("End Of File" - "конец файла") - имя функции;
2) F - имя переменной файлового типа.
Данная
функция является булевской функцией.
Позволяет определить готовность файла
к чтению, либо к записи информации. Если
указатель файла продвинулся за конец
файла (готовность к записи), то эта функция
возвращает значение TRUE, во всех остальных
случаях эта функция возвращает значение
FALSE.
FilePos (var F: File of Type): Integer;
FilePos (var F: File) : Integer,
где: 1) FilePos ("File Position" - "позиция файла") - имя функции;
2) F - имя переменной файлового типа.
Данная
функция (типа Integer) возвращает значение
текущей позиции указателя
FileSize (var F: File of Type):Integer;
FileSize (var F: File) :Integer,
где: 1) FileSize ("File Size" - "размер файла") - имя функции;
2) F - имя переменной файлового типа.
Данная
функция (типа Integer) возвращает размер
файла, т.е. число компонентов файла. Если
FileSize(F)=0, то файл является пустым. Функции
FilePos() и FileSize() не применимы к текстовым
файлам!
Assign (var F: File; Name: String);
Assign (var F: File of Type; Name: String),
где: 1) Assign ("назначить") - имя процедуры;
2) F - имя файловой переменной (логическое имя файла);
3) Name - имя файла на диске (физическое имя файла). Name -
строковое выражение, порождающее любое допустимое имя файла. Это имя
связывается
с файловой переменной F, и в дальнейшем
все операции с F будут производиться
над дисковым файлом Name. Данная процедура
должна выполняться перед использованием
файла! После выполнения этой процедуры
Name и F отождествляются, т.е. отождествляются
логическое и физическое имена файла.
Reset (var F: File),
где: 1) Reset ("переустановить") - имя процедуры;
2) F - имя переменной файлового типа.
Процедура
открывает файл F для чтения и
ставит указатель на начало первого
элемента файла (на элемент с номером 0).
Файловая переменная F должна соответствовать
уже существующему на диске файлу, иначе
возникает ошибка: "I/О error" ("Input/Output
error" - "ошибка ввода-вывода").
Rewrite (var F: File),
где: 1) Rewrite ("установить на запись") - служебное слово;
2) F - имя переменной файлового типа.
Процедура
открывает файл F для записи, "очищает"
его и помещает указатель на начало
первого элемента файла. Существующий
файл с данным именем будет уничтожен.
Дисковый файл, организуемый с помощью
процедуры Rewrite, создается пустым (не
со- держащим элементов).
Read (var F: File of Type; var V: Type),
где: 1) Read ("читать") - имя процедуры;
2) F - имя переменной файлового типа;
3) V - имя переменной (или список из нескольких переменных,
разделенных
запятыми), совпадающей по типу с
типом элементов файла. Type.Каждая
переменная считывается с дискового
файла, и после окончания чтения
файловый указатель перемещается на
следующую компоненту файла.
Write (var F: File of type; var V: Type),
где: 1) Write ("писать") - имя процедуры;
2) F - имя переменной файлового типа;
3) V - имя переменной (или список нескольких переменных, разделенных
запятыми),
совпадающей по типу с типом элементов
файла Type. Каждая переменная записывается
в дисковый файл, и после окончания операции
записи файловый указатель перемещается
на следующую компоненту файла. После
окончания работы с файлом, он должен быть
закрыт, иначе результат будет потерян.
Close (var F: File),
где: 1) Close ("закрыть") - служебное слово;
2) F - имя переменной файлового типа.
Дисковый
файл, отождествленный с переменной
F, закрывается и в каталог диска
вносятся необходимые изменения.
Seek (F,n),
где: 1) Seek ("искать") - имя процедуры;
2) F - имя переменной файлового типа;
3) n - целочисленное выражение.
Эта процедура перемещает указатель файла на компоненту файла с номером n (номер первой компоненты файла равен 0).
Truncate (var F),
где:1) Truncate - имя процедуры;
2) F - имя переменной файлового типа.
Эта процедура
уничтожает часть файла от текущей позиции
указателя до конца в Паскале.
С помощью вышеизложенных
стандартных процедур и функций
составляем программу. Листинг программы
приведён в приложении В. Результат
работы программы приведён на рис. 6.
Рис. 6
Заключение
В
ходе проделанной работы были рассмотрены
и использованы основные методы программирования
на языке «Турбо Паскаль». Все программа
работоспособны. Поставленные задачи
выполнены.
Приложение А
PROGRAM KURSIT1;
VAR
SUM,X,Y,Z,F,S,E:REAL;
I,J:INTEGER;
BEGIN
E:=0.0001;
WRITELN('Введи число X больше 1');
READLN (X);
I:=1;
Y:=0;
F:=1/X;
SUM:=1/X;
Z:=0;
WHILE (ABS(F)>E) DO BEGIN
I:=I+1;
Y:=(2*(I-1)-1)/((2*I-1)*X*X);
F:=Y*F;
SUM:=SUM+F;
END;
WRITELN('Значение функции F=',F:15:10,' Сумма=',SUM:15:10,' Количество=',I);
READLN;
END.
Приложение Б
PROGRAM KURS1;
CONST C:ARRAY[1..30] OF INTEGER=(1,2,3,3,2,5,5,1,5,3,
3,5,5,7,4,0,-1,-2,-5,-4,
VAR
S:ARRAY[1..30] OF INTEGER;
I,N:INTEGER;
BEGIN
N:=0;
FOR I:=1 TO 30 DO BEGIN
IF (C[I]<-3) OR (C[I]>3) THEN BEGIN
N:=N+1;
WRITELN(i,'-ый элемент = ',C[I]);
END;
WRITELN('Количество =',N:2);
READLN;
END.
PROGRAM KURS2;
CONST Z:ARRAY[1..20] OF INTEGER=(1,2,3,3,2,5,5,1,5,3,
VAR
I,ISUM,IPR:INTEGER;
PR,SUM:REAL;
BEGIN
ISUM:=0;
IPR:=0;
SUM:=0;
PR:=1;
FOR I:=1 TO 20 DO BEGIN
IF Z[I]>0 THEN BEGIN
PR:=PR*Z[I];
IPR:=IPR+1;
END;
IF Z[I]<0 THEN BEGIN
SUM:=SUM+Z[I];
ISUM:=ISUM+1;
END;
PROGRAM KURS3;
CONST Q:ARRAY[1..24] OF INTEGER=(1,2,3,4,5,6,7,
VAR
I,K,L:INTEGER;
BEGIN
K:=0;
L:=0;
I:=3;
WHILE I<=24 DO BEGIN
IF Q[I]>Q[I-1] THEN BEGIN
IF Q[I]>Q[I-2] THEN BEGIN
K:=Q[I];
L:=I;
END
ELSE BEGIN
K:=Q[I-2];
L:=I-2;
END;
END
ELSE
IF Q[I-1]>Q[I-2] THEN BEGIN
K:=Q[I-1];
ELSE BEGIN
Q[L]:=Q[I-2];
Q[I-2]:=K;
I:=I+3;
END;
FOR I:=1 TO 24 DO WRITE(Q[I],',');
READLN;
END.
PROGRAM KURS4;
VAR
Q:ARRAY[1..7,1..7] OF INTEGER;
I,J:INTEGER;
BEGIN
FOR I:=1 TO 7 DO BEGIN
FOR J:=1 TO 7 DO BEGIN
IF I=J THEN Q[I,J]:=0
ELSE Q[I,J]:=3;
END;
END;
FOR I:=1 TO 7 DO BEGIN
WRITELN;
FOR J:=1 TO 7 DO
WRITE(Q[I,J]);
END;
READLN;
END.
Приложение В
PROGRAM kurs;
type
FIO=string[20];
VES=REAL;
ROST=integer;
STUD=record
STUDFIO:FIO;
STUDVES:VES;
STUDROST:ROST;
end;
var i,j,m,n,k,l:integer;
BFile:file of STUD;
BFile2:file of STUD;
work:STUD;
temp:STUD;
vid:byte;
End_menu:boolean;
BD:string[20];
procedure name_file;
begin
BD:='DAV.txt';
end;
procedure Add_rec;
begin
writeln('Запись номер ',FilePos(BFile)+1);
with work do
begin
write('FIO: ');
readln(STUDFIO);
write('VES: ');
readln(STUDVES);
write('ROST: ');
readln(STUDROST);
write(BFile,work);
end;
end;
procedure Create_new_file;
var ind, count:integer;
begin
name_file;
assign(BFile,BD);
rewrite(BFile);
write('Введи количество записей: ');
readln(count);
for ind:=1 to count do
Add_rec;
close(BFile);
end;
procedure Output_rec;
begin
read(BFile,work);
with work do
begin
write('Номер ',FilePos(BFile),' ');
writeln(STUDFIO ,' ',STUDVES:4:1,' ',STUDROST);
end;
end;
procedure Output_all_rec;
begin
name_file;
assign(BFile,BD);
{$I-}
reset(BFile);
{$I+}
if IOresult=0 then
begin
seek(BFile,0);
while(not Eof (BFile))do
Output_rec;
close(BFile);
end
else
writeln('не могу найти файл ', BD);