Программирование на языке объектно–ориентированного и визуального программирования Delphi

Тип работы:
Контрольная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Задание 1. Вычисление выражений. Использование стандартных функций. Работа с графикой

Цель задания:

Изучение порядка действий при вычислении выражении.

Изучение способов ввода данных с клавиатуры.

Создание графических областей.

Обработка сообщений о положении мыши и вводе точек с ее помощью в графической области.

Постановка задачи.

На форме воспроизвести формулу для вычисления, предусмотреть ввод с клавиатуры любого значения Х и вывод результатов расчета по формуле.

Организовать на форме область, в которой нарисовать графики согласно приведенному варианта.

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

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

Вариант задания:

1) при Х=-0. 7129

2) координаты исследуемой точки: (-0. 5;-0. 9)

Код программы:

unit Unit1;

interface

uses

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

Dialogs, TeEngine, Series, TeeProcs, Chart, StdCtrls, ExtCtrls, TeeFunci,

TeeShape;

type

TForm1 = class (TForm)

pnl1: TPanel;

edt1: TEdit;

lbl1: TLabel;

lbl2: TLabel;

btn1: TButton;

cht1: TChart;

lnsrsSeries1: TLineSeries;

lbl3: TLabel;

pnl2: TPanel;

cht2: TChart;

shp1: TShape;

Series1: TChartShape;

edt2: TEdit;

lbl4: TLabel;

edt3: TEdit;

lbl5: TLabel;

btn2: TButton;

lbl6: TLabel;

procedure btn1Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure btn2Click (Sender: TObject);

procedure cht2Click (Sender: TObject);

private

function Y (const x: real): Real;

procedure SetDot (const x, y: Real);

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

function TForm1. Y (const x: real): Real;

begin

Result := Sin (arctan (x));

end;

procedure TForm1. btn1Click (Sender: TObject);

const

Range = 4;

Step = 0. 1;

var

x: Real;

begin

lbl3. Caption := FloatToStr (Y (StrToFloat (edt1. Text)));

lnsrsSeries1. Clear;

x := -Range;

while x < Range do

begin

lnsrsSeries1. AddXY (x, y (x));

x := x + Step;

end;

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

DecimalSeparator := '. ';

end;

procedure TForm1. SetDot (const x, y: Real);

begin

shp1. Top := cht2. LeftAxis. CalcPosValue (y) — shp1. Height div 2;

shp1. Left := cht2. BottomAxis. CalcPosValue (x) — shp1. Width div 2;

if (0 < y) and ((x < 0) and (y < x + 1) or (x > 0) and (y < - x + 1)) then

begin

shp1. Brush. Color := clWhite;

lbl6. Caption := 'Точка пренадлежит области';

end

else

begin

shp1. Brush. Color := clRed;

lbl6. Caption := 'Точка не пренадлежит области';

end

end;

procedure TForm1. btn2Click (Sender: TObject);

begin

SetDot (StrToFloat (edt2. Text), StrToFloat (edt3. Text));

end;

procedure TForm1. cht2Click (Sender: TObject);

var

x, y: Real;

begin

x := cht2. BottomAxis. CalcPosPoint (cht2. GetCursorPos. x);

Y := cht2. LeftAxis. CalcPosPoint (cht2. GetCursorPos. Y);

edt2. Text := FloatToStr (x);

edt3. Text := FloatToStr (Y);

SetDot (x, y);

end;

end.

Листинг:

Задание 2. Построение таблиц функций

Цель задания:

Построение графиков по таблицам данных

Постановка задачи:

1) Составить программу вычисления значений функции F (X) на отрезке [A, B] в точках X1=А+Н, где Н=(В-А)/М, М — заданное число.

2) Построить таблицу, где указать:

№ шага

Н

Х=

F (X)=

3) По данным таблицы построить график функции F (X) с простановкой значений по обоим осям и возможностью изменения масштаба графика.

Методические указания:

Значение шага Н должно вычисляться один раз.

