Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методич Делфи.doc
Скачиваний:
248
Добавлен:
13.04.2015
Размер:
688.64 Кб
Скачать

4.2. Контрольные вопросы

1. Что такое инспектор объектов?

2. Что такое свойства и события объекта?

3. В чем разница между переменной и константой?

4. Назовите численные типы данных.

5. Структурный тип данных.

6. Какие арифметические операции допускаются в Delphi?

7. Типы данных Delphi.

4.3. Задания

1. Вычислить частное от деления двух целых чисел и вывести сообщение об ошибке в случае попытки делить на 0.

2. Написать программу – калькулятор с оператором switch. Пользователь вводит два числа и знак операции (+, -, *, /).

3. Напишите программу, которая по введенному десятичному числу выводит символ, код которого равен этому числу. Программа заканчивает работу, если введенное число равно единице.

4. Написать программу, которая выполняет посимвольный вывод сообщения.

5. Написать программу решения квадратного уравнения. Необходимо реализовать проверку исходных данных и в случае, если коэффициент при второй степени неизвестного равен 0, выводить соответствующее сообщение.

6. Напишите программу вычисления длины окружности S=2Pi*r.

7. Напишите программу вычисления площадь треугольника S=1/2*b*h.

8. Напишите программу вычисления объема шара V=4/3*Pi*r.

9. Напишите программу вычисления площади трапеции S=(a+b)/2 * h.

10. Напишите программу вычисления объема цилиндра V=Pi*r*H.

Лабораторная работа № 5 процедуры и функции

Цель работы: научиться создавать процедуры и функции, а также использовать стандартные процедуры Delphi.

5.1. Теоретическая часть

Процедуры и функции

Преимущества использования подпрограмм (процедур или функций) очевидны. Во-первых, в программе нет дублирования кода, что сокращает трудоемкость создания программы. Во-вторых, значительно повышается надежность программы. Подпрограмма – это небольшая программа, которая решает часть общей задачи. В языке Delphi есть два вида подпрограмм – процедура и функция. У каждой подпрограммы есть имя, которое используется в программе для вызова подпрограммы. Отличие функции от процедуры состоит в том, что с именем функции связано значение, поэтому функцию можно использовать в качестве операнда выражения, например, инструкции присваивания. Параметры, которые указываются в объявлении функции, называются формальными. Параметры, которые указываются в инструкции вызова процедуры, называются фактическими.

Функция

Функция - это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Функция обеспечивает удобный способ отдельно оформить некоторое вычисление и пользоваться им далее, не заботясь о том, как оно реализовано.

Процесс перехода к инструкциям функции называется вызовом функции или обращением к функции. В общем виде инструкция обращения к функции выглядит так:

Переменная := Функция (Параметры);

где: переменная – имя переменной, которой надо присвоить значение, вычисляемое функцией; функция – имя функции, значение которой надо присвоить переменной; параметры – список формальных параметров, которые применяются для вычисления значения функции. В качестве параметров обычно используют переменные или константы.

Объявление функции

Объявление функции в общем виде выглядит так:

function Имя(параметр1 : тип1, ..., параметрК : типК) : Тип;

var // здесь объявления локальных переменных

begin // здесь инструкции функции

Имя := Выражение;

end;

где: function – зарезервированное слово языка Delphi, обозначающее, что далее следуют инструкции, реализующие функцию программиста; имя – имя функции. Используется для перехода из программы к инструкциям функции; параметр – это переменная, значение которой используется для вычисления значения функции. Конкретное значение параметр получает во время работы программы в результате вызова функции из основной программы; тип – тип значения, которое функция возвращает в вызвавшую ее программу.

Тип выражения, определяющего значение функции, должен совпадать с типом функции, указанным в ее объявлении. Пример функции:

// проверяет, является ли символ допустимым во время ввода целого числа

function Islnt(ch : char) : Boolean;

begin

if (ch >= '0') and (ch <= '9') // цифры

