Курс лекций для специальности «Прикладная математика» Первый семестр

Вид материалаКурс лекций

Содержание


12.1 Цикл жизни программы. Проект программы
12.2 Характеристики качества программ
12.3 Программное окружение
Структура модуля
Options/Directories/Unit Directories
12.5 Обзор модуля System
12.5.1 Процедуры и функции, обслуживающие файловую систему
12.5.2 Процедуры управления работой программы
12.5.4 Функции для работы с указателями
Пример - программа, вычисляющая сумму
12.6 Список процедур и функций модуля
Процедуры динамического распределения памяти
Функции динамического распределения памяти
Функции преобразования
Арифметические функции
Функции порядкового типа
Строковые процедуры
Строковые функции
Функции для работы с указателями и адресами
Процедуры разного назначения
...
Полное содержание
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   13

Лекция 12

12.1 Цикл жизни программы. Проект программы


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

Проектирование  Кодирование ОтладкаТестирование Ведение

Проектирование программы – это основной этап зарождения программы. Именно на этом этапе закладывается качество будущей программы.

Проектирование = типы данных + структуры данных + процедуры и функции + алгоритмы

На этапе проектирования программы определяется язык (или языки) программирования для реализации проекта.

Кодирование – воплощение проекта в коды на выбранном алгоритмическом языке. Творческая составляющая этапа кодирования ограничена рамками проекта. От кодировщика во многом зависит читабельность текста программы.

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

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

12.2 Характеристики качества программ


Существует очень много различных характеристик качества программы. Значимость их в критериях качества программы в целом зависит от назначения и условий функционирования программы. Невозможно разработать единый критерий качества для всех программ. Вот некоторые из характеристик качества программы:
  • Целесообразность. Программа выполняет функцию, для которой она предназначена.
  • Эффективность. Программа соответствует требованиям и ограничениям к условиям выполнения, оговоренным в техническом задании на разработку программы.
  • Модифицируемость (или открытость). Доступность исходного кода программы. Иногда под модифицируемостью понимают предусмотренные в проекте программы возможные изменения.
  • Читабельность + внутренняя документированность. Очень важные свойства на этапе ведения программы. Помогают разобраться в программе программисту, не участвовавшему в создании программы.
  • Мобильность (переносимость). Без каких либо изменений, или с небольшими изменениями программа может быть оттранслирована другими версиями языка той же операционной системы (локальная мобильность) или других операционных систем и компьютерных платформ (глобальная мобильность).
  • Надежность. Эффективное функционирование в условиях воздействия различных отрицательных факторов.
  • Защищенность. Программа должна быть защищена от неосторожных или несанкционированных действий пользователя, от нежелательного воздействия внешних факторов, от дурного глаза.

12.3 Программное окружение


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

Для создания и поддержки программного окружения в языках программирования разработаны свои средства. В языке ТР это модули.

12.4 Модули


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

В ТР используется метод «погружения» текста программы в область действия описаний, находящихся в других файлах. Такие файлы являются отдельными программными единицами (то есть могут транслироваться независимо) и называются модулями.

Погружение программы в область описаний модуля осуществляется в предложении uses. Это предложение записывается сразу после заголовка программы и имеет следующий формат:

uses <список модулей через запятую>

Область действия описаний каждого модуля начинается с имени этого модуля в предложении uses и заканчивается концом программы.

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

Unit <имя модуля>;

interface

[uses ...]

<описания глобальных типов данных, переменных, констант, процедур и функций>

implementation

[uses ...]

<реализация>

begin

<инициализация>

end.


Имя файла, содержащего исходный текст модуля (.pas) или объектный код (tpu), должно совпадать с именем модуля. Если имя модуля длиннее восьми символов, то оно должно совпадать с именем файла по первым восьми символам.

В списке uses имен модулей не должно быть «рекурсий» и «циклов»

При работе с модулями следует помнить, что в среде ТР имеется возможность управлять размещением кодов в файловой системе и режимами трансляции:

Options/Directories/EXE&TPU - сюда будут помещены загрузочные и объектные коды

Options/Directories/Unit Directories - здесь будет осуществляться поиск объектных (TPU) кодов модулей

Compile/Compile – компиляция только программы

Compile/Make – компиляция программы и модулей, текст которых был изменен

Compile/Build – компилируется и программа, и все модули

Пример

Печать данного перечислимого типа. Вот простой пример модуля (пусть имя файла с представленным ниже текстом My_Unit.pas):