Вариант задания:

Номер варианта

Функция

Параметры

А

В

М

3.

cos (x)

/3

2*/3

20

Код программы:

unit Unit1;

interface

uses

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

Dialogs, Grids, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type

TForm1 = class (TForm)

cht1: TChart;

lnsrsSeries1: TLineSeries;

StringGrid1: TStringGrid;

procedure FormCreate (Sender: TObject);

private

function f (const x: Real): Real;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

// 1) Составить программу вычисления значений функции F (X)

function TForm1. f (const x: Real): Real;

begin

Result := Cos (x);

end;

procedure TForm1. FormCreate (Sender: TObject);

const

// на отрезке [A, B] в точках X1=А+Н, где Н=(В-А)/М, М — заданное

число.

A = {-PI; }PI / 3;

B = {Pi; }2 * PI / 3;

M = {360; }20;

H = (B — A) / M;

var

i: Integer;

x: Real;

begin

// 2) Построить таблицу, где указать:

StringGrid1. Cells[0, 0] := '№ Шага';

StringGrid1. Cells[1, 0] := 'H';

StringGrid1. Cells[2, 0] := 'X =';

StringGrid1. Cells[3, 0] := 'F (X) =';

x := A;

i := 0;

while x < B do

begin

inc (i);

StringGrid1. RowCount := StringGrid1. RowCount + 1;

StringGrid1. Cells[0, i] := IntToStr (i);

StringGrid1. Cells[1, i] := FloatToStr (H);

StringGrid1. Cells[2, i] := FloatToStr (X);

StringGrid1. Cells[3, i] := FloatToStr (f (X));

x := x + h;

end;

// 3) По данным таблицы построить график функции F (X) с

// простановкой значений по обоим осям и возможностью

// изменения масштаба графика.

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

lnsrsSeries1. AddXY (StrToFloat (StringGrid1. Cells[2, i]),

StrToFloat (StringGrid1. Cells[3, i]));

StringGrid1. FixedCols := 1;

StringGrid1. FixedRows := 1;

end;

end.

Листинг программы:

Задание 3. Организация циклов в программе

Цель задания

Получение навыков в выборе и использовании операторов цикла и таблицы StringGrid.

Знакомство с итерационными процессами

Постановка задачи

1. Используя оператор цикла, найти сумму элементов, указанных в конкретном варианте. Результат напечатать в виде таблицы с указанием № шага, значения текущего члена ряда, суммы ряда в текущем шаге:

№ шага

Значение текущего члена ряда

Сумма ряда в текущем шаге

2. Построить график, показывающий изменение всех параметров таблицы.

Вариант задания:

Найти сумму 15 членов ряда, в котором

Код программы:

unit Unit1;

interface

uses

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

Dialogs, Grids, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type

TForm1 = class (TForm)

cht1: TChart;

StringGrid1: TStringGrid;

lnsrsSeries1: TLineSeries;

lnsrsSeries2: TLineSeries;

procedure FormCreate (Sender: TObject);

private

function a (const n: Integer): Real;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

function TForm1. a (const n: Integer): Real;

begin

Result := Exp (Sqr (Ln (n)))/exp (ln (n)*ln (ln (n)));

end;

procedure TForm1. FormCreate (Sender: TObject);

const

FirstN = 2;

N = 15;

LastN = N + FirstN — 1;

var

i: Integer;

cur: Real;

sum: Real;

begin

StringGrid1. RowCount := N + 1;

StringGrid1. FixedCols := 1;

StringGrid1. FixedRows := 1;

StringGrid1. Cells[0, 0] := '№ Шага';

StringGrid1. Cells[1, 0] := 'Текущий';

StringGrid1. Cells[2, 0] := 'Сумма';

sum := 0;

for i := 1 to N do

begin

cur := a (i + (FirstN — 1));

sum := sum + cur;

StringGrid1. Cells[0, i] := IntToStr (i);

StringGrid1. Cells[1, i] := FloatToStr (cur);