or (ch = #13) // клавиша <Enter>

or (ch = #8) // клавиша <Backspace>

then Islnt := True // символ допустим

else Islnt := False; // недопустимый символ

end;

Данную функцию можно использовать (вызвать) при фильтрации вводимого текста в любое текстовое поле, например, Edit1:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if Islnt(Key) = False then key:=#0;

end;

Из примера видно, что функция вызывается и ей передается параметр Key, который обрабатывается в самой функции, после чего возвращается результат (в данном случае – False). При возвращенном значении False переменной key присваивается #0,что предотвратит ввод какого-либо символа в поле ввода, иначе символ вводится в поле ввода.

Процедура

Процедура – это разновидность подпрограммы. Обычно подпрограмма реализуется как процедура в двух случаях: когда подпрограмма не возвращает в основную программу никаких данных. Например, вычерчивает график в диалоговом окне; когда подпрограмма возвращает в вызвавшую ее программу больше чем одно значение. Например, подпрограмма, которая решает квадратное уравнение, должна вернуть в вызвавшую ее программу два дробных числа – корни уравнения.

В общем виде объявление процедуры выглядит так:

procedure Имя (var параметр1: тип1; ... var параметр К: тип К);

var // здесь объявление локальных переменных

begin // здесь инструкции процедуры

end;

где: procedure – зарезервированное слово языка Delphi, обозначающее, что далее следуют инструкции, реализующие процедуру программиста; имя – имя процедуры, которое используется для вызова процедуры; параметр K – формальный параметр, переменная, которая используется в инструкциях процедуры. Слово var перед именем параметра не является обязательным.

В качестве примера приведена процедура решения квадратного уравнения. У процедуры шесть параметров: первые три предназначены для передачи в процедуру исходных данных – коэффициентов уравнения; параметры x1 и х2 используются для возврата результата – корней уравнения; параметр ok служит для возврата информации о том, что решение существует.

// решает квадратное уравнение

procedure TForm1.SqRoot(a,b,c : real; var x1,x2 : real; var ok : boolean);

var

d : real; // дискриминант

begin

d:= Sqr(b) - 4*a*c;

if d < 0 then ok := False // уравнение не имеет решения

else

begin

ok := True;

x1 := (-b + Sqrt(d)) / (2*a) ; x2 := (-b - Sqrt(d)) / (2*a);

end; end;

//обрабатывает событие нажатие на Button1, где вызывает процедуру SqRoot

procedure TForm1.Button1Click(Sender: TObject);

var

k1,k2: real; // корни уравнения

rez: boolean; // True –решение есть, False – решения нет

mes:string; // сообщение

begin

SqRoot(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text),

StrToFloat(Edit3.Text),k1,k2,rez);

if rez then mes := 'Корни:'+#13+'x1='+FloatToStr(k1)+#13+'x2='+ FloatToStr(k2)+#13 else mes := 'Уравнение не имеет решения'; label_result.Caption := mes; end;

Инструкция вызова процедуры в общем виде выглядит так:

Имя(СписокПараметров);

где: Имя – имя вызываемой процедуры; Список Параметров – разделенные запятыми фактические параметры.

Функции и процедуры для порядковых типов данных

Pred() - функция возвращает предыдущее значение для выражения, указанного в качестве единственного аргумента.

Примеры: Pred(5) = 4, Pred('E') = 'D', Pred(True) = False.

Succ() - функция, обратная для Pred() - возвращает следующее значение.

Примеры: Succ(5) = 6, Succ('E') = 'F', Succ(False) = True.

Ord() - возвращает порядковый номер значения в списке значений типа данных. Примеры: Ord('A') = 65, Ord(True) = 1.

Low() - возвращает минимальное значение указанного типа данных.

Примеры: Low(Byte) = 0, Low(Boolean) = False, Low(Char) = #0 (символ с кодом 0).

High() - возвращает максимальное значение указанного типа данных.

Примеры: High(Byte) = 255, High(Boolean) = True, High(Char) = #255 (в русской локали это символ "я").

Dec() - уменьшает значение на единицу.

Inc() - увеличивает значение на единицу.

SizeOf() - Размер элемента данных указанного типа в байтах. Пример:значение SizeOf(Byte) равно 1, значение SizeOf (Integer) равно 4.

Стандартные функции преобразования типов

Round(X: Extended) - Округление дробного числа до ближайшего целого. Пример: значение Round (3.74) равно 4

RoundTo(X: Extended) - Округление дробного числа. . Пример: значение RoundTo(1.234, -2) равно 1.23

Trunc(X: Extended) - Отбрасывание дробной части числа. Пример: значение Trunc(3.74) равно 3

IntToStr(N: Integer): String - Преобразование целого числа в строку. Пример: значение IntToStr(12987) равно '12987'

FloatToStr(X: Extended): String - Преобразование дробного числа в строку. Пример: значение FloatToStr(3.74) равно '3.74'

StrToInt(S: String): Integer - Преобразование строки в целое число. Пример: значение StrToInt( '12985') равно 12985

StrToFloat(S: String): Extended - Преобразование строки в дробное число. Пример: значение StrToFloatf ('3.14') равно 3.14

Chr() - Символ, преобразованный из числового аргумента. Пример: значение Chr(78) равно 'N'

Функции IntToStr(), FloatToStr(), StrToInt(), StrToFloat() требуют подключения Unit Sysutils, а функция RoundTo() подключения Unit Math.

Функции работы со строками

Pos(Substr: String; Str: String): Integer - возвращает позицию (индекс) первого вхождения Substr в строке Str. Если Substr нет в Str, возвращает 0. Например позиция запятой в строке может быть найдена так N:=Pos(DecimalSeparator, S);

Insert(Source: String; var S: String; Index: Integer): Integer - вставляет строку Source в строку S, начиная с номера символа, равного Index

Delete(var S: String; Index: Integer, Count: Integer) - удаляет из строки S подстроку, начинающуюся с номера символа, равного Index, и содержащую до Count символов.

Copy(S: String; Index: Integer, Count: Integer): String - Возвращает подстроку строки S, начиная с номера символа, равного Index и содержащую до Count символов.

Length(S: String) - Длина строки или число элементов в массиве. Пример: значение length('abc') равно 3

AnsiUpperCase(const S: String): String - Возвращает строку S, преобразованную к верхнему регистру.

Trim(const S: String): String - Удаляет из строки S начальные и завершающие пробелы и управляющие символы.

TrimLeft(const S: String): String - Удаляет из строки S начальные пробелы и управляющие символы.

TrimRight(const S: String): String - Удаляет из строки S завершающие пробелы и управляющие символы.

Процедуры и функции преобразования дат и времени

Функции, предоставляющие информацию о текущих дате и времени:

Now: TDateTime - возвращает текущую дату и время. Пример TekDataVr:=Now;

Date: TDateTime - возвращает текущую дату. Пример TekData:=Date;

Time: TDateTime - возвращает текущее время. Пример TekVr:=Time;

Функции и процедуры работающие с составляющими даты и времени (год, месяц, число, день недели, часы, минуты, секунды и даже миллисекунды):

DayOfWeek(Date: TDateTime): Integer - возвращает текущий номер дня недели: 1 - воскресенье, 7 - суббота.

DecodeDate(Date: TDateTime; var Year, Month, Day: Word) - разбивает дату Date на год - Year, месяц - Month и день - Day.

DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) - разбивает время Time на час - Hour, минуты - Min, секунды - Sec и миллисекунды - MSec.

