Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 2

.pdf
Скачиваний:
11
Добавлен:
14.03.2016
Размер:
429.99 Кб
Скачать

11

Этот оператор прекращает дальнейшую работу обработчика в случае, если в окне ввода компонента edInput нет текста.

Окно программы INTMULT показано на рисунке.

Сохраните проект (File/Save All).

3.3. Разработка программы CALC

Данная программа, имитирует работу микрокалькулятора. Программа вводит два операнда и знак математического действия, после чего показывает результат.

С помощью опции File/New Application главного меню Delphi откройте новый проект. Сохраните проект под именем Calc.pas в папке С:\Projects\Calc\, а модуль под именем Main.pas в той же папке.

Переименуйте компонент lbInput в lbInput1. Справа от компонента lbInput1 поместите компонент ComboBox, назовите его cbSign (свойство Name). Раскройте диалоговое окно свойства Items этого компонента и введите четыре строки со знаками математических действий в следующей последовательности:

+

*

/

Компонент ComboBox во многом напоминает ListBox, за исключением того, что позволяет вводить информацию в маленьком поле ввода сверху ListBox. Есть несколько типов ComboBox, но наиболее популярен выпадающий вниз (drop-down combo box), который можно видеть внизу окна диалога выбора файла.

Справа, от cbSign разместите еще один компонент Edit и назовите его edInput2. Очистите свойства Text у всех трех компонентов.

Для обработчика события bbRunClick введите такой текст: procedure TfmExample.bbRunClick(Sender: TObject); var

X, Y, Z: Real; begin

//Блокируем работу, если не введены операнды и не выбрано действие if (edInput1.Text='') or (edInput2.Text='')

or (cbSign.ItemIndex<0) then Exit;

// Проверяем правильность ввода 1-го операнда

12

try // Начало защищенного блока

X := StrToFloat(Trim(edInput1.Text)); except // Обработка ошибки

ShowMessage('Ошибочная запись числа:'+edInput1.Text); EdInput1.SetFocus;

Exit;

end; // Конец защищенного блока

// Проверяем правильность ввода 2-го операнда try // Начало защищенного блока

Y := StrToFloat(Trim(edInput2.Text)); except // Обработка ошибки

ShowMessage('Ошибочная запись числа:'+edInput2.Text); edInput2.SetFocus;

Exit;

end; // Конец защищенного блока // Все правильно: вычисляем результат case cbSign.ItemIndex of

0:Z := X + Y;

1:Z := X - Y;

2:Z := X * Y;

3:try

Z := X / Y; except

Z := 1.1e+38; // Бесконечность при делении на О end;

end;

// Показываем результат

lbOutput.Caption := Trim(edInput1.Text)+' '+ cbSign.Items[cbSign.ItemIndex]+' '+Trim(edInput2.Text)+' = '; if Z >= 1.1e+38 then

lbOutput.Caption := IbOutput.Caption+'бесконечность' else

lbOutput.Caption := lbOutput.Caption+FloatToStr(Z); mmOutput.Lines.Add(lbOutput.Caption);

// Очищаем ввод edInput1.Text := ''; edInput2.Text := ''; cbSign.ItemIndex := -1; edInput1.SetFocus;

end;

Обработчики исключений строятся в виде таких конструкций:

try

<защищенный блок операторов> except

<обработка исключения> end;

Все операторы, располагающиеся между зарезервированными словами try и except относятся к защищенному блоку. Если при выполнении любого из них возникнет исключение, управление будет передано в блок операторов, располагающихся между except и end, но если обработка защищенного блока пройдет без ошибок, блок <обработка исключения> игнорируется и правление передается оператору, следующему за end.

13

Окно программы CALC показано на рисунке.

Сохраните проект (File/Save All).

3.4. Учебная программа AVERAGE

Эта программа создает массив из N случайных целых чисел, равномерно распределенных в диапазоне от 0 до MAX_VALUE – 1, подсчитывает среднее арифметическое этих чисел,

атакже определяет и выводит на экран минимальное и максимальное из них.

Спомощью опции File/New Application главного меню Delphi откройте новый проект. Сохраните проект под именем Average.pas в папке С:\Projects\Average\, а модуль под именем Main.pas в той же папке.

Для создания массива используется встроенная функция Random(Max), которая возвращает случайное целое число, равномерно распределенное в диапазоне от 0 до Max – 1 (Max – параметр обращения).

procedure TfmExample.bbRunClick(Sender: TObject);

const

// Количество

 

N = 1000;

элементов массива

MAX_VALUE =100+1;// Диапазон значений случайных чисел

var

 

//

 

m: array [1..N] of Integer;

Массив чисел

i: Integer;

 

//

Индекс массива

max,min: Integer; // Максимальное и минимальное число

sum: Real;

// Сумма чисел

begin

 

// Наполняем массив случайными числами: for i := 1 to N do

m[i] := Random(MAX_VALUE);

//Задаем начальные значения переменных sum := m[1];

