- •Работает
- •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. Многошаговые схемы Адамса
- •Литература
Алгоритмов
4.1. Понятие разветвляющегося алгоритма
Алгоритм называется разветвляющимся, если он содержит несколько ветвей отличающихся друг от друга содержанием вычислений. Выход вычислительного процесса на ту или иную ветвь алгоритма определяется исходными данными задачи.
На рис. 4.1. приведена схема разветвляющегося алгоритма решения квадратного уравнения
ax2+bx+c=0, a>0
2a
b ± V b 2 - 4ac
x12
xl, x2
Рис. 4.1
При выполнении алгоритма исследуется подкоренное выражение -дискриминант d уравнения. Печатается сообщение, что нет действительных корней, если d<0 и выводится пара корней xl, x2, если d>0. Заметим, что за счет введения переменной а2 и пересчета d = 4d повторенные вычисления отсутствуют.
Для программирования разветвлений в языке Паскаль имеется два условных оператора if и Case.
4.2. Оператор условия if
Этот оператор служит для разделения естественного порядка выполнения операторов программы на две ветви. Он может иметь одну из следующих форм записи:
if <условие> then P1 else P2;
if <условие> then P1;
где <условие> записывается с помощью выражения логического типа (см. лекцию 3), P1, P2 - операторы. Если условие выполняется, тогда выполняется оператор P1, иначе, в первом варианте, выполняется оператор P2, во втором - выполняется оператор следующий за Р1. Ветвь then на схеме по умолчанию показывается справа. Перед ключивым словом e/se не ставится точка с запятой.
При вложенности операторов if каждое else соответствует тому then, которое непосредственно ему предшествует, например:
if <условие1> then if <условие2> then P1
else P2
else P3;
В условном операторе после then и else можно помещать только один оператор. Однако, часто необходимо в какой-то ветви выполнить группу операторов. В Паскале имеется возможность объединить группу операторов в один составной оператор с помощью ключевых слов begin ... end. Такой составной оператор может быть размещен после then или else.
Теперь мы готовы написать процедуру алгоритма, представленного на рис. 4.1:
B Delphi имя процедуры
Procedure <имя события>;
соответствует
имени события, при возникновении
которого она вызывается, например,
щелчек мыши на кнопке, см. пп.2.3., 2.4.
Заметим,
что здесь при реализации ввода и вывода
мы для краткости используем операторы
read
и
writeln.
В
Delphi
обычно
для ввода используют чтение данных из
окон формы, а вывод осуществляется в
окно Memo
(см.
Лекцию 2).
var a,b,c,d,x1,x2:extended; ^
begin
Read(a,b,c);
Writeln(a,b,c);
d:=sqr(b)-4*a*c;
if d>=0 then
begin
d:=sqrt(d);
a2:=2*a;
x1:=(-b+d)/a2;
x2:=(-b-d)/a2; writeln(x1,x2) end
else
writeln(' нет корней'); //конец оператора if end;
При составлении сложных разветвляющихся алгоритмов необходимо стремиться, по возможности, минимизировать количество проверок условий.
Так, например, для решения задачи о нахождении минимального из трех чисел: m=min(x,y,z) можно предложить следующие две схемы:
|
|
m=z |
m: x; Обычно схему рис.4.2 составляют начи-
if y<m then m:=y; нающие программисты. Как видно схема
write (m);
рис.4.3 более экономна, ее легко продолжить для 4-х, 5-ти чисел. Фрагмент программы ее реализующей приведен слева:
K
, напечатать "нет", если x<1.
sin x, если 5 < x;
Read(x);
if x<1 then writeln ('нет') else begin
if x<5 then K:=cos(x)
else К^пПХ); writeln (K); end;
Как видим, алгоритм составлен таким образом, что в каждом из двух операторов if проверяется только одно неравенство, хотя в условии 4 неравенства.