Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методическое пособие для самостоятельных работ.doc
Скачиваний:
22
Добавлен:
16.11.2019
Размер:
2.89 Mб
Скачать

I, j :integer;

sum, x :real;

begin

sum:=0;

for i:=1 to StringGrid1.RowCount –1 do

for j:=1 to StringGrid1.ColCount - 1 do

begin

if StringGrid1.Cells[j,i]='' then x:=0

else x:=StrToFloat( StringGrid1.Cells[j,i]);

sum:=sum+x;

end;

Label2.Caption:=FloatToStr(sum);

end;

Условный оператор позволяет отождествлять пустые элементы с нулем. Для вывода результата использован компонент Label, поэтому исключена в принципе возможность изменения выведенного значения.

1.5. Вывод на печать

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

procedure TForm1.Button1Click(Sender: TObject);

var

p :TextFile;

k :real;

begin

AssignPrn (p);

Rewrite (p);

k:=4.3456;

writeln ( p, 'Это печать текста ',' K= ', k :3 :1);

CloseFile(p);

end;

Для выполнения печати объявим переменную типа TextFile и используем разновидность команды Assign – AssignPrn для настройки переменной р на порт принтера. Кроме того, необходимо добавить uses Printers; на соответствующее место в модуле формы.

В Delphi имеется специальный компонент TPrinter для организации сложного вывода, включая изменение шрифтов, управление расположением текста на бумаге, вывод графики и т.д. Ее описание выходит за рамки данного пособия.

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

  1. Какие три основных способа задания свойств компонента вы знаете?

  2. Как динамически изменить свойства компонента?

  3. Какая разница между остановкой программы и состоянием паузы?

  4. Что такое «событие», и какие источники событий вы знаете?

  5. Какие два типа меню используется в Delphi, чем они отличаются?

  6. Как обеспечить вывод результатов на печать?

  7. Какой специальный компонент В Delphi служит для организации сложного вывода на печать?

Примеры составления программ

  1. Угадывание целого числа

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbCancel: TBitBtn;

edInput: TEdit;

mmOutput: TMemo;

lbOutput: TLabel;

procedure bbRunClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

X: Integer; // Угадываемое число

IsAnswerWait: Boolean; // Признак ожидания ответа

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bbRunClick(Sender: TObject);

var

Y: Integer; // Ответ пользователя

begin

if edInput.Text='' then // Есть ответ?

Exit; // - нет: выход

try // Преобразуем текст в число

Y := StrToInt(Trim(edInput.Text));

except // Ошибка преобразования:

ShowMessage('Ошибка в записи числа!');

edInput.SelectAll; // Выделяем ошибочный текст

edInput.SetFocus;

Exit; // Завершаем работу

end;

if not IsAnswerWait then // Ждем ответ?

if X<Y then // - нет: число меньше?

mmOutput.Lines.Add('X < '+edInput.Text) // -да

else if X>Y then // - нет: число больше?

mmOutput.Lines.Add('X > '+edInput.Text) // -да

else // - нет. Пользователь угадал

begin // Предлагаем сыграть еще раз

mmOutput.Lines.Add('X = '+edInput.Text);

MessageBeep(mb_OK); // Звук для привлечения внимания

lbOutput.Caption :=

'Вы угадали! Введите 1, если хотите повторить.';

IsAnswerWait := True;

end else // Ждали ответ на приглашение

if Y=1 then // Пользователь согласен?

begin // -да

X := Random(1001);

lbOutput.Caption := 'Введите число:';

IsAnswerWait := False;

end else

Close; // Пользователь прекратил игру

edInput.Text := ''; // Очищаем ввод

edInput.SetFocus; // и передаем фокус ввода

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Randomize; // Инициализируем генератор

X := Random(1001); // Загадываем случайное число

edInput.SetFocus; // Передаем фокус ввода строке edInput

end;

end.

  1. Пример работы с модулем Cmplx (программа генерирует два случайных комплексных числа и производит над ними 4 математических действия)

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

type

TfmExample = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbClose: TBitBtn;

edInput: TEdit;

lbOutput: TLabel;

mmOutput: TMemo;

procedure bbRunClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmExample: TfmExample;

implementation

uses Cmplx;

{$R *.DFM}

procedure TfmExample.bbRunClick(Sender: TObject);

var

x,y,z: Complex;

procedure Output(Operation: Char);

// Осуществляет нужное действие и выводит результат в mmOutput

var

S: String;

begin

case Operation of

'+': z := AddC(x,y);

'-': z := SubC(x,y);

'*': z := MulC(x,y);

'/': z := DivC(x,y);