Unit My_Unit;

Interface

type Color=(Red,Yellow,Green);

procedure WriteColor(x:Color);

Implementation

var mass:array[Color] of string[6];

procedure WriteColor;

begin writeln(mass[x]:6) end;

begin

mass[Red]:=' Red';

mass[Yellow]:='Yellow';

mass[Green]:='Green'

end.

После трансляции этого модуля средствами интегрированной среды ТР в директории модулей интегрированной среды образуется файл My_Unit.tpu. Теперь можно воспользоваться новым средством

Uses My_Unit;

var Col:Color;

begin

Col:=Red;

WriteColor(Col)

end.

На экране появится Red

12.5 Обзор модуля System


Модуль System не нужно указывать в предложении uses, поскольку он доступен каждой программе ТР по умолчанию. В модуле предопределены переменные Input и Output как стандартные текстовые файлы ввода и вывода.

12.5.1 Процедуры и функции, обслуживающие файловую систему


При работе с файловой системой используются следующие договоренности:

s disk:\kat\kat\...\file – поиск объекта file осуществляется с корневого каталога; s disk:kat\kat\...\file – поиск с текущей директории указанного диска.

GetDir(d:byte;var s:string); (d=0 – текущий дисковод, 1 – a:, 2 – b: и т.д.), s – текущий каталог.

ChDir,MkDir,RmDir(s:string) – изменение, создание, удаление пустого

Rename(f; newname:string) – переименование файла;


Задача: Написать процедуру удаления любого каталога (даже непустого).

12.5.2 Процедуры управления работой программы


Exit - выход из программы, функции, процедуры.

Halt(kod:word) - выход из программы.

12.5.3 Процедуры и функции распределения динамической памяти


GetMem, FreeMem(var p:pointer; size:word) - создает, уничтожает динамическую переменную.

MaxAvail, MemAvail:longint - объем максимального непрерывного участка и полный свободный объем динамической памяти;

Mark, Release(var p:pointer); - создает, удаляет новую кучу

12.5.4 Функции для работы с указателями


Addr(x):pointer; х - идентификатор переменной, процедуры или функции.

Seg(x):word;

Ofs(x):word;

Ptr(segm,ofset:word):pointer;


Программы с параметрами:

ParamCount:word; - количество параметров в командной строке (разделители пробелы и таб)

ParamStr(index:word):string; - возвращает заданный параметр командной строки.

Пример - программа, вычисляющая сумму


program sum;{ex_04}

var

s,x:real;

i,j,k:integer;

begin

s:=0;

i:=ParamCount;

j:=1;

while j<=i do

begin

val(ParamStr(j),x,k);

if k=0 then s:=s+x;

j:=j+1;

end;

writeln(s:10:5)

end.


Sum.pas ->sum.exe

Option/Directories

Выполнение в DOS: sum 3 5 7

Выполнение в ТР: Run..., Parameters

12.6 Список процедур и функций модуля


Процедуры управления

Procedure Break Обеспечивает немедленный выход из операторов повторения. 

Procedure Continue Завершает очередной итерационный цикл операторов повторения.

Procedure Exit Позволяет немедленно выйти из текущей подпрограммы. При вызове из тела основной программы завершает ее работу.

Procedure Halt [ (ExitCode: Word)] Останавливает выполнение программы и возвращает управление в операционную систему. Необязательный параметр ExitCode определяет код завершения программы.

Procedure RunError [ (ErrorCode: Byte)] Останавливает выполнение программы и генерирует ошибку периода выполнения программы. Необязательный параметр ErrorCode определяет код ошибки.

Процедуры динамического распределения памяти

Procedure Dispose(var P: Pointer [,Destructor]) Уничтожает динамическую переменную, связанную с указателем Р. Необязательный параметр Destructor определяет метод-деструктор для динамического объекта.

Procedure FreeMem(var P: Pointer; Size: Word) Уничтожает динамическую переменную P размером Size байт.

Procedure GetMemt(var Р: Pointer; Size: Word) Создает новую динамическую переменную Р заданного размера Size.

Procedure Mark(var P: Pointer) Записывает в указателе Р текущее состояние кучи.

Procedure New(var P; Pointer [,Constructor]) Создает новую динамическую переменную, связанную с указателем Р. Необязательный параметр Constructor определяет метод-конструктор для динамического объекта.

Procedure Release (var P: Pointer) Возвращает кучу в состояние, которое было сохранено в указателе Р процедурой Mark.

