Программирование на языке объектно–ориентированного и визуального программирования 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.