end;

S := '('+FormatFloat('+0.0000;-0.0000',x.re)+

FormatFloat('+0.0000j;-0.0000j',x.im)+')'+Operation+

'('+FormatFloat('+0.0000;-0.0000',y.re)+

FormatFloat('+0.0000j;-0.0000j',y.im)+'='+

FormatFloat('+0.0000;-0.0000',z.re)+

FormatFloat('+0.0000j;-0.0000j',x.im);

mmOutput.Lines.Add(S);

end; //Output

begin //bbRunClick

x.re := Random;

x.im := Random;

y.re := Random;

y.im := Random;

Output('+');

Output('-');

Output('*');

Output('/');

mmOutput.Lines.Add('');

end;

end.

  1. Сумма целых чисел.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbCancel: TBitBtn;

edInput: TEdit;

mmOutput: TMemo;

lbOutput: TLabel;

procedure bbRunClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bbRunClick(Sender: TObject);

var

N, Sum, i: Integer;

S: String;

begin

// Проверка ввода пользователя:

if edInput.Text='' then

Exit; // Ввода нет

try

N := StrToInt(Trim(edInput.Text));

except // Ошибочный ввод

ShowMessage('');

edInput.SelectAll;

edInput.SetFocus;

Exit;

end;

Sum := 0; // Начальное значение суммы

if N>=0 then // Анализ знака N

for i := 1 to N do // - положительное число

Sum := Sum+i

else

for i := -1 downto N do // - отрицательное число

Sum := Sum+i;

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

S := 'Сумма всех целых чисел в диапазоне от 0 до ';

mmOutput.Lines.Add(S+edInput.Text+' равна '+IntToStr(Sum));

// Подготовка нового ввода:

edInput.Text := '';

edInput.SetFocus;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

edInput.SetFocus

end;

end.

  1. Вычисление машинного эпсилон

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TfmExample = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbClose: TBitBtn;

edInput: TEdit;

lbOutput: TLabel;

mmOutput: TMemo;

procedure bbRunClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmExample: TfmExample;

implementation

{$R *.dfm}

procedure TfmExample.bbRunClick(Sender: TObject);

var

Epsilon: Real;

begin

Epsilon := 1;

while 1+Epsilon/2>1 do

Epsilon := Epsilon/2;

lbOutput.Caption := 'Машинное эпсилон = '+FloatToStr(Epsilon);

end;

end.

  1. Иллюстрация рекурсии (Введится положительное целое число и вычисляетя его факториал).

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TfmExample = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbCancel: TBitBtn;

edInput: TEdit;

mmOutput: TMemo;

lbOutput: TLabel;

procedure bbRunClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmExample: TfmExample;

implementation

{$R *.dfm}

procedure TfmExample.bbRunClick(Sender: TObject);

{Программа вычисляет N! и показывает результат работы в компоненте lbOutput. В компоненте edInput пользователь должен ввести значение N. }

Function Factorial(N: Word): Extended;

begin

if N = 0 then

Result := 1

else

Result := N * Factorial(N-1)

end; // Factorial

var

N: Integer;

begin

try

N := StrToInt(Trim(edInput.Text));

except

Exit;

end;

mmOutput.Lines.Add(edInput.Text+'! = '+FloatToStr(Factorial(N)))

end;

procedure TfmExample.FormActivate(Sender: TObject);

begin

edInput.SetFocus

end;

end.

Задания для самостоятельного выполнения

  1. Вычислить f = 10!, каждым из трёх вариантов цикла.

  2. Подсчитать k – количество цифр в десятичной записи целого неотрицательного числа n.

  3. Логической переменной t присвоить значение true или false в зависимости от того, является натуральное число k степенью 3 или нет.

  4. Вычислить: y = (2n-1)!! = 1•3•5•…•(2n-1), n>0.

  5. Вычислить: y=n!!, n>0.

  6. Вычислить: y=1!+2!+3!+…+n!, n>1.

  7. Числа Фибоначчи (fn) определяются формулами: F0=f1=1;Fn=fn-1+fn-2, где n=2,3,…Определить f40- 40-е число Фибоначчи.Вычислить s-сумму всех чисел Фибоначчи, которые не превосходят 1000.

  8. Вычислить сумму квадратов всех целых чисел, попадающих в интервал (ln x, e2x), х>1.

  9. Вычислить K-количество точек с целочисленными координатами , попадающих в круг радиуса R (R>0) с центром в начале координат.

  10. Напечатать в возрастающем порядке все трёхзначные числа, в десятичной записи которых нет одинаковых цифр (Операции деления не использовать).