- •Котов владислав викторович доцент, профессор кафедры робототехники и автоматизации производства, доктор технических наук
- •1.Введение в информатику
- •1.1.История развития информатики
- •1.2. Структура курса. Рекомендуемая литература
- •1.3.История развития вычислительной техники
- •2.Понятие информации
- •2.1.Информация и её свойства
- •2.2.Дискретный источник информации
- •2.3.Мера информации по Хартли
- •2.4.Мера информации по Шеннону
- •3. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- •3.1.Процессы сбора, передачи, обработки и накопления информации
- •3.2.Этапы обращения информации в информационно-измерительных и управляющих системах
- •4.Технические средства реализации информационных процессов
- •4.1.Структура персонального компьютера
- •4.2.Периферийное оборудование персонального компьютера
- •5.Программные средства реализации информационных процессов
- •5.1.Виды программного обеспечения
- •5.2.Операционные системы. Организация и средства человеко-машинного интерфейса в ос Windows
- •5.3.Прикладное программное обеспечение
- •6.Способы представления и хранения текстовой и числовой информации
- •6.1.Хранение информации в компьютере. Кодирование символьных данных. Кодовые таблицы ascii, ansi, koi-8
- •6.2.Знаковые и позиционные системы счисления. Правила перевода чисел из одной системы счисления в другую
- •6.3.Основные арифметические операции в двоичной системе
- •6.4.Булева алгебра. Основные операции и правила булевой алгебры
- •7.Алгоритмизация и программирование
- •7.1.Понятие алгоритма
- •7.2.Основные условные элементы для создания схем алгоритмов
- •7.3.Примеры простейших алгоритмов
- •8.Языки программирования высокого уровня. Основы языка Паскаль
- •8.1.Языки программирования высокого уровня
- •8.2.Запись программы на Паскале
- •8.3.Основные типы данных в Паскале
- •8.4.Структура Паскаль-программы
- •9.Оператор присваивания. Ввод-вывод в программах на Паскале
- •9.1.Оператор присваивания. Запись арифметических выражений
- •9.2.Процедуры ввода данных с клавиатуры
- •9.3.Процедуры вывода данных на экран
- •Условный оператор
- •9.4.Алгоритмы с ветвлением
- •9.5.Структура и синтаксис условного оператора
- •9.6.Задание логических выражений для передачи управления
- •9.7.Составные условия с использованием логических операторов
- •Операторы циклов с неопределённым числом повторений
- •9.8.Назначение операторов циклов. Циклы с пред- и постусловием
- •9.9.Структура и синтаксис оператора while
- •9.10.Структура и синтаксис оператора repeat … until
- •Оператор цикла с параметром
- •9.11.Цикл с параметром. Структура и синтаксис оператора for
- •9.12.Примеры программирования итерационных алгоритмов
- •Диапазонный тип данных. Массивы
- •9.13.Диапазонные типы данных
- •9.14.Массивы. Описание и использование массивов
- •Процедуры и функции
- •9.15.Структурный подход к разработке программы. Подпрограммы
- •9.16.Понятие подпрограммы, виды подпрограмм в Паскале.
- •9.17.Синтаксис объявления и использования процедур
- •9.18.Синтаксис объявления и использования функций
- •9.19.Примеры использования подпрограмм на Паскале
- •9.20.Параметры-значения и параметры-переменные
- •Строковый тип данных
- •9.21.Общие сведения о работе со строками символов
- •9.22.Процедуры и функции обработки строк
- •Работа с файлами
- •9.23.Понятие файла. Типы файлов в Паскале
- •9.24.Инициализация файловых переменных
- •9.25.Процедуры открытия файлов
- •9.26.Ввод-вывод данных в файл и общие подпрограммы для работы
- •Работа с графикой
- •9.27.Графический и текстовый режимы работы видеоадаптера
- •9.28.Инициализация графического режима
- •9.29.Основные средства библиотеки Graph для работы с графикой
- •Программное обеспечение и технологии программирования
- •9.30.Технология структурного программирования
- •9.31.Принципы проектирования программ «сверху-вниз» и «снизу-вверх»
- •9.32.Модульный принцип программирования
- •9.33.Технология объектно-ориентированного программирования
- •9.34.Основные критерии оценки качества программ
- •Базы данных
- •9.35.Общее представление о базах данных
- •9.36.Основные понятия систем управления базами данных
- •9.36.1.Классификация субд
- •9.36.2.Основные функции субд
- •9.37.Уровни представления данных
- •9.38.Основные модели данных
- •9.38.1.Понятие модели данных
- •9.38.2.Типы структур данных
- •9.38.3.Сетевая модель данных (смд)
- •9.38.4.Иерархическая модель данных (имд)
- •9.39.Реляционные базы данных
- •Домен 1 . . .. . Домен 2 . . . . . . . . .Домен 3 (ключ) . . . .Домен 4 . . . ..Домен 5
- •9.39.1.Достоинства и недостатки рмд
- •9.39.2.Операции реляционной алгебры
- •Локальные и глобальные сети эвм
- •9.40.Понятие о сетях эвм
- •9.41.Классификация сетей: локальные и глобальные сети эвм
- •9.42.Понятие топологии. Виды сетевых топологий
- •9.43.Информационные технологии, основанные на сетях
- •Методы защиты информации
- •9.44.Основы защиты информации и сведений, составляющих государственную тайну
- •9.45.Организационные методы защиты информации
- •9.46.Криптографическая защита информации
- •Экономические и правовые аспекты информационных технологий
- •9.47.Система стандартов на программную документацию
- •9.48.Виды программ и программных документов
- •9.49.Основные стадии и этапы разработки программ и программной документации
Процедуры и функции
9.15.Структурный подход к разработке программы. Подпрограммы
Рассмотрим следующий пример. Дан треугольник ABC с длинами сторон a, b и c соответственно (Рис. 2). Необходимо разработать программу, вычисляющую его площадь.
Рис. 2
Для решения задачи воспользуемся формулой Герона:
,
где
– полупериметр:
.
Алгоритм решения будет иметь вид:
Программная реализация этого алгоритма может иметь вид:
var
a, b, c : real; {Переменные для хранения исходных данных}
S : real; {Переменные для хранения исходных данных}
p : real; {Вспомогательная переменная для хранения полупериметра}
begin
write(‘Введите a, b и c: ’); read(a, b, c);
p := (a + b + c)/2.0;
S := sqrt(p*(p-a)*(p-b)*(p-c));
write(‘S=’, S:0:3);
end.
Усложним исходное задание. Предположим, что необходимо рассчитать площадь четырёхугольника ABCD, заданного длинами своих сторон a, b, c, d и длиной диагонали e.
Искомая площадь
представляет собой сумму площадей
соответствующих треугольников
.
Поэтому для решения задачи можно также
воспользоваться формулой Герона, которую
в этом случае придётся применять дважды.
Алгоритм решения можно представить
следующим образом:
Следует обратить внимание на то, что одна и та же последовательность вычислений: «расчёт полупериметра – расчёт площади», – выполняется в программе дважды, но с различными исходными данными. Первый раз вычисления производятся с использованием длин a, b и e, а во втором – c, d и e.
В принципе по данному алгоритму можно было бы непосредственно написать программу вычислений, продублировав однотипные операторы несколько раз. Однако такой подход имеет ряд принципиальных недостатков:
1. Дублирование операторов увеличивает размер программы, повышает требования к объёму оперативной памяти, необходимой для хранения машинных кодов.
2. Дублирование снижает возможности по сопровождению и модификации программы; например можно представить, что на каком-то этапе разработки программы было принято решение отказаться от использования формулы Герона, и рассчитывать площадь треугольников иным образом. В этом случае программисту пришлось бы тщательно отыскивать все места в программе, где встречается последовательность операторов расчёта площади и менять их на новые фрагменты. При этом нет полной уверенности, что все последовательности были найдены и корректно изменены.
3. Механическое дублирование увеличивает размер исходных текстов программы и усложняет её восприятие программистом.
Для преодоления всех этих проблем в языках высокого уровня предусматривается обычно возможность выделения отдельных фрагментов программы в некоторые самостоятельные блоки – подпрограммы, к которым можно обращаться многократно из основной части программы.
9.16.Понятие подпрограммы, виды подпрограмм в Паскале.
Подпрограммой называется именованный фрагмент кода, решающий определённую подзадачу в рамках общей задачи программы. К подпрограмме можно обращаться из основной части программы по мере необходимости.
В процессе изучения Паскаля мы уже неоднократно сталкивались с различными стандартными подпрограммами (например, ClrScr или sin), которые поставляются вместе с компилятором языка. Оказывается, что Паскаль позволяет программисту разрабатывать и использовать свои собственные подпрограммы. Таким образом, подпрограмму можно рассматривать как новую команду, порядок работы которой задаётся программистом самостоятельно.
Подпрограммой называется именованный фрагмент кода, к которой можно обращаться из основной части программы.
В схемах алгоритмов подпрограммы обозначаются блоками вида:
Внутри блока указывается имя подпрограммы, к которой происходит обращение.
Существует два основных вида подпрограмм: 1) процедуры и 2) функции. Отличие между ними состоит в том, что процедура выполняет предписанные действия, не возвращая явным образом числового результата. В качестве примера процедур можно привести процедуру очистки экрана ClrScr, процедуру генерации звукового сигнала Sound или процедуру установки текстового курсора в заданную позицию GotoXY.
В отличие от процедур, функции после выполнения предписанных действий возвращают результат работы в виде некоторого числа, символа или строки символов. Типичным примером функций являются функция вычисления квадратного корня sqrt, тригонометрические функции sin, cos, tan, функция генерации псевдослучайного числа Random и т.п. Поскольку функции возвращают определённое значение, их можно использовать в правых частях выражений.
Из приведённых примеров также следует, что для нормальной работы подпрограмм им обычно необходимо передавать определённые исходные данные. Например, для вычисления квадратного корня мы должны сообщить функции sqrt число, из которого этот корень будет извлекаться. Для позиционирования текстового курсора процедуре GotoXY следует указать координаты знакоместа на экране, в которое будет перемещён курсор. Подобные исходные данные называются аргументами, или параметрами подпрограммы. Они указываются в круглых скобках после имени вызываемой подпрограммы.
Рассмотрим, как можно модифицировать последний алгоритм, введя специальную подпрограмму, вычисляющую площадь отдельного треугольника.
Поскольку в результате работы этой подпрограммы должно быть найдено число, определяющее искомую площадь, целесообразно разрабатывать подпрограмму-функцию, а не подпрограмму-процедуру.
Кроме того, необходимо выбрать имя этой функции и определить список её параметров.
Имя функции должно удовлетворять следующим требованиям. Во-первых, оно, как и все идентификаторы Паскаля, должно состоять из букв латинского алфавита и, возможно, цифр; начинаться с буквы; не совпадать ни с одним зарезервированным словом или ранее объявленным идентификатором. Во-вторых, целесообразно давать подпрограммам осмысленные имена, отражающие суть выполняемых ими действий. Последнее требование не является обязательным с точки зрения синтаксиса языка Паскаль, но оперировать подпрограммами с именами вида P158, или fff_13 крайне неудобно.
Поскольку функция предназначена для расчёта площади, в качестве имени можно выбрать, например, слово Square.
Если для вычисления площади, как и в первом алгоритме, будет использоваться формула Герона, то в качестве исходных данных в функцию следует передавать длины сторон треугольника, для которого производится расчёт.
Таким образом, алгоритм вычисления площади четырёхугольника будет иметь вид:
При этом, разумеется, следует отдельно разработать алгоритм функции Square.