EncodeDate(Year, Month, Day: Word): TDateTime - объединяет год - Year, месяц - Month и день - Day в значение типа TDateTime.

EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime - объединяет час - Hour, минуты - Min, секунды - Sec и миллисекунды - MSec.

Функции, переводящие дату и время из формата TDateTime в строчный формат:

DateTimeToStr(DateTime: TDateTime): String - Преобразует дату и время DateTime в строку.

DateToStr(Date: TDateTime): String - Преобразует дату Date в строку.

TimeToStr(Time: TDateTime): String - Преобразует время Time в строку.

Диалоговые окна ввода/вывода информации.

Процедура ShowMessage, функции MessageDlg, MessageDlgPos и MessageBox отображают окно вывода сообщений, а функции InputBox и InputQuery – окно для ввода информации.

Процедура ShowMessage (const Msg: String) отображает окно сообщения с кнопкой ОК. Пример: ShowMessage('Сообщение');

Функция MessageDlg(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; Helpctx: Longint) : word отображает окно сообщения в центре экрана и позволяет получить ответ пользователя. Параметр Msg содержит отображаемое сообщение.

Тип окна сообщения определяется параметром АТуре, параметр AButtons задает набор кнопок.

Функция MessageDlgPos(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer) : Word отличается от функции MessageDlg наличием параметров Х и Y, управляющих положением окна на экране.

Функция InputBox(const ACaption, APrompt, ADefault: String): String отображает диалоговое окно для ввода строки текста.

Параметр ACaption задает заголовок окна, а параметр APrompt содержит поясняющий текст к полю ввода. Параметр ADefault определяет строку, возвращаемую функцией при отказе пользователя от ввода информации (нажатие кнопки Cancel или клавиши <Esc>).

Пример использования функции InputBox:

rezult := InputBox('Город', 'Введите название города’, 'Владикавказ');

Функция InputQuery (const ACaption, APrompt: String; var Value: String): Boolean отличается от функции InputBox тем, что вместо третьего параметра - строки по умолчанию - используется параметр Value, который в случае подтверждения ввода содержит введенную пользователем строку. Если нажата кнопка ОК, то функция возвращает значение True, если нажата кнопка Cancel или клавиша <Esc> – значение False.

Var NewString:string;

begin

NewString := 'Владикавказ';

if InputQuery('Город', 'Введите название города', NewString) = true

then ShowMessage('Вы нажали кнопку Ok')

else ShowMessage('Вы нажали кнопку Cancel');

end;

Функция MessageBox(Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer создает и отображает блок диалога, содеpежащий указанное сообщение и заголовок, а также предопределенные пиктограммы и текстовые кнопки, в соответствии с параметром TexType.

Параметры:

Parent - окно, владеющее блоком сообщений.

Txt - отобpажаемое сообщение.

Caption - заголовок блока диалога.

TextType: одна или комбинация констант mb_.

Пример использования функции MessageBox:

case MessageBox(Application.handle, 'Сохранить изменения', 'Предупреждение', MB_ICONQUESTION + MB_YESNOCANCEL + MB_DEFBUTTON3) of

mrYes: begin

AssignFile (F,'Save.dat'); Rewrite(F); WriteLn(F,X);

CloseFile(F); end;

mrNo: Close;

mrCancel: exit; end;