- •История развития эвм.
- •Архитектура эвм. Основные устройства и принципы взаимодействия.
- •Типовые структуры эвм.
- •Система счисления. Способ представления любого числа с помощью цифр.
- •Структурная организация эвм или три иерархических уровня или функциональной части эвм.
- •Раздел 1. Технология проектирования программных продуктов. Алгоритмизация.
- •Программная часть пк.
- •Шаблоны файлов.
- •Структура файловой системы.
- •Принципы работы с программными продуктами.
- •Тема 1. Процессы жизненного цикла программных средств Введение
- •1 Область применения
- •1.2 Область распространения
- •1.3 Адаптация настоящего стандарта
- •1.4 Соответствие
- •1.5 Ограничения
- •2 Нормативные ссылки
- •3 Определения
- •4 Прикладное применение настоящего стандарта
- •4.1 Построение стандарта
- •5 Основные процессы жизненного цикла
- •5.1 Процесс заказа
- •5.2 Процесс поставки
- •5.3 Процесс разработки
- •5.3.1 Подготовка процесса,
- •5.4 Процесс эксплуатации
- •5.5 Процесс сопровождения
- •6 Вспомогательные процессы жизненного цикла
- •6.1 Процесс документирования
- •6.1.2 Проектирование и разработка
- •6.1.З Выпуск
- •6.2 Процесс управления конфигурацией
- •6.2.5 Оценка конфигурации
- •6.3 Процесс обеспечения качества
- •6.3.1 Подготовка процесса
- •6.3.2 Обеспечение продукта
- •6.4 Процесс верификации
- •6.5 Процесс аттестации
- •6.6 Процесс совместного анализа
- •6.7 Процесс аудита
- •6.8 Процесс решения проблем
- •7 Организационные процессы жизненного цикла
- •7.1 Процесс управления
- •7.2 Процесс создания инфраструктуры
- •7.3 Процесс усовершенствования
- •Раздел 3. Программирование в среде turbo pascal (система программирования)
- •Введение.
- •Общая характеристика системы.
- •Среда turbo pascal. Элементы диалоговой среды.
- •Система меню.
- •Search-поиск:
- •Window – окно:
- •Помощь f1:
- •Текстовый редактор.
- •Основные принципы работы с turbo pascal.
- •Язык программирования turbo pascal Структура программы.
- •Алфавит языка.
- •Синтаксис языка.
- •Запись текста программы.
- •Операции и выражения.
- •Встроенные (стандартные) функции языка turbo pascal.
- •Описание констант, переменных и типов .
- •Обзор типов данных.
- •Простые структурированные ссылочные процедурные объектные
- •Целый тип.
- •Понятие целочисленного выражения.
- •Вещественный тип.
- •Логический тип boolean.
- •Операции над логическими данными.
- •Символьный тип char.
- •Диапазон (ограниченный, интервальный).
- •Перечисляемый (перечислимый) тип.
- •Регулярный тип (массив) array.
- •Файловый тип.
- •Описание файлов
- •Чтение из файла.
- •Запись данных в файл.
- •Операции (действия) над файлами.
- •Текстовые файлы.
- •Запись (комбинированный тип данных) record.
- •Операции, выполняемые над записью.
- •Запись с вариантной частью.
- •Множественный тип (множества) set.
- •Операции множеств.
- •Строковый тип string.
- •Обработка операции строковых данных.
- •Типизированные константы.
- •Преобразование, совместимость типов.
- •Способы преобразования типов.
- •Эквивалентность типов.
- •Основы ввода/вывода.
- •Организация форматирования вывода.
- •Операторы языка.
- •Простые операторы.
- •Структурные операторы.
- •Оператор работы над записями with.
- •Операторы работы над записями.
- •Подпрограммы. Процедуры и функции. Блочная структура подпрограммы.
- •Правила по использованию подпрограмм
- •Общая структура подпрограмм
- •Механизм параметров
- •Вычисление значения функции. Завершение подпрограмм.
- •Предварительное описание подпрограмм.
- •Рекурсия и побочный эффект
- •Процедурный тип.
- •Правило использования процедурных типов
- •Директивы компилятора.
- •Модули.
- •Общая структура модуля.
- •Заголовок модуля и связь модулей друг с другом.
- •Интерфейсная часть.
- •Исполняемая часть(реализационная).
- •Инициирующая часть.
- •Компиляция модулей.
- •Стандартные модули.
Вычисление значения функции. Завершение подпрограмм.
В теле функции должен присутствовать оператор присваивания , в левой части которого указано имя функции, в правой - выражение , вычисляющее возвращаемое значение . Таких операторов может быть несколько. Не забывать про совместимость типов, передаваемость возвращаемого значения.
Пример: определение максимума двух целых чисел.
FUNCTION MAX(A,B:BYTE):BYTE;
BEGIN
IF A>B THEN MAX:= A ELSE MAX:=B
END;
BEGIN
. . . . . . . . . . . . . . . . . . .
M:=MAX(A-B,A+B)+2*MAX(A*B, A MOD B);
. . . . . . . . . . . . . . . . . . .
В Турбо Паскале есть дополнительное средство прерывания выполнения подпрограмм в произвольной точке - процедура EXIT без параметров. Она медленно завершает работу подпрограммы и возвращает управление в точку ее вызова. В функциях перед EXIT обязятельно должен выполниться оператор присваивания с именем функции в левой части . Если вызов процедуры EXIT был произведен из блока , соответствующего программе в целом, будет немедленно завершено выполнение всей программы.
PROCEDURE D1(X,Y:REAL; VAR R:REAL);
BEGIN
IF X-Y < 0.001 THEN EXIT;
R:= (X*X+Y*Y);
END;
Предварительное описание подпрограмм.
Достаточно распространен случай, когда две подпрограммы ,описанные на одном уровне вложенности, содержат взаимные вызовы друг друга.
PROCEDURE JOHN(X,Y:REAL);
BEGIN
JACK(1,2);
END;
PROCEDURE JACK(A,B:BYTE);
BEGIN
JOHN( 0.5,0.8);
. . . . . . . . . . . . . . . . . . .
END;
Решением этой проблемы является механизм предварительных описаний подпрограмм.
Предварительное описание подпрограмм содержит заголовок процедуры и служебное слово FORWARD , которое указывает, что полное описание подпрограммы располагается далее. Для приведенного примера предварительное описание будет выглядеть следующим образом :
PROCEDURE JOHN(X,Y:REAL);FORWARD;
JACK(A,B:BYTE);FORWARD ;
Рекурсия и побочный эффект
В теле подпрограммы доступны все объекты , описанные в объемлющем блоке , в том числе и имя самой подпрограммы . Внутри ее тела возможен вызов самой себя. Это и есть рекурсия . Рекурсивные функции - функции и процедуры, использующие вызов самих себя. Рекурсия достаточно широко применяется в программировании математических алгоритмов. Наиболее популярен алгоритм определения факториала:
0!=1 1!=1 2!=1*2=2 n!=1*2*.....*(n-1)
FUNCTION FACT(N:WORD):LONGINT;
BEGIN
IF N=1 THEN
FACT:=1;
ELSE
FACT:= N*FACT(N-1)
END;
В Паскале нет ограничений на рекурсивные вызовы подпрограмм, но каждый очередной рекурсивный вывод приводит к образованию новой копии локальных объектов и все они существуют независимо друг от друга.
Рассмотрение вопросов, связанных с подпрограммами, дополним обсуждением одного неожиданного эффекта при выполнении функций, причиной которого является изменение значений нелокальных переменных в теле функции.
Если в некоторой функции имеются конструкции ( например, операторы присваивания), изменяющие значения переменных, описанных в объемлющих блоках , то может возникнуть ситуация, при которой значение выражения , использующего вызов такой функции , зависит от порядка следования операндов , что является потенциальным источником трудноуловимых программных ошибок и поэтому крайне нежелательно. Описанная ситуация называется побочным эффектом .
Пример побочного эффекта:
PROGRAM SIDEEFFECT;
VAR A,Z : INTEGER;
FUNCTION CHANGE (X:INTEGER):INTEGER;
BEGIN
Z:=Z-X; { изменяем значение нелокальной переменной}
CHANGE:=SQR(X);
END;
BEGIN
Z:=10;A:= CHANGE(Z);WRITELN(A,Z);
Z:=10; A:= CHANGE(10)*CHANGE(Z) ;WRITELN(A,Z);
Z:=10; A:= CHANGE(Z)*CHANGE(10);WRITELN(A,Z);
END.