- •Первый семестр
- •Дальнейшее обучение программированию (по семестрам)
- •Рекомендуемая литература
- •I семестр Лекция 1
- •1.1 Алгоритм. Понятие алгоритма
- •1.2 Алгоритмические языки
- •1.3 Запись алгоритма
- •1.4 Элементарные структуры
- •Лекция 2
- •2.1. Договоренности о синтаксисе
- •2.2. Текст программы на Turbo Pascal
- •2.3 Элементарные операции
- •2.4. Таблица перевода для структур
- •Алгоритм:
- •Текст программы
- •2.5 Практические рекомендации по решению задач
- •3.2. Частные случаи для структуры цикла
- •3.3 Массивы
- •Лекция 4
- •4.0 Требования к защите бальных задач
- •4.1 Начало систематического изложения Turbo Pascal (tp)
- •Лекция 5
- •5.1 Простые типы данных
- •5.1.1 Перечислимый тип
- •5.1.2 Интервальный тип
- •5.1.3 Целочисленные типы
- •5.1.4 Данные типа char
- •5.1.6 Вещественные типы данных
- •Лекция 6
- •6.1 Структура программы на Паскале
- •6.2 Процедуры для стандартного ввода/вывода
- •6.3 Массивы. Регулярный тип
- •6.4 Для работы с массивами – шаблоны
- •Лекция 7
- •7.1 Строки
- •7.2 Записи
- •Лекция 8
- •8.1 Множества
- •8.2 Файлы
- •8.3 Процедуры открытия и закрытия файлов:
- •8.4 Процедуры ввода/вывода:
- •Лекция 9
- •9.1 Текстовые файлы.
- •9.2 Проект программы:
- •9.3 Простейший сканер.
- •9.4 Копия любого файла
- •Лекция 10
- •10.1 Процедуры и функции
- •10.2 Передача параметров в процедуры и функции
- •10.3 Глобальные переменные. Перекрытие (экранирование)
- •10.4 Процедурные типы
- •10.6 Рекурсия. Косвенная рекурсия
- •Лекция 11
- •11.1 Статическая и динамическая память программы
- •11.2 Динамическая память (куча, heap) с точки зрения тр
- •11.3 Операции над указателями
- •11.4 Пояснения с помощью картинки
- •11.5 Динамическая цепочка
- •Лекция 12
- •12.1 Цикл жизни программы. Проект программы
- •12.2 Характеристики качества программ
- •12.3 Программное окружение
- •12.4 Модули
- •Пример Печать данного перечислимого типа. Вот простой пример модуля (пусть имя файла с представленным ниже текстом My_Unit.Pas):
- •12.5 Обзор модуля System
- •12.5.1 Процедуры и функции, обслуживающие файловую систему
- •Лекция 13
- •13.1 Модуль crt - средства работы с экраном, клавиатурой и др.
- •13.2 Обзор примеров программ
- •13.3 Процедуры и функции модуля Crt
- •Лекция 14
- •14.1 Модуль dos - работа с файловой системой.
- •14.1.1 Прерывания.
- •14.1.2 Процедуры и функции модуля Dos
- •Лекция 15
- •15.1 Модуль Graph.
- •15.1.1 Общие сведения:
8.3 Процедуры открытия и закрытия файлов:
RESET(F) - открытие существующего файла F на чтение (файловая переменная F связана с существующим файлом MS DOS процедурой ASSIGN). В стандартном Паскале при открытии файла на чтение в динамической памяти создается буфер файла, в который помещается первая запись файла. Для нетипизированных файлов размер записи может быть указан вторым параметром. В ТР буфером является сама файловая переменная, размер буфера в примере пункта 8.2. Если открываемый на чтение файл не существует в файловой системе, возникает ошибка этапа выполнения программы.
REWRITE(F) – создает и открывает на запись новый файл. Если файловая переменная F связана с существующим файлом, то данные этого файла уничтожаются. В стандартном Паскале при открытии файла на запись в динамической памяти создается буфер файла для промежуточного хранения записей. Для нетипизированных файлов размеры записей могут задаваться вторым параметром. В ТР буфером является сама файловая переменная, размер буфера в примере пункта 8.2.
CLOSE(F) - закрытие файла F. При закрытии файла записи содержимое буфера выталкивается в файл. В стандарте Паскаля процедура закрытия файла разрывает связь файловой переменной (указателя) с буфером и уничтожает буфер в динамической памяти.
8.4 Процедуры ввода/вывода:
WRITE(F, E) - запись значения выражения E базового типа в файл; (не применима к нетипизированным файлам)
READ(F, V) - чтение из файла записи в переменную; (не применима к нетипизированным файлам)
BLOCKREAD; BLOCKWRITE - только для нетипизированных файлов.
SEEK(F, n) - делает доступной для обработки запись n файла F (эта процедура не применима к текстовым файлам);
EOF(F) - функция, возвращает TRUE, если достигнут конец файла F.
При работе с файлами в TP очень полезна функция IORESULT, которая возвращает значение кода ошибки выполнения последней операции ввода/вывода. Следующий фрагмент является шаблоном для открытия файла на чтение. Он позволяет избежать прерывания программы при попытке открытия на чтение не существующего файла
repeat
writeln('введите имя файла'); readln(s);
assign(f,s);
{$I-} {отключение режима прерывания выполнения программы при возникновении ошибки в/в}
reset(f);
{$I+} {включение режима прерывания выполнения программы при возникновении ошибки в/в}
i:=IORESULT;
if i<>0 then begin
writeln('Ошибка',i:3);
writeln('Попробуйте еще');
end;
until i = 0;
Здесь i – переменная типа integer, s – строка. {$I-} – псевдокомментарий – директива компилятору при выполнении дальнейших действий снять контроль проверки правильности выполнения операции ввода/вывода. Если открытие файла F прошло успешно, то IORESULT возвращает значение 0, в противном случае IORESULT возвращает код ошибки, отличный от нуля.
Лекция 9
9.1 Текстовые файлы.
Текстовый файл (описатель text в отличие от типизированного файла file of char) представляет собой файл символов, сгруппированных в строки. Разбиение на строки обеспечивается признаком (комбинаций символов) конца строки. Для текстовых файлов существует специальный вид операций чтения и записи (read, write, readln, writeln), который позволяют считывать и записывать значения, тип которых отличается от символьного типа (это действительные, целочисленные типы и строки, выводить можно также и данные булевского типа). Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(f,i), где i - переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности как десятичного числа, и сохранению его в i. Предопределены две стандартные переменные типа text – это Input и Оutput. Стандартная файловая переменная Input – это доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы (обычно это клавиатура), а стандартная файловая переменная Оutput – это доступный только для записи файл, связанный со стандартным файлом вывода операционной системы (обычно это дисплей). Перед началом выполнения программы файлы Input и Оutput автоматически открываются, как если бы были выполнены следующие операторы:
Assign(Input,'con'); Reset(Input);
Assign(Output,'con'); Rewrite(Output);
После завершения работы программы эти файлы автоматически закрываются.
Обращение к процедурам ввода и вывода для текстовых файлов организуется так:
Read(f,<список элементов ввода>),
write(f,<список элементов вывода>),
readln(f,<список элементов ввода>),
writeln(f,<список элементов вывода>)
f – имя файловой переменной. Список элементов ввода представляет собой список имен переменных символьного, целочисленного, действительного или строкового типа через запятую. Данные в строке читаемого текстового файла трактуются как символьное представление данных соответствующего типа.
Данные целого типа читаются с текущего символа, пропуская лидирующие пробелы, до первого символа, синтаксически не совместимого с представлением целого числа, либо до конца строки файла.
Переменная типа CHAR принимает значение текущего символа.
Переменная-строка принимает символы, пока не будет достигнута ее максимальная длина, либо конец строки файла.
Данные вещественного типа читаются последовательно из строки файла, пока не будет достигнут символ, синтаксически не совместимый с представлением вещественного числа, либо конец строки файла.
Пример:
VAR I, J : INTEGER; S :STRING[100]; CH : CHAR;
...
READ(f, I, J, CH, S);
Пусть читаемые данные: 36 24 ABCDEFGHIJKLMNOPQRSTUVWXYZ.
После выполнения процедуры READ:
I =36, J = 24, CH = ' ', S = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
При завершении операции ввода данных во все переменные списка элементов ввода процедура readln осуществляет переход на новую строку текстового файла. В ТР, начиная с седьмой версии, при достижении конца строки чтение данных из текстового файла продолжается со следующей строки, если список ввода не исчерпан. Однако, с целью сохранения мобильности и читабельности программы, не следует пользоваться этим при проектировании ввода данных. Рекомендуется осуществлять переход на другую строку явным образом. Вот два примера:
program ReadEoln {Плохое решение};
var c:char; f:text;
begin
assign(f,'text.txt');
reset(f); {Нужно использовать шаблон безопасного открытия}
while not(eof(f)) do
begin
read(f,c);
write(c);
end;
close(f);
writeln;
readln;
end.
program Copy {хорошее решение, шаблон!};
var c:char; f:text;
begin
assign(f,'text.txt');
reset(f){Нужно использовать шаблон безопасного открытия};
while not(eof(f)) do
begin while not(eoln(f)) do
begin
read(f,c);
write(c);
end;
readln(f);
writeln;
end;
close(f);
writeln;
readln;
end.
Список элементов вывода представляет собой список выражений (в частности, переменных и констант) символьного, строкового, целочисленного действительного и булевского типа. После каждого выражения может указываться через двоеточие характеристика длины, а для выражений действительного типа еще и характеристика точности. При завершении операции вывода данных процедура writeln осуществляет переход на новую строку текстового файла.
Вот два примера работы с текстовыми файлами (предложены Путинцевым А).
{Добавление записей в файл данных о дневной температуре воздуха}
program aprec;
var
DayTemp:record {дневная темперарура}
day:integer; {число}
month:integer; {месяц}
temper:integer; {температура}
end;
f:text;{ файл дневной температуры}
begin
assign(f,'a:\temperat.txt');
append(f); {открываем файл для добавления записи}
{Нужно использовать шаблон безопасного открытия}
write('Введите в одной строке, разделяя пробелами');
writeln(' число, номер месяца и температуру');
write('->');
with DayTemp do
begin
readln(day,month,temper);
writeln(f,day,' ',month,' ',temper);
{Следовало бы указать характеристики длины}
end;
close(f);
writeln('Данные добавлены');
end.
{Чтение записей из файла}
program readrec;
var
DayTemp:record {дневная температура}
day:integer; {число}
month:integer; {месяц}
temper:integer; {температура}
end;
f:text; {файл дневной температуры}
mes:integer;{номер месяца}
n:integer;{кол-во дней месяца, о которых есть данные в файле}
summ:integer; {сумма температур месяца}
sredn:real; {средняя температура}
begin
n:=0;
summ:=0;
writeln('Вычисление среднемесячной температуры.');
write('Месяц->');
readln(mes);
assign(f,'a:\temperat.txt');
reset(f);{Нужно использовать шаблон безопасного открытия}
while NOT EOF(f) do begin
with DayTemp do readln(f,day,month,temper);
{Область действия оператора with}
if DayTemp.month=mes
then begin
n:=n+1;
summ:=summ+DayTemp.temper;
end;
end;
close(f);
if n<>0 then begin
sredn:=summ/n;
writeln('Средняя температура:',sredn:6:3);
end
else writeln('Данных о температуре за',mes:3,' месяц нет.');
end.