- •Работает
- •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. Многошаговые схемы Адамса
- •Литература
6.6. Инициирование собственных исключительных ситуаций
Возникновение исключительной ситуации может быть инициировано самим разработчиком программы для обработки некоторых «своих» ситуаций. Для этого имеется три оператора.
Во-первых, процедура Abort вставленная в нужном месте раздела try генерирует ситуацию типа EAbort. В отличие от Break и Exit, она позволяет, например, осуществить выход из глубоко вложенных циклов и процедур.
Во-вторых, процедура Assert (B:Boolean; [const st:String]), генерирует исключительную ситуацию типа EAssertionFailed если результат логического выражения B=false, при этом возможна выдача в диалоговое окно сообщения, помещенного в St (этот аргумент может отсутствовать).
В-третьих, ключевое слово
raise <тип исключения>. create ('текст сообщения'),
генерирует исключительную ситуацию указанного типа и выдает сообщение.
6.7. Примеры фрагментов программ
В дополнение к этой теме приведем две функции, позволяющие организовать экстренный диалог и управлять ходом вычислений. У Widows имеется набор API-функций (Application Program Interface - интерфейс прикладных программ).
При обработке исключительных ситуаций удобно использовать процедуру ShowMessage('Выводимый текст'), которая выводит иконку с текстом. Если она появилась, то будет до конца работать.
Для обеспечения диалога применяется функция: MessageDlg('текст',mtInformaпon,[mbok,mbNov..],0):word, которая, кроме сообщения на иконке имеет заголовок Inf (таких стандартных заголовков имеется 9) и еще от одной до 11 кнопок, т.е. главное то, что реализуется остановка и ожидание нажатия кнопки!!! При нажатии на одну из них функция выдает номер соответствующей кнопки (тгОк, mrNo, ...), что можно полезно использовать например с помощью оператора case.
K:=MessageDlg ('значениех<0', mtInformation,[mbok,mbNo,^],0); Case k of
Mrok: <>; MrNo: <>; MrYes: <>; End;
Пример перехвата переполнения: try f:=1;
for i:=2 to 1000 do f:=f*i; except
on EintOverFlow do
ShowMessage('переполнение при i='+intTostr(I)'); end;
Пример обработки файла:
st:=Edit1.text; Assign(f,st);
try reset(f); except rewrite(f); end; try
Работа с файлом: finally
Flush (f); // запись в файл содержимого буфера closefile(f); end;
Программа не будет остановлена, файл будет закрыт.
Пример перехвата деления на нуль внутри цикла
x:=a;
repeat
try
y:=sin(x)/cos(x); except
on EZeroDivide do begin y:=0; MessageDlg('rpi x='+FloattoStr(x),mlEnor? [mbOk? mbNO], 0) of case: MrNo: exit; MrYes:y:=0; End; end;
Writeln(x,y); x=x+h; Until x>b+h/2; end;
Пример создания собственной исключительной ситуации:
try
if x=0 then raise Eabort.Create ('x=0');
Assert(x>0,'x отрицательный'); y:=sgrt(x)-z+5/x;
except
on EAssertionFiled do exit; on Eabort do Exit; end;
Пример программы с обработкой исключительных ситуаций. Простейший калькулятор:
*r
Исключительные
ситуации Г-П[Щ[х'
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type
TForm1 = class(TForm) Buttonl: TButton;
Button2: TButton; Button3: TButton; Button4: TButton; BitBtn1: TBitBtn; Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel; Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
{$R+}
procedure TForm1.FormCreate(Sender: TObject); begin
Edit1.Clear;
Edit2.Clear; end;
procedure TForm1.Button1Click(Sender: TObject); var a,b,c:extended; // /
begin
try
a:=StrToFloat(Edit1.text); b:=StrToFloat(Edit2.text);
c:=a/b;
label2.Caption:=FloatToStrf(c,fffixed,8,2);
except
on EZeroDivide do MessageDlg('Нельзя делить на нуль',
mtError,[mbOk],0); on Econverterror do MessageDlg('Проверьте'+
' значения в edit',mtError,[mbOk],0); end; end;
procedure TForm1.Button4Click(Sender: TObject); var a,b,c:byte; // +
begin try
a:=StrToInt(Edit1.text); b:=StrToInt(Edit2.text);
c:=a+b;
label2.Caption:=IntToStr(c); except
on Erangeerror do MessageDlg('Результат выходит за'+ ' пределы диапазона допустимых
значений',mtError,[mbOk],0);
on Econverterror do MessageDlg('Проверьте'+ ' значения в edit',mtError,[mbOk],0); end;
procedure TForm1.Button2Click(Sender: TObject); var a,b,c:byte; // -begin try
a:=StrToInt(Edit1.text); b:=StrToInt(Edit2.text);
c:=a-b;
label2.Caption:=IntToStr(c);
except
on Erangeerror do MessageDlg('Результат выходит за'+ ' пределы диапазона допустимых
значений',mtError,[mbOk],0);
on Econverterror do MessageDlg('Проверьте'+ ' значения в edit',mtError,[mbOk],0); end; end;
procedure TForm1.Button3Click(Sender: TObject);
var a,b,c:byte; // * begin try
a:=StrToInt(Edit1.text); b:=StrToInt(Edit2.text); c:=a*b;
label2.Caption:=IntToStr(c);
except
on ERangeerror do MessageDlg(' Результат выходит за'+ ' пределы диапазона допустимых значений', mtError,[mbOk],0);
on EConverterror do MessageDlg(' Проверьте'+ ' значения в edit',mtError,[mbOk],0);
end; end;
end.