
- •Первый семестр
- •Дальнейшее обучение программированию (по семестрам)
- •Рекомендуемая литература
- •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 Общие сведения:
9.2 Проект программы:
Точная формулировка задачи
Типы данных
Структуры данных
Процедуры и функции
Алгоритм
9.3 Простейший сканер.
Формулировка задачи: Программа читает текстовый файл, выделяет слова и распознает идентификаторы. Имя текстового файла запрашивается. На экран выдается список слов по одному слову в строку, идентификаторы помечаются символом *. Разделителем не является признак конца строки.
Спецификации (типы данных и структуры данных):
Определяются три состояния чтения текста:
ident – подозрение на идентификатор,
news – начало чтения нового слова,
ordin – читаемое слово не идентификатор.
Состояния объединены в перечислимый тип status.
chars – множество всех символов, letter, digit и separ - подмножества букв, цифр и разделителей слов, соответственно.
Процедуры и функции - нет.
Алгоритм: Чтение (из файла) посимвольно. Определяется изменение состояния в зависимости от состояния s и вновь прочитанного символа c. Начальное состояние - news.
Входной алфавит V – буква, цифра, разделитель, символ.
Алфавит состояний Q – News, Ident, Ordin.
Функция переходов f:QVQ:
|
буква |
цифра |
разделитель |
символ |
News |
Ident |
Ordin |
News |
Ordin |
Ident |
Ident |
Ident |
News |
Ordin |
Ordin |
Ordin |
Ordin |
News |
Ordin |
Начальное состояние – News
Множество заключительных состояний – {}
{Symplest scaner}
program Symplest_Scanner;
{Программа читает текстовый файл,
выделяет слова и распознает идентификаторы}
type
status=(ordin,ident,news);
chars=set of char;
var
letter,digit,separ:chars;
anytxt:string;
s:status;
i:integer;
c:char;
F:text;
begin
letter:=['A'..'Z','a'..'z'];
digit :=['0'..'9'];
separ :=[' '];
repeat
writeln(' Введите имя обрабатываемого файла');
readln(anytxt);
assign(F,anytxt);
{$I-} reset(F); {$I+}
i:=IOResult;
if i<>0 then
writeln(' Ошибочка ',i:3,' , попробуйте еще раз');
until i=0;
s:=news;
while not eof(F) do
begin
while not eoln(F) do
begin
read(F,c);
write( c);
case s of
news : if c in letter then s:=ident
else if not(c in separ) then s:=ordin;
ident: if c in separ then
begin s:=news; writeln('*') end
else
if not((c in letter) or (c in digit))
then s:=ordin;
ordin: if c in separ
then begin s:=news; writeln end;
end;
end;
if s=ordin then begin s:=news; writeln end;
if s=ident then begin s:=news; writeln(' *') end;
readln(F);
end;
end.
9.4 Копия любого файла
program Copy;
var c:byte;
f,g:file of byte;
begin
assign(f,'file.abc');
assign(g,’file_copy.abc’);
reset(f); rewrite(g);
while not(eof(f)) do
begin
read(f,c);
write(g,c);
end;
close(f);
end.
Лекция 10
10.1 Процедуры и функции
При записи алгоритма на алгоритмическом языке высокого уровня (в том числе и на ТР) пользователю предоставляется возможность создавать в рамках разрабатываемой программы свои собственные операторы (процедуры) и операции (функции).
Процедуры и функции (подпрограммы) представляют собой записи на алгоритмическом языке частей алгоритма (подалгоритмов). В разделе описаний процедур и функций секции описаний программы помещаются тексты описания процедур и функций, в секции действий программы осуществляется обращение к процедурам и функциям программы (вызов процедур и функций).
Тексты описания подпрограмм устроены так же, как и сами программы – начинается описание с заголовка, затем идет секция описаний подпрограммы, затем секция действий подпрограммы. Причем в секции описаний подпрограммы могут быть описаны свои подпрограммы, обращение к которым осуществляется в секции действий подпрограммы. Поэтому было бы правильнее говорить не о программах и подпрограммах, а о вызывающих и вызываемых подпрограммах.
procedure <имя>(<формальные параметры>);{заголовок процедуры}
<секция описаний процедуры>
begin
<секция действий процедуры>
end;
function <имя>(<формальные параметры>):<тип>;{заголовок функции}
<секция описаний функции>
begin
<секция действий функции>
end;
Заголовок подпрограммы служит для организации обмена данными (параметрами) между программой и подпрограммой (исходные данные для работы подпрограммы и результаты работы подпрограммы). В функции один из результатов работы подпрограммы приписывается ее имени, тип результата (и функции) – <тип> – указывается в заголовке. В качестве типа <тип> может использоваться любой простой, строковой или ссылочный. В секции описаний подпрограммы приводятся описания локальных (внутренних) меток, констант, типов данных, переменных и подпрограмм, в секции действий подпрограммы записывается алгоритм работы подпрограммы. При обращении к подпрограмме указывается ее имя и фактические параметры.
Формальные параметры представляют собой список через «точку с запятой» предложений вида:
[var/const]<список переменных>:<имя типа>
Необязательные параметры var и const указывают способ передачи данных. Ключевое слово var означает, что данные передаются по адресу. Такие данные называются параметрами-переменными. Ключевое слово const означает, что данные передаются по адресу, но с защитой от изменения их значений. Такие данные называются параметрами-константами. Если перед списком переменных ключевое слово отсутствует, то данные передаются по значению. Такие параметры называются параметрами-значениями.
Обращение к подпрограммам осуществляется по следующей схеме:
Вызов процедуры (как самостоятельного оператора):
<имя>(<список фактических параметров>)
Вызов функции (в выражении, где допустим тип функции):
…<имя>(<список фактических параметров>)…
В качестве фактических параметров могут использоваться переменные, константы, выражения, в зависимости от способа передачи данных.
Тип передачи |
Ключевое слово |
Фактический параметр |
По значению |
- |
Любые выражения соответствующего типа |
По адресу |
var |
Имена переменных |
По адресу |
const |
Любые выражения соответствующего типа |
Между формальными (в описании подпрограммы) и фактическими (при обращении к подпрограмме) параметрами должно быть согласование по количеству, типам и порядку следования. (!)
Интерпретируя подпрограммы как подалгоритмы, можно считать параметры-значения исходными данными подалгоритма, а параметры-переменные результатами работы подалгоритма. Под параметры-значения подпрограммы отводится память в подпрограмме, в которую заносятся значения фактических параметров при вызове подпрограммы. Все действия подпрограммы над параметрами-переменными осуществляются непосредственно над переменными, являющимися фактическими параметрами. Поэтому значения, полученные параметрами-переменными в подпрограмме, будут доступны в вызывающей программе.
Параметры-константы целесообразно использовать в случаях, если требуется передавать структуры данных, занимающие большой размер памяти, но изменять исходные значения параметров с алгоритмической точки зрения недопустимо. В результате экономно используется оперативная память и одновременно гарантируется целостность исходных данных.
Вот примеры использования подпрограмм (процедур и функций) в Паскале:
1. Программа вычисляет величину y=max(min(x1,x2,x3),max(min(x3,x5,x4),x4))
program minmax;
var y,x1,x2,x3,x4,x5:real;
function max(a,b:real):real;
begin if a>b then max:=a else max:=b end;
function min(a,b:real):real;
begin if a<b then min:=a else min:=b end;
begin
readln(x1,x2,x3,x4,x5);
y:=max(min(x1,min(x2,x3)),max(min(x3,min(x5,x4)),x4));
writeln(y)
end.
Обратите внимание на порядок обращений к подпрограммам!
2. Программа подсчитывает количество символов ‘A’,’B’ и ‘C’ в введенной пользователем строке:
program ABC;
var s:string; i:integer;
procedure kolABC(s:string; var kolA,kolB,kolC:integer);
begin
kolA:=0; kolB:=0; kolC:=0;
for i:=1 to length(s) do
case s[i] do
‘A’: kolA:=kola+1;
‘B’: kolB:=kolB+1;
‘C’: kolC:=kolC+1;
end;
end;
begin
readln(s);
kolABC(s,kolA,kolB,kolC);
writeln(kolA,kolB,kolC);
end.
Функция ввода данного типа integer с защитой:
function enter_integer(s:string):integer;
var i,n:integer;
begin
repeat
readln(s);
val(s,n,i);
if i=0 then enter_integer:=n
until i=0;
end;