StringGrid1. Cells[2, i] := FloatToStr (sum);

lnsrsSeries1. AddXY (i, cur);

lnsrsSeries2. AddXY (i, sum);

end;

end;

end.

Листинг:

функция графика итерационный массив

Задание 4. Работа с массивами чисел

Цель задания:

Получение практических навыков в работе с массивами

Знакомство с алгоритмами упорядочения

Постановка задачи:

1. Для конкретного варианта составить массив исходных данных, предусмотрев возможность заполнения массива в виде таблицы в ручную и автоматически.

2. Изучив алгоритмы упорядочения, выбрать один из них. Написать программу, которая работает с любым допустимым набором данных.

3. Входную информацию и результаты счета вывести на экран (предусмотреть возможность распечатки результатов работы на принтере), снабдив их соответствующими заголовками.

4. Подсчитать количество А) сравнений элементов; Б) перестановок элементов.

Содержание отчета:

1) Постановка задачи.

2) Описание всех действий по созданию приложения.

3) Блок-схема или алгоритм (в том числе сортировки)

4) Математические выкладки

5) Листинг программы и всех модулей

6) Контрольный пример (распечатка изображений экранов, иллюстрирующих работу приложения).

Методические указания:

Исходные данные должны включать и положительные числа, и отрицательные, и нули.

Вариант задания:

Дан двумерный массив, содержащий 5 строк и 3 столбца. Элементами массива являются целые числа. Упорядочить массив по не убыванию элементов второй строки.

Код программы:

unit Unit1;

interface

uses

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

Dialogs, Grids, StdCtrls, ExtCtrls, Printers;

type

TForm1 = class (TForm)

pnl1: TPanel;

pnl2: TPanel;

StringGrid2: TStringGrid;

StringGrid1: TStringGrid;

pnl4: TPanel;

rb1: TRadioButton;

rb2: TRadioButton;

pnl3: TPanel;

btn1: TButton;

edt1: TEdit;

lbl1: TLabel;

lbl2: TLabel;

edt2: TEdit;

btn2: TButton;

pnl6: TPanel;

lbl3: TLabel;

lbl4: TLabel;

edt3: TEdit;

edt4: TEdit;

lbl5: TLabel;

lbl6: TLabel;

pnl5: TPanel;

btn4: TButton;

btn3: TButton;

procedure btn1Click (Sender: TObject);

procedure btn2Click (Sender: TObject);

procedure btn3Click (Sender: TObject);

procedure btn4Click (Sender: TObject);

private

m: Integer;

n: Integer;

a: array of array of Integer;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

const

MyRandMax = 99;

procedure TForm1. btn1Click (Sender: TObject);

begin

m := StrToInt (edt1. Text);

n := StrToInt (edt2. Text);

SetLength (a, m, n);

StringGrid1. RowCount := m;

StringGrid1. ColCount := n;

StringGrid2. RowCount := m;

StringGrid2. ColCount := n;

pnl3. Enabled := False;

pnl4. Enabled := True;

StringGrid1. Options := StringGrid1. Options + [goEditing];

end;

procedure TForm1. btn2Click (Sender: TObject);

var

i, j: Integer;

begin

if rb1. Checked then

for i := 0 to m — 1 do

for j := 0 to n — 1 do

a[i, j] := StrToInt (StringGrid1. Cells[j, i])

else

begin

Randomize;

for i := 0 to m — 1 do

for j := 0 to n — 1 do

begin

a[i, j] := Random (2 * MyRandMax + 1) — MyRandMax;

StringGrid1. Cells[j, i] := IntToStr (a[i, j]);

end;

end;

pnl4. Enabled := False;

pnl5. Enabled := True;

StringGrid1. Options := StringGrid1. Options — [goEditing];

end;

procedure TForm1. btn3Click (Sender: TObject);

var

i, j, k: Integer;

CmpCount, XchgCount: integer;

buf: integer;

begin

