Программирование на языке объектно–ориентированного и визуального программирования Delphi
Вычисление выражений, использование стандартных функций; работа с графикой. Порядок действий при вычислении, способы ввода данных с клавиатуры. Построение таблиц функций. Организация циклов в программе, итерационные процессы. Работа с массивами чисел.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 16.09.2012 |
Размер файла | 614,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Задание 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.
Размещено на Allbest.ru
Подобные документы
Вычисление значений выражений при вещественных типах данных float и double. Нахождение суммы элементов, используя оператор цикла. Вычисление функций с разложением в степенной ряд. Работа со строками. Обработка массивов с использованием функций.
лабораторная работа [24,3 K], добавлен 09.02.2010Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотечных функций ввода, вывода в С++. Описание переменной вещественного типа в языке программирования С++.
лабораторная работа [137,9 K], добавлен 13.06.2014Разработка клиентского приложения для информационной системы "Работа торгового склада" с помощью языка объектно-ориентированного программирования Delphi 6 и технологии InterBase Express. Описание реляционной модели данных и этапы ее проектирования.
курсовая работа [1,0 M], добавлен 19.03.2009История развития, характеристика, предназначение и особенности языка программирования Delphi. Разработка проекта создания кроссворда на объектно-ориентированном языке Delphi, который состоит из 19 вопросов по горизонтали и 16 вопросов по вертикали.
курсовая работа [970,5 K], добавлен 15.05.2014Разработка программы по оформлению заказов на билеты Оренбургского государственного областного драматического театра им. Горького. Использование объектно-ориентированного программирования и реализация проекта в среде визуального программирования Delphi 7.
курсовая работа [6,3 M], добавлен 12.11.2014История и основы структурного программирования в среде Turbo Pascal. Работа с различными типами данных. Операторы языка. Работа с символьными и строковыми переменами, одномерным, двумерным массивами. Классификация компьютерных игр. Игры на языке Паскаль.
курсовая работа [28,8 K], добавлен 06.05.2014Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.
курсовая работа [176,8 K], добавлен 18.01.2016Системы визуального объектно-ориентированного программирования. Среда разработки Delphi. Microsoft Access как система управления базами данных реляционного типа. Структурированный язык запросов SQL. Программирование базы данных Библиотечного фонда.
курсовая работа [2,5 M], добавлен 08.01.2012Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.
курсовая работа [1,7 M], добавлен 06.01.2014Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013