Программирование на языке объектно–ориентированного и визуального программирования Delphi
Задание 1. Вычисление выражений. Использование стандартных
функций. Работа с графикой
Цель задания:
1. Изучение порядка действий при
вычислении выражении.
2. Изучение способов ввода данных с
клавиатуры.
3. Создание графических областей.
4. Обработка сообщений о положении мыши
и вводе точек с ее помощью в графической области.
Постановка задачи.
1. На форме воспроизвести формулу для
вычисления, предусмотреть ввод с клавиатуры любого значения Х и вывод
результатов расчета по формуле.
2. Организовать на форме область, в
которой нарисовать графики согласно приведенному варианта.
3. Пользователь может вводить координаты
точки с клавиатуры и/или кликнуть по рисунку с областями, указав точку,
относительно координат которой провести проверку принадлежности точки данной
области.
4. Цветом в области графики и
комментариями на форме сделать вывод о принадлежности указанной точки областям.
Вариант задания:
1)
при Х=-0.7129
2) координаты исследуемой точки: (-0.5;-0.9)
Код программы:
Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, TeEngine, Series, TeeProcs, Chart, StdCtrls, ExtCtrls,
TeeFunci,;= class(TForm): TPanel;: TEdit;: TLabel;: TLabel;: TButton;: TChart;:
TLineSeries;: TLabel;: TPanel;: TChart;: TShape;: TChartShape;: TEdit;:
TLabel;: TEdit;: TLabel;: TButton;: TLabel;btn1Click(Sender:
TObject);FormCreate(Sender: TObject);btn2Click(Sender:
TObject);cht2Click(Sender: TObject);Y(const x: real): Real;SetDot(const x, y:
Real);
{ Public declarations };: TForm1;
{$R *.dfm}TForm1.Y(const x: real): Real;:=
Sin(arctan(x));;TForm1.btn1Click(Sender: TObject);= 4;= 0.1;: Real;.Caption :=
FloatToStr(Y(StrToFloat(edt1.Text)));.Clear;:= -Range;x < Range do.AddXY(x,
y(x));:= x + Step;;;TForm1.FormCreate(Sender: TObject);:=
'.';;TForm1.SetDot(const x, y: Real);.Top := cht2.LeftAxis.CalcPosValue(y) -
shp1.Height div 2;.Left := cht2.BottomAxis.CalcPosValue(x) - shp1.Width div
2;(0 < y) and ((x < 0) and (y < x + 1) or (x > 0) and (y < - x +
1)) then.Brush.Color := clWhite;6.Caption := 'Точка
пренадлежит области';
end.Brush.Color := clRed;6.Caption := 'Точка
не пренадлежит области';
end;TForm1.btn2Click(Sender: TObject);(StrToFloat(edt2.Text),
StrToFloat(edt3.Text));;TForm1.cht2Click(Sender: TObject);, y: Real;:=
cht2.BottomAxis.CalcPosPoint(cht2.GetCursorPos.x);:=
cht2.LeftAxis.CalcPosPoint(cht2.GetCursorPos.Y);.Text := FloatToStr(x);.Text :=
FloatToStr(Y);(x, y);;.
Листинг:
Задание 2. Построение таблиц функций
Цель задания:
1. Построение графиков по таблицам
данных
Постановка задачи:
1) Составить программу вычисления значений функции F(X) на отрезке [A,B] в точках X1=А+Н, где Н=(В-А)/М, М - заданное число.
) Построить таблицу, где указать:
) По данным таблицы построить график функции F(X) с простановкой
значений по обоим осям и возможностью изменения масштаба графика.
Методические указания:
1. Значение шага Н должно вычисляться
один раз.
Вариант задания:
Номер варианта
|
Функция
|
Параметры
|
|
|
А
|
В
|
М
|
3.
|
cos(x)
|
/32*/320
|
|
|
Код программы:
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, Grids, TeEngine, Series, ExtCtrls, TeeProcs, Chart;=
class(TForm): TChart;: TLineSeries;: TStringGrid;FormCreate(Sender:
TObject);f(const x: Real): Real;
{ Public declarations };: TForm1;
{$R *.dfm}
// 1) Составить программу вычисления значений функции F(X)
function TForm1.f(const x: Real): Real;:=
Cos(x);;TForm1.FormCreate(Sender: TObject);
// на отрезке [A,B] в точках X1=А+Н, где Н=(В-А)/М, М - заданное
число.
A = {-PI;}PI / 3;
B = {Pi;}2 * PI / 3;
M = {360;}20;= (B - A) / M;: Integer;: Real;
begin
// 2) Построить таблицу, где указать:
StringGrid1.Cells[0, 0] := '№ Шага';.Cells[1, 0] :=
'H';.Cells[2, 0] := 'X =';.Cells[3, 0] := 'F(X) =';:= A;:= 0;x < B
do(i);.RowCount := StringGrid1.RowCount + 1;.Cells[0, i] :=
IntToStr(i);.Cells[1, i] := FloatToStr(H);.Cells[2, i] := FloatToStr(X);.Cells[3,
i] := FloatToStr(f(X));
:= x + h;
end;
// 3) По данным таблицы построить график функции F(X) с
// простановкой значений по обоим осям и возможностью
// изменения масштаба графика.i := 1 to StringGrid1.RowCount
- 1 do.AddXY(StrToFloat(StringGrid1.Cells[2, i]),(StringGrid1.Cells[3,
i]));.FixedCols := 1;.FixedRows := 1;;.
Листинг программы:
Задание 3. Организация циклов в программе
Цель задания
1. Получение навыков в выборе и
использовании операторов цикла и таблицы StringGrid.
2. Знакомство с итерационными процессами
1. Используя оператор цикла, найти сумму элементов, указанных в
конкретном варианте. Результат напечатать в виде таблицы с указанием № шага,
значения текущего члена ряда, суммы ряда в текущем шаге:
№ шага
|
Значение текущего члена ряда
|
Сумма ряда в текущем шаге
|
2. Построить график, показывающий изменение всех параметров таблицы.
Вариант задания:
Найти
сумму 15 членов ряда, в котором
Код программы:
Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, Grids, TeEngine, Series, ExtCtrls, TeeProcs, Chart;=
class(TForm): TChart;: TStringGrid;: TLineSeries;: TLineSeries;FormCreate(Sender:
TObject);a(const n: Integer): Real;
{ Public declarations };: TForm1;
{$R *.dfm}TForm1.a(const n: Integer): Real;:=
Exp(Sqr(Ln(n)))/exp(ln(n)*ln(ln(n)));;TForm1.FormCreate(Sender: TObject);= 2;=
15;= N + FirstN - 1;: Integer;: Real;: Real;.RowCount := N + 1;.FixedCols :=
1;.FixedRows := 1;.Cells[0, 0] := '№ Шага';.Cells[1, 0] := 'Текущий';.Cells[2,
0] := 'Сумма';:= 0;i := 1 to N do:= a(i + (FirstN - 1));:= sum + cur;.Cells[0,
i] := IntToStr(i);.Cells[1, i] := FloatToStr(cur);.Cells[2, i] :=
FloatToStr(sum);.AddXY(i, cur);.AddXY(i, sum);;;.
Листинг:
функция графика итерационный массив
Задание 4.
Работа с массивами чисел
Цель задания:
1. Получение практических навыков в
работе с массивами
2. Знакомство с алгоритмами упорядочения
Постановка задачи:
1. Для конкретного варианта составить массив исходных данных,
предусмотрев возможность заполнения массива в виде таблицы в ручную и
автоматически.
2. Изучив алгоритмы упорядочения, выбрать один из них. Написать
программу, которая работает с любым допустимым набором данных.
. Входную информацию и результаты счета вывести на экран
(предусмотреть возможность распечатки результатов работы на принтере), снабдив
их соответствующими заголовками.
. Подсчитать количество А) сравнений элементов; Б)перестановок
элементов.
Содержание отчета:
1) Постановка задачи.
2) Описание всех действий по созданию приложения.
) Блок-схема или алгоритм (в том числе сортировки)
) Математические выкладки
) Листинг программы и всех модулей
) Контрольный пример (распечатка изображений экранов, иллюстрирующих
работу приложения).
Методические указания:
1. Исходные данные должны включать и
положительные числа, и отрицательные, и нули.
Вариант задания:
1. Дан двумерный массив, содержащий 5
строк и 3 столбца. Элементами массива являются целые числа. Упорядочить массив
по не убыванию элементов второй строки.
Код программы:
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, Grids, StdCtrls, ExtCtrls, Printers;= class(TForm): TPanel;:
TPanel;: TStringGrid;: TStringGrid;: TPanel;: TRadioButton;: TRadioButton;:
TPanel;: TButton;: TEdit;: TLabel;: TLabel;: TEdit;: TButton;: TPanel;:
TLabel;: TLabel;: TEdit;: TEdit;: TLabel;: TLabel;: TPanel;: TButton;:
TButton;btn1Click(Sender: TObject);btn2Click(Sender: TObject);btn3Click(Sender:
TObject);btn4Click(Sender: TObject);: Integer;: Integer;: array of array of
Integer;
{ Public declarations };: TForm1;
{$R *.dfm}= 99;TForm1.btn1Click(Sender: TObject);:=
StrToInt(edt1.Text);:= StrToInt(edt2.Text);(a, m, n);.RowCount := m;.ColCount
:= n;.RowCount := m;.ColCount := n;.Enabled := False;.Enabled := True;.Options
:= StringGrid1.Options + [goEditing];;TForm1.btn2Click(Sender: TObject);, j:
Integer;rb1.Checked theni := 0 to m - 1 doj := 0 to n - 1 do[i, j] :=
StrToInt(StringGrid1.Cells[j, i]);i := 0 to m - 1 doj := 0 to n - 1 do[i, j] :=
Random(2 * MyRandMax + 1) - MyRandMax;.Cells[j, i] := IntToStr(a[i,
j]);;;.Enabled := False;.Enabled := True;.Options := StringGrid1.Options -
[goEditing];;TForm1.btn3Click(Sender: TObject);, j, k: Integer;, XchgCount: integer;:
integer;.Enabled := False;.Enabled := True;:= 0;:= 0;i := 0 to m - 2 dok := i +
1 to m - 1 do(CmpCount);a[i][1] > a[k][1] thenj := 0 to n - 1
do(XchgCount);:= a[i][j];[i][j] := a[k][j];[k][j] := buf;;;i := 0 to m - 1 doj
:= 0 to n - 1 do.Cells[j, i] := IntToStr(a[i, j]);.Text :=
IntToStr(CmpCount);.Text := IntToStr(XchgCount);;TForm1.btn4Click(Sender:
TObject);
// Начало печати.BeginDoc;.Canvas.Font.Color :=
clBlack;.Canvas.TextOut(40, 20, 'Сравнений = ' + edt3.Text);.Canvas.TextOut(40,
40, 'Перестановок = ' + edt4.Text);
// Конец печати.EndDoc;;.
Листинг программы:
Динамический список
Условие задачи
Создать С1-направленный список, упорядоченный по С2, из N С3 С4 и найти элемент, удовлетворяющий условию С5. Вывести
созданный список или сообщение: «Список пуст». Для двунаправленных списков -
созданный список выводить дважды: в прямом и обратном порядке.
Предусмотреть 1) возможность ввода данных в список из текстового файла;
2) генерации элементов в заданном количестве N; 3) добавления заданного элемента в список в указанном
порядке C2.
Для решения задачи создать процедуры: добавления первого элемента в
пустой список, добавления очередного элемента в требуемом порядке (в
начало/конец/середину), генерация списка (генерация/ввод и вызов процедуры
добавления для каждого элемента списка), вывода списка в Memo, поиска в списке, освобождения
списка.
Варианты заданий
Вычисляются по правилу: сумма двух последних цифр зачетки.
Если сумма больше 15, вариант = сумма минус 15
№
|
С1
|
С2
|
С3
|
С4
|
С5
|
2
|
Одно-
|
По возрастанию кодов символов
|
Псевдослучайных, от а до я
|
символов кириллицы
|
Номер первой гласной буквы
|
Код программы:
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, Spin;= class(TForm): TButton;: TLabel;: TButton;:
TOpenDialog;: TMemo;: TButton;: TEdit;: TLabel;: TButton;: TLabel;: TSpinEdit;:
TButton;: TButton;FormCreate(Sender: TObject);FormClose(Sender: TObject; var
Action: TCloseAction);ButtonAddClick(Sender:
TObject);ButtonAddRandomClick(Sender: TObject);ButtonLoadClick(Sender:
TObject);ButtonClearClick(Sender: TObject);ButtonSearchClick(Sender:
TObject);ButtonRefreshClick(Sender: TObject);
{ Private declarations }
{ Public declarations };=^TElement;=record:PElement;:char;;:
TForm1;,ListEnding:PElement;
{$R *.dfm}CreateList(var ListN,ListK:PElement; I:char);(ListN);:=ListN;^.Data:=I;^.Next:=nil;;AddFirst(var
ListN,ListK:PElement;I:char);:PElement;(Elem);^.Data:=I;^.Next:=ListN;:=Elem;;AddLast(ListN:PElement;var
ListK:PElement;I:char);(ListK^.next);^.Next^.Data:=I;^.Next^.Next:=nil;:=ListK^.Next;;AddAfter(ListN,ListC,ListK:PElement;I:char);:PElement;(Elem);^.Data:=I;^.Next:=ListC^.Next;^.Next:=Elem;;ClearList(var
ListN,ListK:PElement);:PElement;:=ListN;Elem<>nil
do:=ListN^.Next;(Elem);:=ListN;;:=nil;;TForm1.FormCreate(Sender:
TObject);;:=nil;:=nil;;TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);(ListBegining,ListEnding);;Add(var
ListN,ListK:PElement;I:char);:PElement;ListN = nil then(ListN,ListK,I)i <=
ListN^.Data then(ListN,ListK,I)i >= ListK^.Data
then(ListN,ListK,I):=ListN;(ListC^.next^.Data) <= i do:=
ListC^.next;(ListN,ListC,ListK,I);;ShowList;:Integer;:PElement;:=0;.Memo.Clear;:=ListBegining;ListC=nil
then.Memo.Lines.Add('Пусто');ListC<>nil
do(i);.Memo.Lines.Add(IntToStr(i)+') Адрес: '+('%p',[ListC])+' | Элемент: '+ListC^.Data+
' | Следующий:
'+Format('%p',[ListC.Next]));:=ListC^.next;;;TForm1.ButtonAddClick(Sender:
TObject);:char;:=EditData.Text[1];(ListBegining,ListEnding,I);('Неверный формат
ввода');;;;TForm1.ButtonAddRandomClick(Sender:
TObject);j:Integer;:char;j:=1 to SpinEdit.Value do:=chr(ord('а')+Random(33));(ListBegining,ListEnding,I);;;;
TForm1.ButtonLoadClick(Sender:
TObject);:TextFile;:char;OpenDialog.Execute
then(DataFile,OpenDialog.FileName);(DataFile);not Eof(DataFile)
do(Datafile,I);(ListBegining,ListEnding,I);;('Некорректные данные');;(DataFile);;
except('Не удалось открыть текстовый файл');
end;('Файл не задан');;;TForm1.ButtonClearClick(Sender:
TObject);(ListBegining,ListEnding);;;TForm1.ButtonSearchClick(Sender:
TObject);,lastb:PElement;:integer;:boolean;:=ListBegining;:=0;:=false;listC<>nil
do(num);(listC^.Data='а')or(listC^.Data='е')or(listC^.Data='и')or(listC^.Data='о')or(l^.Data='у')(listC^.Data='ы')or(listC^.Data='э')or(listC^.Data='ю')or(listC^.Data='я') :=true;;;:=listC^.Next;;f
then.Caption:='Номер первой
гласной буквы: '+inttostr(num).Caption:='Не найдено';;TForm1.ButtonRefreshClick(Sender:
TObject);
begin;;.