Функции динамического распределения памяти

Function MaxAvail: LongInt Возвращает размер наибольшего непрерывного свободного блока кучи, соответствующий размеру наибольшей динамической переменной, которая может быть помещена в кучу.

Function MemAvail; LongInt Возвращает количество имеющихся в куче свободных байт памяти.

Функции преобразования

Процедуры Pack и UnPack, определенные в стандартном Паскале, в Турбо Паскале не реализованы.

Function Chr(X: Byte): Char Возвращает символ с заданным порядковым номером X.

Function Ord(X) : LongInt Возвращает порядковый номер, соответствующий значению X порядкового типа.

Function Round (R: Real) : LongInt Округляет значение R вещественного типа до ближайшего целого.

Function Trunc(R: Real): LpngInt Усекает значение вещественного типа до значения типа LongInt путем отбрасывания дробной части.

Арифметические функции

При компиляции в режиме использования сопроцессора или его эмуляции арифметические функции возвращают значение типа EXTENDED, в противном случае - типа REAL.

Function Abs(R; Real): Real Возвращает абсолютное значение аргумента.

Function ArcTan(R: Real): Real Возвращает арктангенс аргумента.

Function Cos(R: Real): Real Возвращает косинус аргумента.

Function Exp(R; Real): Real Возвращает экспоненту аргумента.

Function Frac(R; Real): Real Возвращает дробную часть аргумента.

Function Int(R; Real): Real Возвращает целую часть аргумента.

Function Ln(R: Real) : Real Возвращает натуральный логарифм аргумента.

Function Pi: Real Возвращает значение числа pi=3.1415926535897932385.

Function Sin(R: Real): Real Возвращает синус аргумента.

Function Sqr(R: Real): Real Возвращает аргумент в квадрате.

Function Sqrt(R; Real): Real Возвращает квадратный корень аргумента.

Процедуры порядкового типа

Procedure Dec (var X [; DX: LongInt] ) Уменьшает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Procedure Inc (var X [; DX: LongInt]) Увеличивает значение переменной X на величину DX, а если параметр DX не задан - на 1.

Функции порядкового типа

Function Odd(X) : Boolean Проверяет, является ли аргумент нечетным числом.

Function Pred(X) Возвращает предшествующее значение аргумента. Тип результата совпадает с типом аргумента.

Function Succ(X) Возвращает последующее значение аргумента. Тип результата совпадает с типом аргумента.

Строковые процедуры

Procedure Delete (var S: String; Index, Count: Integer) Удаляет Count символов из строки S, начиная с позиции Index.

Procedure Insert (SubS: String; var S: String; Index: Integer) Вставляет подстроку SubS в строку 5, начиная с позиции Index.

Procedure Str(X [: width [: Decimals]]; var S: String) Преобразует численное значение X в его строковое представление S.

Procedure Val(S; String; var X; var Code: Integer) Преобразует строковое значение S в его численное представление X. Параметр Code -содержит признак ошибки преобразования (0 - нет ошибки).

Строковые функции

Function Concat(S1 [, S2,...,SN]): String Выполняет конкатенацию последовательности строк.

Function Copy(S: String; Index, Count: Integer): String Возвращает подстроку из строки S, начиная с позиции Index и длиной Count символов.

Function Length(S: String): Byte Возвращает текущую длину строки S.

Function Pos(SubS, S: String): Byte Возвращает позицию, начиная с которой в строке S располагается подстрока SubS (О - S не содержит SubS).

Функции для работы с указателями и адресами

Function Addr (X) : Pointer Возвращает адрес заданного объекта X.

Function Assigned: (var P) : Boolean Проверяет, хранит ли ли указатель Р значение, отличное от NIL, и возвращает TRUE в этом случае.

Function CSeg: Word Возвращает текущее значение регистра CS.

Function DSeg: Word Возвращает текущее значение регистра DS.

Function Ofs (X) ; Word Возвращает смещение заданного объекта.

Function Ptr(Seg, Ofs: Word): Pointer Преобразует сегмент Seg и смещение Ofs в значение типа указатель.

Function Seg (X) : Word Возвращает сегмент для заданного объекта X.

Function SPtr: Word Возвращает текущее значение регистра SP.

Function SSeg: Word Возвращает текущее значение регистра SS.

Процедуры разного назначения

Procedure Exclude (var S: set of Т; I: T) Исключает элемент T из множества S.

