- •Работает
- •1.1. История создания эвм.
- •1.3. Размещение данных и программ в памяти пэвм.
- •1.4.Файловая система хранения информации
- •1.5.Операционная система.
- •Лекция 2. Как составляются и выполняются программы в системе delphi
- •2.1. Понятие алгоритма и способы его записи
- •2.2. Общая характеристика языка Паскаль
- •2.3. Как составляется программа в системе Delphi
- •2.4. Наша первая программа реализует линейный алгоритм
- •3.1. Данные и их типы.
- •3.2. Операции над переменными основных скалярных типов
- •Алгоритмов
- •4.1. Понятие разветвляющегося алгоритма
- •4.2. Оператор условия if
- •4.3. Оператор выбора Case
- •4.4. Некоторые возможности, предоставляемые Delphi для организации разветвлений
- •Лекция 5. Составление и програмирование циклических алгоритмов
- •5.1. Понятие цикла
- •5.2. Оператор Repeat...Until
- •5.3. Оператор While...Do
- •5.4. Оператор For...Do
- •5.5. Вложенные циклы
- •5.6. Примеры некоторых часто встречающихся циклических алгоритмов Вычисление заданного члена рекуррентной последовательности
- •Вычисления сумм с использованием рекуррентной последовательности
- •6.1. Ошибки на этапе компиляции
- •6.4. Защищенные блоки
- •6.5. Некоторые стандартные типы исключительных ситуаций
- •6.6. Инициирование собственных исключительных ситуаций
- •6.7. Примеры фрагментов программ
- •Лекция 7. Составление программ с использованием массивов
- •7.1. Понятие массива
- •7.2. Некоторые возможности ввода-вывода в Delphi
- •7.3. Примеры часто встречающихся алгоритмов работы с массивами Сумма n элементов одномерного массива:
- •Произведение диагональных элементов квадратной матрицы:
- •Нахождение максимального элемента одномерного массива:
- •8.1. Статическое и динамическое распределение оперативной памяти
- •8.2. Понятие указателя
- •8.3. Наложение переменных
- •8.4. Динамическое распределение памяти
- •8.5. Организация динамических массивов
- •9.1. Понятие подпрограммы
- •9.2. Описание подпрограмм
- •9.3. Передача данных между подпрограммой и вызывающей ее программой
- •9.4. Оформление подпрограмм в библиотечный модуль
- •9.5. Примеры подпрограмм, оформленных в отдельные библиотечные модули
- •Пример программы, использующей модуль RabMas:
- •Множества
- •10.1. Понятие множества
- •10.2. Операции над множествами
- •10.3. Примеры работы с множествами
- •Interface
- •11.1. Зачем нужны строки
- •11.2. Описание переменных строкового типа «Короткие строки»
- •11.3. Основные операции над переменными строкового типа
- •11.4. Некоторые процедуры и функции обработки строк
- •11.5. Примеры алгоритмов обработки строк
- •Лекция 12. Программирование с использованием записей
- •12.1. Понятие записи
- •12.2. Операции над записями
- •12.3. Использование записей для работы с комплексными числами
- •13.1. Понятие файла
- •13.2. Операции над файлами
- •13.2.1. Типизированные файлы
- •13.2.2. Текстовые файлы
- •13.3. Подпрограммы работы с файлами
- •13.4. Компоненты tOpenDialog и tSaveDialog
- •Лекция 14. Программирование с отображением графической информации
- •14.1. Как рисуются изображения
- •14.2. Построение графиков с помощью компонента tChart
- •Лекция 15. Программирование с использованием рекурсии
- •15.1. Понятие рекурсии
- •15.2. Примеры рекурсивных вычислений
- •16.1. Организация работы с базами данных
- •16.2. Поиск в массиве записей
- •16.3. Сортировка массивов
- •16.3.1. Метод пузырька
- •16.3.2. Метод прямого выбора
- •16.3.3. Метод Шелла
- •16.3.4. Метод Хоара (Hoare)
- •17.1. Работа со списками
- •17.2. Добавление нового элемента в список на заданную позицию
- •17.3. Удаления элемента с заданным номером
- •17.4. Пример программы
- •Лекция 18. Связанные списки на основе рекурсивных данных
- •18.1. Что такое стек и очередь
- •18.2. Понятие рекурсивных данных и однонаправленные списки
- •18.3. Процедуры для работы со стеками
- •18.4. Процедуры для работы с односвязными очередями
- •18.5. Работа с двухсвязными очередями
- •18.6. Процедуры для работы с двусвязными очередями
- •19.1. Основные понятия и определения
- •19.2. Прямые методы решения слау
- •19.3. Итерационные методы решения слау
- •20.1. Зачем нужна аппроксимация функций?
- •20.3. Какие бывают многочлены и способы интерполяции?
- •20.4. Что такое среднеквадратичная аппроксимация?
- •20.5. Метод наименьших квадратов (мнк)
- •21.1. Формулы численного дифференцирования
- •21.2. Формулы численного интегрирования
- •22.1. Как решаются нелинейные уравнения
- •22.2. Итерационные методы уточнения корней
- •22.2.2. Метод Ньютона
- •23.1. Постановка задач оптимизации, их классификация
- •23.2. Методы нахождения минимума функции одной переменной
- •24.1. Задачи для обыкновенных дифференциальных уравнений
- •24.2. Основные положения метода сеток для решения задачи Коши
- •24.3. Многошаговые схемы Адамса
- •Литература
9.3. Передача данных между подпрограммой и вызывающей ее программой
Имеется два способа передачи данных между подпрограммой и той программой, из которой производится ее вызов - через глобальные параметры и через формальные параметры.
Передача данных через глобальные параметры
Параметры, которые введены и описаны внутри подпрограмм, называются локальными, т.к. они локализированы внутри той подпрограммы, в которой они описаны, и как бы "невидимы" снаружи (из других подпрограмм). В то же время, параметры, которые введены и описаны в программе до описания подпрограммы, называются глобальными по отношению к этой подпрограмме, т.к. они "видимы" как внутри неё, так и в программе её вызывающей. Это позволяет использовать глобальные параметры для передачи данных.
Для примера передачи данных через глобальные параметры рассмотрим следующую программу - обработчик события нажатия кнопки:
Procedure TForm1.Button1Click(Sender:Tobject); Var z,a,b:integer; Procedure Pw;
Var z:integer; begin
z:=a*b;
writeln('zPw=',z); end^/конец Pw begin
z:=1; a:=2; b:=4; Pw; //вызов процедуры Writeln('zb=',z); end;
Переменные а и b являются локальными в процедуре TForm1.Button1 Click но они же глобальные по отношению к процедуре Pw, т.к. описаны выше её описания. Процедура Pw "видит" переменные а и b, поэтому она напечатает zPw=8.
Переменная z здесь описана как внутри Pw так и снаружи. В этом случае под переменную z будет отведено две разных ячейки памяти, одна - под z, которая снаружи Pw, другая - под z внутри Pw. В результате внешняя z как бы становится «невидимой», т.е. внутри Pw она не изменится и второй оператор печати выведет zb=1.
Передача данных через формальные параметры Формальные параметры могут быть трех разновидностей: Параметры-значения, параметры - переменные, параметры - константы.
Параметры-значения описываются следующим образом: имя^ДхТшй; ^^Тшй; ...)
Для каждого формального параметра - значения транслятор внутри подпрограммы резервирует дополнительные ячейки памяти в соответствии с типом параметра. При вызове подпрограммы, происходит пересылка фактического параметра в эти ячейки памяти, после чего выполняется подпрограмма. При этом значение ячейки, где находился сам фактический параметр, не изменяется. Этот механизм обеспечивает, как, защищенность фактического параметра, так и его универсальность, т.е. то, что фактическим параметром может быть константа, переменная или арифметическое выражение.
Например:
Var x,u,z real;
Function sqxy(x,y:real):real; begin
if x<0 then x:=0; if y<0 then y:=0; Result:=sqrt(x)+sqrt(y);
end;
begin
x:=-0.5;
u:=4;
z:=sqxy(x,u);//вызов функции write(' x=',x,' u=',u,' z=',z); z:=sqxy(sin(u)+x,1.86);
end;
Здесь внутри функции (х, у) - формальные параметры, а в программе (х, и) и (sin(u)+x, 1.86) фактические.
При работе данной программы будет напечатано
x= -0.5 u=4 z=2 хотя внутри подпрограммы будет вычислено х=0.
Недостатком формального параметра-значения является необходимость дублирования ячеек памяти в вызывающей и в вызываемой программах, что в случае, например, параметра-массива приводит к неоправданным затратам памяти.
Параметры - константы описываются следующим образом: имя(Ол^ a,b:Tmi1; Const c,d,e:Tmi2; ...)
В этом случае фактическим параметром может быть переменная или константа. Для такого формального параметра новой ячейки не отводится, а при вызове подпрограммы в неё передается адрес ячейки фактического параметра, но внутри запрещены все его изменения.
Параметры - переменные описываются следующим образом:
Имя(Var a,b:Tип1; Var c,d,e:Tип2; ...)
В этом случае фактическим параметром может быть только имя переменной. При вызове подпрограмм передается адрес ячейки переменной, в которой находится фактический параметр, и все действия производятся над этой ячейкой. Поэтому после работы подпрограммы в ячейке фактического параметра при необходимости будет находиться результат.
Например:
type vek = array[1..10] of integer;
procedure sab(n:byte; cоnst a,b:vek; var s:integer);
Var i:byte;
begin
s:=0;
for i:=1 to n do
s:=s+a[i]*b[i];
end;
Var x,y:vek;
sk:integer;
begin
Read(x,y);//ввод массивов
sab(5,x,y,sk);
Write(sk);
end;
В процедуре sab массивы a, b описаны как константы, а переменная s описана как параметр-переменная. Это позволило для массивов x, y сэкономить память, а через параметр-переменную s вывести результат. Ячейку, выделяемую под параметр n, экономнее переслать саму, чем через её адрес, поэтому для нее используется параметр-значение.