max := m[l]; min := m[l];

//Цикл вычисления суммы всех случайных чисел и поиска

//минимального и максимального

for i := 2 to N do begin

sum := sum + m[i];

14

if m[i] < min then min := m[i]

else if m[i] > max then max := m[i]

end;

// Вычисляем среднее значение и выводим результат lbOutput.Caption := 'Мин = '+IntToStr(min)+' Макс = '+ IntToStr(max)+' Среднее = '+FloatToStr(sum/N);

end;

Окно программы AVERAGE показано на рисунке.

Сохраните проект (File/Save All).

3.5. Учебная программа UPSTRING

В данной программе используется процедура, в которой преобразуется некоторая символьная строка таким образом, чтобы все строчные буквы заменялись соответствующими прописными. В Object Pascal имеется стандартная функция UpCase, которая выполняет аналогичные действия над одиночным символом. Данная процедура (UpString) будет преобразовывать сразу все символы строки, причем она пригодна не только для латинских букв, но и для букв русского алфавита.

С помощью опции File/New Application главного меню Delphi откройте новый проект. Сохраните проект под именем UpStr_P.pas в папке С:\Projects\UpStr_P\, а модуль под именем Main.pas в той же папке.

Разработка программы проводится в два этапа. Сначала сконструируем основную (вызывающую) часть программы. Она должна получить входную строку из компонента edInput, преобразовать ее с помощью процедуры UpString в выходную строку и поместить результат в lbOutput.Text. Это нужно запрограммировать в обработчике bbRunClick:

procedure TfmExample.bbRunClick(Sender: TObject); procedure UpString(stInp: String; var stOut: String);

//Эта процедура преобразует все буквы строки stInp в прописные

//и помещает результат в выходную строку stOut

begin

stOut := stInp; end; // UpString

var

 

15

SI, S2: String;

 

begin

// Получаем исходную строку

SI := edInput.Text;

UpString(SI,S2);

// Преобразуем ее

lbOutput.Caption := S2;

// Выводим результат

edInput.Text := '';

 

edInput.SetFocus;

 

end;

 

В этой программе используется замещение процедуры UpString «заглушкой», в которой на самом деле не осуществляется нужных действий, а выходная строка просто копирует входную.

При разработке алгоритма процедуры необходимо учесть, что в соответствии с принятой в Windows ANSI-кодировкой, символы кириллицы располагаются сплошным массивом от «А» до «я», за исключением «ё» и «Ё», которые предшествуют «А». Кроме того, символ «я» имеет внутренний код 255, т. е. максимально возможное значение одного байта.

Возможный вариант процедуры:

procedure UpString (stInp: String; var stOut: String);

//Эта процедура преобразует все буквы строки stInp в прописные

//и помешает результат в выходную строку stOut

var

k: Integer; // Параметр цикла begin

StOut := stInp;

// Цикл no-буквенного преобразования

for k : = 1 to Length(stOut) {Length - длина строки} do begin

stOut[k] :=

UpCase (stOut[k]);

// Преобразуем латиницу

if

stOut[k]

>= 'a'

then // Строчная

буква кириллицы?

 

stOut[k]

:= // Да: преобразуем ее

 

 

Chr(ord('A') +

ordtstOut[k]) - ord('a'));

if stOut[k]='ё' then

// Преобразуем ё

 

end;

stOut[k]

:= 'Ё';

в Ё

// UpString

 

 

 

end;

 

 

 

Сохраните проект (File/Save All).

Рассмотрим способ реализации той же программы в виде функции.

С помощью опции File/New Application главного меню Delphi откройте новый проект. Сохраните проект под именем UpStr_F.pas в папке С:\Projects\UpStr_F\, а модуль под именем Main.pas в той же папке. Код функции, преобразующей строчные буквы кириллицы в прописные, представлен ниже.

procedure TfmExample.bbRunClick(Sender: TObject); function UpString(stlnp: String): String;

//Эта функция преобразует все буквы строки stlnp в прописные

//и помещает результат в выходную строку Result

var

k: Integer; // Параметр цикла begin

Result := stInp;

// Цикл по-буквенного преобразования

 

16

 

for k := 1 to Length(Result) do

 

begin

 

 

Result[k] := UpCase(Result[k]); // Преобразуем латиницу

 

if Result[k] >= 'a' then // Строчная буква кириллицы?

 

Result[k] :=

// Да: преобразуем ее

 

Chr(ord('A') + ord(Result[k]) - ord('a'));

 

if Result[k] = 'ё' then

 

 

Result[k] := 'Ё'; // Преобразуем ё в Ё

end;

 

end;

// UpString

 

begin

//В следующем операторе исходная строка edInput.Text

//преобразуется и помещается в выходную строку lbOutput.Caption: lbOutput.Caption := UpString(edInput.Text);

edInput.Text := '';

edInput.SetFocus;

end;

Окно программы Upstring показано на рисунке

Сохраните проект (File/Save All).