Procedure FillChar(var X; Count: Word; Value) Заполняет заданное количество Count последовательных байт переменной X указанным значением Value (выражение любого порядкового типа).

Procedure Include (var S: set of Т; I; T) Включает элемент T во множество S.

Procedure Move (var X, Y, Count: Word) Копирует заданное количество последовательных байт из источника X в переменную Г.

Procedure Randomize Инициализирует случайным значением (текущим системным временем) встроенный генератор псевдослучайных чисел.

Функции разного назначения

Function Hi(X; Word) : Byte Возвращает старший байт аргумента X.

Function High (X) Возвращает максимальное значение порядкового типа.

Function Lo(X: Word): Byte Возвращает младший байт аргумента X.

Function Low(X) Возвращает минимальное значение порядкового типа.

Function ParamCount: Word Возвращает число параметров, переданных программе в командной строке (строке вызова).

Function ParamStr(N; Byte): String Возвращает N-ый параметр командной строки.

Function Random [ (Range: Word)] Возвращает псевдослучайное число. Если параметр Range опущен, функция возвращает вещественное число в диапазоне от 0 до 1, если указан - целое число в диапазоне от 0 до Range-1.

Function SizeOf(X): Word Возвращает число байт, занимаемых аргументом.

Function Swap(X) Производит перестановку старших и младших байт двухбайтного аргумента X. Тип функции соответствует типу аргумента.

Function UpCase(C: char): Char Преобразует латинскую букву в заглавную.

Процедуры ввода/вывода

Procedure Assign (var F; Name: String) Связывает внешний файл Name с файловой переменной F.

Procedure ChDir(S: String) Устанавливает текущий каталог. 

Procedure Close (var F) Закрывает открытый файл. 

Procedure Erase (var F) Удаляет внешний файл.

Procedure GetDir(D: Byte; var S: String) Возвращает каталог по умолчанию S на заданном диске D.

Procedure MkDir(S: String) Создает подкаталог S.

Procedure Rename (var F) Переименовывает внешний файл.

Procedure Reset (var F) Открывает существующий файл для чтения или изменения.

Procedure Rewrite (var F) Создает и открывает новый файл.

Procedure RmDir(S: String) Удаляет пустой подкаталог.

Procedure Seek (var F; N: LongInt) Устанавливает текущую позицию файла на указанный элемент (не используется с текстовыми файлами).

Procedure Truncate (var F) Усекает размер файла до текущей позиции в файле (не используется с текстовыми файлами)

Функции ввода/вывода

Function EOF (var F) ; Boolean Возвращает для файла F признак конца файла.

Function FilePos (var F) : LongInt Возвращает текущую позицию в файле (не используется с текстовыми файлами)

Function FileSize(var F) : LongInt Возвращает текущий размер файла (не используется с текстовыми файлами).

Function IOResult; Integer Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода.

Процедуры для текстовых файлов

Procedure Append (var F: Text) Открывает существующий файл для расширения. 

Procedure Flush (var F: Text) Выталкивает буфер файла вывода.

Procedure Read ([var F: Text;] V1 [, V2,...,VN]) Считывает одно или более значений из текстового файла в одну или более переменных.

Procedure Readln Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла.

Procedure SetTextBuf (var F: Text; var Buf [; Size: Word]) Назначает буфер ввода/вывода для текстового файла. Параметр Size определяет длину буфера в байтах (если Size опущен, длина буфера равна 128 байтам).

Procedure Write([var F: Text;] V1 [, V2,...,VN]) Записывает в текстовый файл одно или более значений.

Procedure WriteLn Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки.

Функции для текстовых файлов

Function Eoln(var F: Text): Boolean Возвращает признак конца строки.

Function SeekEof [ (var F: Text)]: Boolean Возвращает признак конца файла. Предварительно пропускает все пробелы, символы табуляции и признаки конца строк.

Function SeekEoln [ (var F: Text)]: Boolean Возвращает признак конца строки. В отличие от Eoln предварительно пропускает все пробелы и символы табуляции.

Процедуры для нетипизированных файлов

Procedure BlockRead(var F: File; var Buf; Count; Word [;var Result; Word]) Считывает в переменную Buf Count записей из файла F. Необязательный параметр Result содержит истинное количество считанных записей.

Procedure BlockWrite(var F; File; var Buf; Count: Word [;var Result: Word]) Передает Count записей из переменной Buf файла F. Необязательный параметр Result содержит истинное количество переданных записей.