btn3. Enabled := False;

pnl6. Enabled := True;

CmpCount := 0;

XchgCount := 0;

for i := 0 to m — 2 do

for k := i + 1 to m — 1 do

begin

Inc (CmpCount);

if a[i][1] > a[k][1] then

for j := 0 to n — 1 do

begin

Inc (XchgCount);

buf := a[i][j];

a[i][j] := a[k][j];

a[k][j] := buf;

end;

end;

for i := 0 to m — 1 do

for j := 0 to n — 1 do

StringGrid2. Cells[j, i] := IntToStr (a[i, j]);

edt3. Text := IntToStr (CmpCount);

edt4. Text := IntToStr (XchgCount);

end;

procedure TForm1. btn4Click (Sender: TObject);

begin

// Начало печати

Printer. BeginDoc;

Printer. Canvas. Font. Color := clBlack;

Printer. Canvas. TextOut (40, 20, 'Сравнений = ' + edt3. Text);

Printer. Canvas. TextOut (40, 40, 'Перестановок = ' + edt4. Text);

// Конец печати

Printer. EndDoc;

end;

end.

Листинг программы:

Динамический список

Условие задачи

Создать С1-направленный список, упорядоченный по С2, из N С3 С4 и найти элемент, удовлетворяющий условию С5. Вывести созданный список или сообщение: «Список пуст». Для двунаправленных списков — созданный список выводить дважды: в прямом и обратном порядке.

Предусмотреть 1) возможность ввода данных в список из текстового файла; 2) генерации элементов в заданном количестве N; 3) добавления заданного элемента в список в указанном порядке C2.

Для решения задачи создать процедуры: добавления первого элемента в пустой список, добавления очередного элемента в требуемом порядке (в начало/конец/середину), генерация списка (генерация/ввод и вызов процедуры добавления для каждого элемента списка), вывода списка в Memo, поиска в списке, освобождения списка.

Варианты заданий

Вычисляются по правилу: сумма двух последних цифр зачетки. Если сумма больше 15, вариант = сумма минус 15

С1

С2

С3

С4

С5

2

Одно-

По возрастанию кодов символов

Псевдослучайных, от, а до я

символов кириллицы

Номер первой гласной буквы

Код программы:

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Spin;

type

TForm1 = class (TForm)

ButtonAddRandom: TButton;

Label1: TLabel;

ButtonLoad: TButton;

OpenDialog: TOpenDialog;

Memo: TMemo;

ButtonAdd: TButton;

EditData: TEdit;

Labe2: TLabel;

ButtonSearch: TButton;

LabelAnsw: TLabel;

SpinEdit: TSpinEdit;

ButtonClear: TButton;

ButtonRefresh: TButton;

