- •Конспект лекций по курсу «Информатика» для студентов очной и заочной форм обучения.
- •Базовые положения
- •§.1. Физическое устройство и разумная деятельность мозга
- •§2. Самодостаточная эвм
- •2.1. Память (оперативная память)
- •2.2. Процессор
- •2.3. Программа
- •2.4. Жизненный цикл «Самодостаточной эвм»
- •§3. Язык процессора – базовый язык эвм
- •§4. Реальная эвм. Периферийные устройства
- •§5. Язык программирования. Программа транслятор
- •§6. Язык программирования Pascal
- •6.1. Базовые типы числовых информационных объектов
- •6.2. Явные константы
- •6.3. Оператор описания var
- •Var и1, и2, и3, . . . . ,Иn: Итипа;
- •6.5. Операторы консольного ввода информации
- •6.5.1. Стандартные форматы вывода числовой информации.
- •6.6. Логические переменные
- •6.7. Операторы управления программой
- •6.7.1. Условный оператор if then
- •If Условие then Оператор ;
- •6.7.2. Условный оператор выбора if then else
- •6.8. Метки операторов. Оператор безусловного перехода
- •6.9. Циклические вычисления. Операторы зацикливания
- •Организация циклических вычислений операторами if then goto
- •Программа вычисления корня по формуле Герона.
- •6.9.3. Оператор цикла for to
- •6.9.4. Оператор цикла for downto
- •6.9.5. Оператор цикла while
- •6.9.6. Программа вычисления длины дуги кривой
- •7. Массивы переменных
- •7.1. Программа нахождения экстремальных значений
- •7.2. Программа решения системы линейных алгебраических уравнений
- •8. Сортировка информации
- •8.1. Элементы формальной логики, теории множеств и операций
- •8.2. Упорядоченные структуры информационных объектов
- •8.3. Алгоритм сортировки «поплавок»
- •8.3.1. Программа сортировки массива «на месте»
- •8.3.2. Программа сортировки «индексов» массива
- •8.4. Алгоритм быстрого поиска информации в линейно упорядоченном массиве
- •8.4.1. Программа поиска в отсортированных массивах.
- •9. Символьные переменные
- •9.1.Строковые переменные
- •9.1.1. Программа написания чисел прописью
- •10. Клавиатурное управление эвм
- •§.11. Информационные объекты класса – изображение
- •11.1. Устройство функционированиемонитора
- •11.2. Процедурный язык управления графическим экраном
- •11.3. Оцифровка и масштабирование реальных изображений (чертежей) для последующего их вывода на экран
- •11.4. Пример построения фрагмента графика функции
- •11.5. Ввод и обработка информации в форме изображений
- •§12. Информационные объекты класса – подпрограммы
- •12.1. Подпрограммы типа procedure
- •12.1.1. Пример оформления подпрограммы-процедуры
- •12.2. Подпрограммы класса function
- •12.2.1.Пример оформления подпрограммы-функции
- •12.3. Процедурные языки программирования
- •12.4. Библиотечные модули Unit
- •§13. Динамическое распределение оперативной памяти эвм
- •13.1. Программа использующая динамические переменные
- •§14. Переменные типа record
- •§15. Внешняя память эвм. Работа с файлами
- •15.1. Процедурный язык обработки файлов
- •15.2.Программа “ Жизненный путь файла “
- •15.3. Текстовые файлы
- •§16. Элементы объектно-ориентированного программирования
- •Основная рекомендуемая литература.
12.2.1.Пример оформления подпрограммы-функции
Задача: написать универсальную подпрограмму-функцию, которая вычисляет модуль вектора из пространства Rn для любых значений n и любых типах переменных, используемых для описания координат вектора.
Пусть a=(a1, a2, …an) это n-мерный вектор. Eго модуль (длина) вычисляется по формуле n 0.5
|a| = ∑ ai2
i=1
Program NNN;
{ прагматика - обязательное пояснение назначения подпрограммы:
Все параметры подпрограммы - «входные», т.е. передают информацию из головной программы в подпрограмму.
Vec – массив с элементами (координатами) вектора,
N – количество элементов вектора (размерность вектора)
NmType – номер типа переменных, которые используются
для описания координаты вектора:
массив из чисел INTEGER,
массив из чисел REAL,
массив из чисел DOUBLE }
Function ModV(Var Vec; n, NmType: integer): double;
Var s: double; j: integer;
{поскольку в подпрограмму передается только адрес оперативной памяти, где размещаются координаты вектора Vec , а о структуре этой переменной подпрограмме ничего не известно, то для обработки этой информации необходимо предусмотреть несколько (все?) возможностей.
Вводим переменную с именем R, которая размещена в том же месте оперативной памяти, где находятся данные о координатах вектора, но структура R - известна! }
R: array[1..10000] of real Absolute Vec;
{ Аналогично описываем две вспомогательные переменные с другими структурами }
I: array[1..10000] of integer Absolute Vec;
D: array[1..10000] of double Absolute Vec;
Begin
S:=0; {чистим рабочую ячейку подпрограммы, в которой будем
накапливать сумму квадратов координат вектора}
If NmType=1 then {если в подпрограмму переданы координаты в массиве
из переменных типа Integer, то для вычислений используем
вспомогательную переменную с именем I }
for j:=1 to n do s:=s+1.0*I[j]*I[j];
If NmType=2 then {если в подпрограмму переданы координаты в
массиве из переменных типа Real, то для вычислений используем
вспомогательную переменную с именем R }
for j:=1 to n do s:=s+R[j]*R[j];
If NmType=3 then {если в подпрограмму переданы координаты в массиве
из переменных типа double, то для вычислений используем
вспомогательную переменную с именем D }
for j:=1 to n do s:=s+D[j]*D[j];
ModV:=Sqrt(s); {вносим искомый результат - длину вектора
в ячейку с именем ModV – дубляж имени подпрограммы!}
End; {оператор завершающий описание нововведенной подпрограммы-функции}
{Описание (отведение места в памяти) переменных головной программы:
Var V: array[1..3] of real;
b: array[1..2] of integer;
J: integer;
P: real;
BEGIN {обрабатывается трехмерный вектор V,
координаты которого описаны переменными типа REAL}
For i:=1 to 3 do {заполнение координат вектора случайными числами и печать их}
begin V[i]:=random; writeln(V[i]:10:5); end;
{в переменной Р помещается удвоенное значение длины вектора V }
P:=2.0*ModV(V, 3, 2);
<семантика: Вычислить функцию ModV для фактических, т.е. действительно существующих в оперативной памяти, параметров-аргументов: V, 3, 2. Вычисленное значение функции умножить на два, результат поместить в переменную P >
Write(‘удвоенная длина вектора V=’, p:10:5);
{обрабатывается двухмерный вектор b с координатами типа INTEGER}
For i:=1 to 2 do {заполнение координат вектора случайными числами и печать их}
begin b[i]:=random(2000); writeln(b[i]:5) end;
{вычисляем и печатаем длину вектора b}
Write(‘длина вектора B=’, ModV(b, 2, 1):10:5);
END.