procedure FormCreate (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure ButtonAddClick (Sender: TObject);

procedure ButtonAddRandomClick (Sender: TObject);

procedure ButtonLoadClick (Sender: TObject);

procedure ButtonClearClick (Sender: TObject);

procedure ButtonSearchClick (Sender: TObject);

procedure ButtonRefreshClick (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

PElement=^TElement;

TElement=record

Next: PElement;

Data: char;

end;

var

Form1: TForm1;

ListBegining, ListEnding: PElement;

implementation

{$R *. dfm}

procedure CreateList (var ListN, ListK: PElement; I: char);

begin

New (ListN);

ListK: =ListN;

ListN^. Data:=I;

ListN^. Next:=nil;

end;

procedure AddFirst (var ListN, ListK: PElement;I:char);

var

Elem: PElement;

begin

New (Elem);

Elem^. Data:=I;

Elem^. Next:=ListN;

ListN: =Elem;

end;

procedure AddLast (ListN: PElement;var ListK: PElement;I:char);

begin

New (ListK^. next);

ListK^. Next^. Data:=I;

ListK^. Next^. Next:=nil;

ListK: =ListK^. Next;

end;

procedure AddAfter (ListN, ListC, ListK: PElement;I:char);

var

Elem: PElement;

begin

New (Elem);

Elem^. Data:=I;

Elem^. Next:=ListC^. Next;

ListC^. Next:=Elem;

end;

procedure ClearList (var ListN, ListK: PElement);

var

Elem: PElement;

begin

Elem: =ListN;

while Elem< >nil do

begin

ListN: =ListN^. Next;

Dispose (Elem);

Elem: =ListN;

end;

ListK: =nil;

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

Randomize;

ListBegining: =nil;

ListEnding: =nil;

end;

procedure TForm1. FormClose (Sender: TObject; var Action: TCloseAction);

begin

ClearList (ListBegining, ListEnding);

end;

procedure Add (var ListN, ListK: PElement;I:char);

var

listC: PElement;

begin

if ListN = nil then

CreateList (ListN, ListK, I)

else

if i <= ListN^. Data then

AddFirst (ListN, ListK, I)

else

if i >= ListK^. Data then

AddLast (ListN, ListK, I)

else

begin

ListC: =ListN;

while (ListC^. next^. Data) <= i do

ListC := ListC^. next;

AddAfter (ListN, ListC, ListK, I)

end;

end;

procedure ShowList;

var

i: Integer;

ListC: PElement;

begin

i: =0;

Form1. Memo. Clear;

ListC: =ListBegining;

if ListC=nil then

Form1. Memo. Lines. Add ('Пусто');

while ListC< >nil do

begin

inc (i);

Form1. Memo. Lines. Add (IntToStr (i)+') Адрес: '+

Format ('%p',[ListC])+' | Элемент: '+ListC^. Data+

' | Следующий: '+Format ('%p',[ListC. Next]));

ListC: =ListC^. next;

end;

end;

procedure TForm1. ButtonAddClick (Sender: TObject);

var

I: char;

begin

try

I: =EditData. Text[1];

Add (ListBegining, ListEnding, I);

except

ShowMessage ('Неверный формат ввода');

end;

ShowList;

end;

procedure TForm1. ButtonAddRandomClick (Sender: TObject);

var j: Integer;

i: char;

begin

for j: =1 to SpinEdit. Value do

begin

I: =chr (ord ('а')+Random (33));

Add (ListBegining, ListEnding, I);

end;

ShowList;

end;

procedure TForm1. ButtonLoadClick (Sender: TObject);

var

DataFile: TextFile;

I: char;

begin

if OpenDialog. Execute then

begin

AssignFile (DataFile, OpenDialog. FileName);

try

Reset (DataFile);

try

try

while not Eof (DataFile) do

begin

readln (Datafile, I);

Add (ListBegining, ListEnding, I);

end;

except

ShowMessage ('Некорректные данные');

end;

finally

CloseFile (DataFile);

end;

except

ShowMessage ('Не удалось открыть текстовый файл');

end;

end

else

ShowMessage ('Файл не задан');

ShowList;

end;

procedure TForm1. ButtonClearClick (Sender: TObject);

begin

ClearList (ListBegining, ListEnding);

ShowList;

end;

procedure TForm1. ButtonSearchClick (Sender: TObject);

var

listC, lastb: PElement;

num: integer;

f: boolean;

begin

listC: =ListBegining;

num: =0;

f: =false;

while listC< >nil do

begin

inc (num);

if (listC^. Data='а')or (listC^. Data='е')or (listC^. Data='и')or (listC^. Data='о')or (l

istC^. Data='у')

or (listC^. Data='ы')or (listC^. Data='э')or (listC^. Data='ю')or (listC^. Data='я')

then

begin

f: =true;

break;

end;

listC: =listC^. Next;

end;

if f then

LabelAnsw. Caption:='Номер первой гласной буквы: '+inttostr (num)

else

LabelAnsw. Caption:='Не найдено';

end;

procedure TForm1. ButtonRefreshClick (Sender: TObject);

begin

ShowList;

end;

end.

ПоказатьСвернуть
Заполнить форму текущей работой