Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ПРОГРАММИРОВАНИЕ И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ



БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ

Кафедра методики преподавания физики и информатики

 

ПРОГРАММИРОВАНИЕ
в системе Delphi

Методические указания
к лабораторным работам по курсу

ПРОГРАММИРОВАНИЕ И МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ

Курс, 2 семестр

для студентов физическго факультета

 

Минск

УДК 681.3.06

 

 

Рекомендовано Ученым советом

Физического факультета

апреля 2004 г., протокол №

 

Авторы-составители:

Гневко С.В., Крылов Г.Г., Шапочкина И.В.

 

 

Рецензенты

канд физ.-мат. Н.Н. Дорожкин

канд физ.-мат. А.И. Слободянюк

 

 

    Программирование в системе Delphi: Методические указания к лабораторным работам для студентов физического факультета / Авторы: Гневко С.В., Крылов Г.Г., Шапочкина И.В.. – Мн.: БГУ, 2005. – 47 с.

 

 

Приведены заготовки проектов для выполнения лабораторных работ по курсу «Программирование и математическое моделирование: Программирование в системе Delphi», указаны связанные с выполнением лаботарорных работ необходимые компоненты, приведены индивидуальные задания по лабораторным работам.

.

Предназначено для студентов 1 курса всех специальностей физического факуль­тета.

 

 

© БГУ, 2005

Введение

Курс программирования и математического модели­рования для студентов, обучающихся по специальности физика должен включать обучение с исполь­зова­нием современных технологий программи­рования для современных операционных систем. В этой связи выбор в качестве языка программирования – языка Object Pascal и инстру­ментальной системы быстрой разработки приложений Delphi является оптимальным, так как она строится на интуитивно понятном интер­фейсе, сочетает всю полноту использования библиотек стандартных ком­понентов системы Microsoft Windows с возможностью визуальных средств быстрой разработки прило­жений.

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

Возможность изучения документации при подготовке к работе обеспечивается при этом имеющимися в электронном виде двумя учебниками по языку Object Pascal и среде разработки Dephi (в дальнейшем мы будем ссылаться на них как на Уч. Д1, Уч. Д2), которые размещаются на каждом рабочем месте.

Каждая рассмотренная лабораторная работа пред­ставлена следующим образом:

· цель работы;

· перечень основных компонент, необходимых для выпол­нения работы;

· пример разработки приложения с минимальной функцио­нальностью;

· примерный перечень заданий для выполнения студентами.

 

Задания для разработки различаются по уровню сложности, что позволяет преподавателю дифферен­ци­рованно подойти к обучению каждого студента.

 


ЛАБОРАТОРНАЯ РАБОТА Л-2.1

 

Работа в интегрированной среде разработки Delphi.
Приложение с простым меню и реакцией на клавиатуру

и мышь.

Основной целью первой лабораторной работы является изучение возможностей работы в среде разработки, получение навыков работы с массивами, свойствами объектов, написание кода обработки стандарт­ных событий.

 

Материал Уч. Д1, необходимый для написания работы, -

LES01.htm – LES03.htm, LES07.htm, LES10.htm

 

Перечень основных компонент, необходимых для выполнения работы

TFORM, TCANVAS, MessageDlg

 

Пример разработки приложения с минимальной функциональностью

 

Ниже приведена программа, обладающая следующей функциональ­ностью.

Имеется меню, содержащее пункты – Выход и О программе, нажатие на любую клавишу выдает сообшение «Клавиша=> », нажатие на клавишу мыши выдает сообщение – «правая/левая (x, y)»

 

unit L2_1; {Основной модуль работы № 1 }

Interface

Uses

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

Dialogs, Menus;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

public

procedure N1Click (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure FormMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormKeyPress (Sender: TObject; var Key: Char);

end; {class}

 

Var

Form1: TForm1;

Implementation

{$R *.dfm}

 

{Реакция на событие – пункт меню «Выход»}

procedure TForm1.N1Click (Sender: TObject);

begin

Close;

end;

 

{Реакция на событие – пункт меню «О программе»}

procedure TForm1.N2Click (Sender: TObject);

begin

MessageDlg('Мини Лаб №1', mtInformation, [mbOk], 0);

end; {Proc}

 

{Реакция на событие – мышь}

procedure TForm1.FormMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

case Button of

mbLeft: begin

Canvas.TextOut(X, Y, 'Левая('+IntToStr(X)+', '+ IntToStr(Y)+')');

end;

mbRight: begin

Canvas.TextOut(X, Y, 'Правая('+IntToStr(X)+', '+ IntToStr(Y)+')');

end;

end;

end; {proc}

 

{Реакция на событие – клавиатура}

procedure TForm1.FormKeyPress (Sender: TObject; var Key: Char);

var

st: string;

begin

st: ='Клавиша=> '+Key; MessageDlg(st, mtInformation, [mbOk], 0);

end; {Proc}

end.{Unit}

Примерный перечень заданий для выполнения

 

1. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Определить номера точек с минимальной / максимальной коорди­натами по X и по Y. Начало работы алгоритма - по нажатию правой кнопки мыши, результат выдать в окно диалога.

2. На форму поместить N точек (каждая точка помещается на форму по нажатию левой / правой кнопок мыши и имеет номер 1..N). Оп­ре­делить номера точек с минимальной / максимальной коорди­на­та­ми по X и по Y. Задачу решить отдельно для групп точек, созданных по левой и по правой кнопке мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре.

3. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Упорядочить точки по возрастанию / убыванию координаты X. Начало работы алгоритма - по нажатию правой кнопки мыши, результат выдать в окно функцией TextOut.

4. На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Упоря­дочить точки по возрастанию / убыванию координаты Y. Начало работы алгоритма - по нажатию левой кнопки мыши, результат выдать, написав номер в позициях (x, y) каждой точки.

5. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Вычислить расстояния всех точек до точки, помещенной на форму первой. Начало работы алгоритма - по нажатию правой кнопки мыши, результат выдать в окно диалога.

6. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Вычислить расстояния всех точек до точки, помещенной на форму последней по нажатию правой кнопки мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдать в окно диалога.

7. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Найти точку, максимально удаленную от точки, первой помещенной на форму по нажатию правой кнопки мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдать в окно функцией TextOut.

8. На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Найти точку, минимально удаленную от точки, последней помещенной на форму по нажатию левой кнопки мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдать в окно диалога.

9. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Вычислить расстояния между всеми парами точек. Начало работы алгоритма - по нажатию правой кнопки мыши, результат подписать функцией TextOut в серединах отрезка, соединяющих пары точек.

10. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Вычислить расстояния между всеми парами точек с нечетными номерами. Начало работы алгоритма - по нажатию правой кнопки мыши, результат подписать функцией TextOut в серединах отрезка, соеди­няющих пары точек.

11. На форму поместить N точек (каждая точка помещается на форму по нажатию левой / правой кнопок мыши и имеет номер 1..N). Вычислить сумму расстояний между всеми парами точек с четными номерами. Задачу решить отдельно для групп точек, созданных по левой и по правой кнопке мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдать функцией TextOut в середине окна.

12. На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Упорядочить точки по возрастанию / убыванию расстояния до точки, заданной последним нажатием левой кнопки мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдать функцией TextOut, подписав номера каждой точки.

13. На форму поместить 2 точки нажатием левой кнопки мыши. Определить координаты точки, лежащей в середине отрезка, соединяющего данные точки. Вычислить расстояние от найденной точки до правого нижнего угла формы и до точек, заданных нажатием правой кнопки мыши. Начало работы алгоритма - по нажатию определенной клавиши на клавиатуре, результат выдается в окне диалога.

14. * На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Определить порядок соединения точек незамкнутой непересекаю­щейся ломанной. Начало работы алгоритма - по нажатию левой кнопки мыши. Точки подписать их номерами, порядок соединения выдать парами номеров точек у правой границы окна.

15. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Определить порядок соединения точек замкнутой ломанной, проводимой в порядке возрастания координат (x, y). Начало работы алгоритма - по нажатию правой кнопки мыши. Точки подписать их номерами, порядок соединения выдать парами номеров точек у правой границы окна.

16. На форму поместить N точек (каждая точка помещается на форму по нажатию левой кнопки мыши и имеет номер 1..N). Вычислить сумму расстояний от точки с номером (N div 2) до всех остальных. Результат выдать в диалог.


ЛАБОРАТОРНАЯ РАБОТА Л-2.2

 

Пользовательские типы данных, ввод и вывод .

 

Основной целью второй лабораторной работы является изучение базовых структурных типов данных – строк, записей, массивов и их использование, а также элементарные приемы ввода-вывода данных в Delphi.

 

Материал Уч. Д1, необходимый для написания работы,

Глава3, пп.1-3, Глава4, п.1-2

 

Interface

Uses

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

Dialogs, StdCtrls, Menus;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Labl1: TMenuItem;

Edt1: TMenuItem;

ScrollBar1: TMenuItem;

Label1: TLabel;

ScrBr1: TMenuItem;

Edit1: TEdit;

Label2: TLabel;

ScrollBar2: TScrollBar;

Label3: TLabel;

public

procedure N2Click (Sender: TObject);

procedure Labl1Click (Sender: TObject);

procedure Label1Click (Sender: TObject);

procedure Edt1Click (Sender: TObject);

procedure Edit1KeyPress (Sender: TObject; var Key: Char);

procedure ScrollBar2Change (Sender: TObject);

procedure ScrollBar1Click (Sender: TObject);

procedure ScrollBar2Exit (Sender: TObject);

procedure Edit1Exit (Sender: TObject);

procedure ScrBr1Click (Sender: TObject);

end; {class}

 

Var

Form1: TForm1;

 

Implementation

{$R *.dfm}

 

{Реакция на событие – пункт меню «Выход»}

procedure TForm1.N2Click (Sender: TObject);

begin

Close;

end; {Proc}

 

{Реакция на событие – пункт меню «Ввод-вывод-Label»}

procedure TForm1.MenuLablClick (Sender: TObject);

begin

Label1.Visible: =True;

end; {Proc}

 

{Реакция на событие – клик на метку «Label»}

procedure TForm1.Label1Click (Sender: TObject);

begin

Label1.Visible: =False;

end; {Proc}

 

{Реакция на событие – пункт меню «Ввод-вывод-Edit»}

procedure TForm1.Edt1Click (Sender: TObject);

begin

Label2.Visible: =true; Edit1.visible: =true;

end; {Proc}

 

{Реакция на событие – ввод с клавиатуры в Edit}

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char);

var

v: real;

code: integer;

begin

if(key=#13) then begin {Конец ввода}

val(Edit1.Text, v, code);

if(code< > 0) then begin

MessageDlg('Введено не число!!! ', mtInformation, [mbOk], 0);

Edit1.Text: ='1';

end else begin

if(v< =0) then begin

MessageDlg('Плохое число!!! ', mtInformation, [mbOk], 0);

Edit1.Text: ='1';

end else begin

Edit1.Visible: =false; Label2.Visible: =false

end;

end;

end;

inherited;

end; {Proc}

 

 

{Реакция на событие – изменение ScrollBar}

procedure TForm1.ScrollBar2Change (Sender: TObject);

var

s: string;

begin

Str(Scrollbar2.Position, s); Label3.Caption: ='Текущее значение '+ s;

end; {Proc}

 

{Реакция на событие – щелчок по ScrollBar }

procedure TForm1.ScrollBar1Click(Sender: TObject);

begin

Label3.Visible: =true; Scrollbar2.Visible: =true;

end; {Proc}

 

{Реакция на событие – ScrollBar, потеря фокуса ввода}

procedure TForm1.ScrollBar2Exit (Sender: TObject);

begin

Scrollbar2.Visible: =false; Label3.Visible: =false;

end; {Proc}

 

{Реакция на событие – Edit, потеря фокуса ввода}

procedure TForm1.Edit1Exit (Sender: TObject);

begin

Edit1.Visible: =false; Label2.Visible: =false;

end; {Proc}

 

{Реакция на событие – пункт меню «О программе»}

procedure TForm1.MenuAbout (Sender: TObject);

var

st: string;

begin

st: ='Мини. Лаб. № 2';

with Application do begin

MessageBox(Pchar(st), 'О программе', MB_OK);

end;

end; {Proc}

 

end.{Unit}

 

Примерный перечень заданий для выполнения студентами

 

1. Числа a и b – длины катетов одного прямоугольного треуголь­ника, c и d – другого. Разработать программу, определяющую, являются ли треугольники подобными.

2. Разработать программу, которая представляет исходную строку в обратном порядке и при этом удаляет в строке результата указан­ную группу символов.

3. Разработать программу, которая заменяет в исходной строке одну указанную группу символов на другую.

4. Вычислить сумму

 

с заданной точностью ε для различных значений параметров a, b.

5. Вычислить значения функции на отрезке с шагом h> 0

6. Вычислить значения функции на отрезке с шагом h> 0

7. Вычислить сумму

 

с заданной точностью ε для различных значений параметров a, b.

 

8. Вычислить сумму

 

 

с заданной точностью ε для различных значений параметров a, b.

 

9. Вычислить сумму

 

 

с заданной точностью ε для различных значений параметров a, b.

 

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

11. Разработать программу, которая из строки, содержащей некоторый текст, выделяет все слова и печатает их в алфавитном порядке (по первой букве).

12. Разработать программу, которая определяет, является ли данная строка палиндромом (пример: «А роза упала на лапу Азора»).

13. Разработать программу, которая исключает из данной строки группы символов, расположенные между скобками [ … ]. Сами скобки тоже должны быть исключены.

14. Дана строка символов, состоящая из нулей, единиц и пробелов. Группы единиц и нулей, разделенные пробелами и не содержащие пробелов внутри себя, называются словами. Разработать программу, подсчитывающую число слов в строке. Рассматривая слова как числа (двоичные), определить количество слов, делящихся на 5 без остатка. Найти максимальное и минимальное такое слово.

15. Разработать программу, реализующую основные арифметические операции с комплексными числами.

 

Вопросы для самопроверки

 

1. Когда и почему исчезает элемент управления Edit при нажатии клавиши «ввод»?

2. Каковы условия исчезновения с формы элементов управления?

3. Где в программе сохраняется численное значение введенного числа в Edit?

4. Как изменить свойства метки Label1, чтобы она не исчезала с формы при нажатии, а изменяла цвет фона?

5. Какова реакция ScrollBar на щелчок мыши?

 


ЛАБОРАТОРНАЯ РАБОТА Л-2.3

 

Работа с файлами

 

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

 

Материал Уч. Д1, необходимый для написания работы, -

Глава3, пп.1-3, Глава 4, п.1-2

 

Пример разработки приложения с минимальной функциональностью.

 

Ниже приведена программа, обладающая следующей функцио­нальностью. Имеется меню, содержащее пункты – Файл и О программе

 

Подпункты меню Файл позволяют прочитать и записать короткий текстовый файл. Прочитанный файл помещается в объект TMemo и может построчно редактироваться. Диалоговое окно О программе реализовано как отдельный модуль (диалог) и (вслед­ствие его простоты) в методичке не показано, но доступно на диске.

 

unit L2_3;

Interface

Uses

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

Dialogs, Menus, ExtCtrls, StdCtrls, ComCtrls;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1, N2, N3, N4, N5, N6, N7: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Memo1: TMemo;

Label1: TLabel;

UpDown1: TUpDown;

Edit1: TEdit;

Label2: TLabel;

public

{ Public declarations }

procedure N2Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure N3Click (Sender: TObject);

procedure Label1Click (Sender: TObject);

procedure Edit1KeyPress (Sender: TObject; var Key: Char);

procedure UpDown1Changing (Sender: TObject; var AllowChange: Boolean);

procedure N7Click (Sender: TObject);

end; {class}

Var

Form1: TForm1;

fin, fout: Text; {текстовый файл для записи эксперимента}

lines: integer;

 

Implementation

uses Unit1;

{$R *.dfm}

 

{Реакция на событие – пункт меню “Файл-Открыть”}

procedure TForm1.N2Click (Sender: TObject);

var

fn, st, st1: string;

begin

if OpenDialog1.Execute then begin {успешно закончен}

fn: =OpenDialog1.FileName;

AssignFile(fin, fn); reset(fin); lines: =0;

Label1.Visible: =true;

while NOT (EOF(fin)) do begin

readln(fin, st); Memo1.Lines.Add(st); lines: =lines+1;

end;

closefile(fin); str(lines, st1);

Label1.Caption: ='Прочитан файл '+fn+ ' длиной'+st1;

st: =''; Memo1.Visible: =true; lines: =0; Edit1.visible: =true;

Label2.Visible: =true; Edit1.Text: =Memo1.Lines[lines];

UpDown1.Visible: =true;

end else begin {отменен}

st: ='';

end;

end; {Proc}

 

{Реакция на событие – пункт меню “Файл-выход”}

procedure TForm1.N5Click (Sender: TObject);

begin

Close;

end; {Proc}

 

{Реакция на событие – пункт меню “Файл-Записать”}

procedure TForm1.N3Click (Sender: TObject);

var

st: string;

i: integer;

begin

if SaveDialog1.Execute then begin {успешно закончен}

st: =SaveDialog1.FileName;

AssignFile(fout, st); rewrite(fout);

for i: =0 to memo1.lines.capacity do begin

writeln(fout, Memo1.lines[i]);

end;

closefile(fout); Memo1.Visible: =false;

Label1.Visible: =false; Label2.Visible: =false;

Edit1.Visible: =false; UpDown1.Visible: =false;

end else begin {отменен} st: ='';

end;

end; {Proc}

 

{Реакция на событие - «клик на метку 1»}

procedure TForm1.Label1Click (Sender: TObject);

begin

Memo1.Visible: =false; Label1.Visible: =false;

Label1.Caption: = 'Прочитан файл длиной'

end; {Proc}

 

{Реакция на событие – клавиатура для Edit1}

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char);

begin

if(key=#13) then begin

Memo1.Lines[lines]: =Edit1.Text;

end;

end; {Proc}

 

{Реакция на событие – бегунок текущей позиции}

procedure TForm1.UpDown1Changing (Sender: TObject;

var AllowChange: Boolean);

var

st: string;

begin

str(UpDown1.position+1, st);

lines: =UpDown1.position;

Label2.Caption: ='Текущая строка файла '+ st;

Edit1.Text: =Memo1.Lines[UpDown1.position];

Label2.Show;

end; {Proc}

 

{Реакция на событие – диалог «О программе»}

procedure TForm1.N7Click (Sender: TObject);

begin

OkBottomDlg.ShowModal;

end; {Proc}

end.{unit}

 

Примерный перечень заданий для выполнения студентами

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

2. Задан текстовый файл. Разработать программу замены/удаления в файле заданного слова. Подсчитать количество произведенных операций. Результат помещается в отдельный файл. Программа должна позволять сформировать исходный файл.

3. Разработать программу, определяющую, является ли содержимое тектового файла полиндромом, то есть словом, одинаковым при чтении справа-налево и наоборот.

4. Разработать программу вычисления длины вектора. Координаты вектора находятся в файле. Программа должна позволять сфор­ми­ровать исходный вектор.

5. Разработать программу вычисления скалярного произведения век­торов. Координаты векторов находятся в файле. Программа должна позволять сформировать исходные векторы.

6. Разработать программу нахождения максимального и минималь­ного элементов вектора. Координаты вектора находятся в файле. Программа должна позволять сформировать исходный вектор.

7. Разработать программу сортировки одномерного массива по возрастанию/убыванию. Элементы массива находятся в файле. Программа должна позволять сформировать исходный массив. Результат помещается в отдельный файл.

8. Разработать программу вычисления произведения двух матриц. Матрицы располагаются в отдельных файлах. Программа должна позволять сформи­ровать исходные матрицы. Результат помещается в отдельный файл.

9. Разработать программу вычисления суммы двух матриц. Матрицы располагаются в отдельных файлах. Программа должна позволять сформи­ровать исходные матрицы. Результат помещается в от­дель­ный файл.

10. Разработать программу, удаляющую из матрицы строку и столбец, содержащие максималь­ный/минимальный элементы. Матрица рас­по­­ла­­­гается в отдельном файле. Программа должна позволять сфор­ми­ровать исходную матрицу. Результат помещается в отдельный файл.

11. Разработать программу учета книг в библиотеке. Данные должны располагаться в файле. Программа должна позволять формировать файл. Преду­смотреть возможность поиска книги по различным критериям (автор, название, издательство).

12. Разработать программу учета успеваимости студентов группы за сессию. Данные должны располагаться в файле. Программа должна позво­лять формировать файл. Предусмотреть возмож­ность поиска студента по фамилии. Вычислять средний балл конкретного студента и всей группы.

13. Разработать программу учета товаров на складе. Данные должны располагаться в файле. Программа должна позволять формировать файл. Преду­смотреть возможность поиска товара по наимено­ванию. Вычислять суммарную стоимость имею­щихся товаров с учетом их количества и стоимости единицы товара.

14. Разработать программу учета автомобилей на станции ТО. Данные должны располагаться в файле. Программа должна позволять формировать файл. Предусмотреть возможность поиска авто­мобиля по марке. Вычислять суммарную стоимость стоимость произве­ден­ных работ.

15. Разработать программу учета коммунальных платежей жильцов дома за некоторый период. Данные должны располагаться в файле. Программа должна позволять формировать файл. Преду­смотреть возможность поиска информации о жильцах. Вычислять суммар­ную величину произве­денных платежей.

 

Вопросы для самопроверки

 

1. Когда изменяется текст метки Label1

2. Зачем используется элемент контроля – бегунок UpDown?

3. Насколько маленьким должен быть считываемый файл?

4. Как добавить в меню пункт «Новый файл»?

5. Как в меню «Файл» была проведена черта, отделяющая пункт «Выход»?

 


ЛАБОРАТОРНАЯ РАБОТА Л-2.4

 

Глава 3, пп. 1-3, Глава 4, пп. 1-2

 

Interface

Uses

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

Dialogs, Menus, StdCtrls, ComCtrls, ExtCtrls;

Const

SizeN=50;

dt=0.05;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1, N2, N3, N4, N5, N6, N7, N8: TMenuItem;

Timer1: TTimer;

Button1, Button2, Button3:: TButton;

Image1, Image2, Image3: TImage;

public

procedure N8Click (Sender: TObject);

procedure N6Click (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure N3Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure UpDown1Changing (Sender: TObject; var AllowChange: Boolean);

procedure Timer1Timer (Sender: TObject);

procedure Button1Click (Sender: TObject);

end; {class}

Var

Form1: TForm1;

PointsArray: array[1..SizeN] of TPoint;

fi: real;

vx, vy: real;

xx, yy, SizeYY: integer;

t: real;

Implementation

uses Unit2_4_2;

{$R *.dfm}

 

{Обработка события «О программе»}

procedure TForm1.N8Click (Sender: TObject);

begin

OKRightDlg.ShowModal;

end; {Proc}

 

{Обработка события «пункт меню Выход»}

procedure TForm1.N6Click (Sender: TObject);

begin

close;

end; {Proc}

 

{Обработка события «Моделирование-прямые»}

procedure TForm1.N2Click (Sender: TObject);

var

i: integer; sizeX, sizeY: integer;

begin

Image1.visible: =true;

sizeX: =Image1.BoundsRect.Right-Image1.BoundsRect.Left;

sizeY: =Image1.BoundsRect.Bottom – Image1.BoundsRect.Top;

randomize;

for i: =1 to SizeN do begin

PointsArray[i].X: =random(sizeX); PointsArray[i].Y: =random(sizeY);

end;

Image1.Canvas.MoveTo(PointsArray[1].X, PointsArray[1].Y);

for i: =2 to SizeN do begin

Image1.Canvas.Lineto(PointsArray[i].X, PointsArray[i].Y);

end;

Button2.Visible: =true;

end; {Proc}

 

{Обработка события «Закончить рисование линий»}

procedure TForm1.Button2Click (Sender: TObject);

begin

Image1.visible: =false; Button2.Visible: =false;

end; {Proc}

 

{Обработка события «Моделирование - эллипсы»}

procedure TForm1.N3Click (Sender: TObject);

var

i: integer;

sizeX, sizeY: integer;

begin

Image2.visible: =true;

sizeX: =Image2.BoundsRect.Right-Image2.BoundsRect.Left;

sizeY: =Image2.BoundsRect.Bottom-Image2.BoundsRect.Top;

randomize;

for i: =1 to SizeN do begin

PointsArray[i].X: =random(sizeX); PointsArray[i].Y: =random(sizeY);

end;

for i: =1 to SizeN do begin

Image2.Canvas. Ellipse(PointsArray[i].X, PointsArray[i].Y,

PointsArray[i].Y, PointsArray[i].X);

end;

Button3.Visible: =true;

end; {Proc}

 

{Обработка события «Закончить рисование эллипсов»}

procedure TForm1.Button3Click (Sender: TObject);

begin

Image2.visible: =false; Button3.Visible: =false;

end; {Proc}

 

{Обработка события пункт меню «Камень»}

procedure TForm1.N4Click (Sender: TObject);

var

i: integer;

sizeX, sizeY: integer;

begin

Image3.visible: =true; Button1.visible: =true;

 

sizeX: =Image3.BoundsRect.Right-Image3.BoundsRect.Left;

sizeY: =Image3.BoundsRect.Bottom-Image3.BoundsRect.Top;

sizeYY: =Image3.BoundsRect.Bottom – Image3.BoundsRect.Top;

 

vx: =round(50/1.4); vy: =round(50/1.4); fi: =arctan(vy/vx);

xx: =0; yy: =sizeY; t: =0;

Image3.Canvas.MoveTo(0, SizeY);

Image3.Canvas.Lineto(0+round(50*Cos(fi)), SizeY-round(50*Sin(fi)));

Image3.Canvas.MoveTo(0, SizeY);

Image3.Canvas.Pen.Color: =clBlue;

end; {Proc}

 

{Обработка события «Угол наклона»}

procedure TForm1.UpDown1Changing (Sender: TObject;

var AllowChange: Boolean);

begin

fi: =arctan(vy/vx);

end; {Proc}

 

{Обработка события «Таймер»}

procedure TForm1.Timer1Timer (Sender: TObject);

begin

t: =t+dt;

xx: =round(xx+vx*dt); vy: =vy-10*dt; yy: =round(yy-vy*dt);

Image3.Canvas.LineTo(xx, yy);

if(yy> sizeYY) then begin

Timer1.enabled: =false; button1.Caption: ='STOP';

end;

end; {Proc}

 

procedure TForm1.Button1Click (Sender: TObject);

begin

if(button1.caption='START') then begin

Timer1.Enabled: =true;

end else begin

button1.Caption: ='START'; button1.Visible: =false;

Timer1.enabled: =false; Image3.Hide;

end;

end; {Proc}

end{Unit}.

 

Примерный перечень заданий для выполнения студентами

 

Построить графики и численно найти нули следующих функций (координатные оси должны быть нарисованы и подписаны)

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15. Найти численное значение числа π, используя следующий алгоритм: строится круг единичного радиусас центром в начале координат, вокруг него описывается квадрат. В пределах построенного квадрата случайным образом ставятся точки. При этом

,

где N – общее число точек, m – число точек, попавших в круг, Skp – площадь круга, Skb – площадь квадрата. Изобразить решение графически.

 

Вопросы для самопроверки

 

1. Элемент управления UpDown для выбора угла бросания не работает, как его настроить?

2. Камень в примере летит «как то не так…», что надо сделать, чтобы действительно нарисовать параболу?

3. Почему затирается текст «Рисуем линии» при действиях с окном формы, а область Image - нет?

4. На каких еще видимых элементах можно рисовать?

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


ЛАБОРАТОРНАЯ РАБОТА Л-2.5

 

ООП, классы, методы, наследование

 

Целью пятой лабораторной работы является освоение концепций наследования, полиморфизма и виртуальных правил на базе простых иерархий графических объектов. При этом используются процедуры работы с графикой стандартных классов системы Delphi, порожденных от TСontrol, осваивается материал, связанный со сложными (вектор­ными свойствами) и обработка клавиатурных событий.

 

Материал Уч. Д1, необходимый для написания работы, –

Глава 3, пп. 1-3, Глава 4, пп. 1-2

 

Пример разработки приложения с минимальной функциональностью.

 

Ниже приведена программа, обладающая следующей функцио­нальностью. Имеется меню, содержащее пункты – Работа и О программе,

Подпункты меню Работа позволяют работать с графическими объектами Точка, Окружность, Многоугольник, связанных в иерархию наследованием (отдельный модуль Unit3). При этом работа с объектом осуществляется единообразно – с использованием указателя на базовый класс. Намеренно не используется механизм динамического определения типа объекта (а вводится индекс объекта в иерархии), эта возможность оставлена для самостоятельного использования в заданиях для сильных студентов.

Диалоговое окно О программе реализовано как отдельный модуль (немодальный диалог) и (вследствие его простоты) в методичке не показан, но доступен на диске.

 

unit Unit1; // Работа с формой главного окна приложения

Interface

Uses

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

Dialogs, Menus, Unit2, Unit3, ExtCtrls, ComCtrls, StdCtrls;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

point: TMenuItem;

circle: TMenuItem;

N_angle: TMenuItem;

N6: TMenuItem;

exit: TMenuItem;

Public

procedure exitClick(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure pointClick(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure circleClick(Sender: TObject);

procedure N_angleClick(Sender: TObject);

procedure FormPaint(Sender: TObject);

end; {class}

Var

Form1: TForm1;

Point1: TMyPoint;

FlagPoint: Boolean; //Активность

ObjectType: integer;

 

Implementation

{$R *.dfm}

 

{Обработка пункта меню «Выход»}

procedure TForm1.exitClick (Sender: TObject);

begin

Close; {Окончание работы}

end; {proc}

 

{Обработка пункта меню «О программе»}

procedure TForm1.N2Click (Sender: TObject);

begin

Form2.Show;

end; {proc}

 

{Обработка пункта меню «Точка»}

procedure TForm1.pointClick (Sender: TObject);

begin

ObjectType: =1;

Point1: =TMyPoint.Create(100, 100, clRed); // создана красная точка

Point1.Show; // показать

FlagPoint: =True; // сделать активной для клавиатуры

end; {proc}

 

{Обработка события на форме – нажатие на клавиатуре }

procedure TForm1.FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

var

i: integer;

begin

if(FlagPoint) then begin

// Если точка активна, то клавиатурные нажатия

// изменяют ее поля так

// пробел - изменение цвета по модулю 16

// управление курсором - перемещение точки

 

case Key of

VK_Space: begin

Point1.Hide; Point1.Color: =Point1.Color+255; Point1.Show;

end;

Vk_Right: begin

Point1.Hide; Point1.X: = (Point1.X+1) mod Form1.Width; Point1.Show;

end;

Vk_Left: begin

Point1.Hide; Point1.X: = (Point1.X-1) mod Form1.Width;

if(Point1.X< 0) then Point1.X: = Point1.X+Form1.Width;

Point1.Show;

end;

Vk_Up: begin

Point1.Hide; Point1.Y: = (Point1.Y-1) mod Form1.Height;

if(Point1.Y< 0) then Point1.Y: = Point1.X+Form1.Height;

Point1.Show;

end;

VK_Down: begin

Point1.Hide; Point1.Y: = (Point1.Y+1) mod Form1.Height; Point1.Show;

end;

VK_Escape: begin

Point1.Hide; Point1.Free; // Деструктор

FlagPoint: =False; // неактивна

ObjectType: =0;

end;

end; {case}

 

if ObjectType> 1 then begin

// доступны рястяжения - сжатия

case Key of

VK_F1: begin

(Point1 as Tcircle).Expand(5);

end;

VK_F2: begin

(Point1 as Tcircle).Contract(5);

end;

end; //case

end;

 

if ObjectType> 2 then begin

// доступны вращения

case Key of

VK_F3: begin

(Point1 as TPoligon).Rotate(Pi/20);

end;

VK_F4: begin

(Point1 as TPoligon).Rotate(-Pi/20);

end;

end; //case

end;

end; {if}

end; {proc}

 

{Обработка пункта меню «Окружность»}

procedure TForm1.circleClick(Sender: TObject);

begin

Point1: =TCircle.Create(100, 100, 50, clGreen); // создан зеленый круг

ObjectType: =2;

Point1.Show; // показать

FlagPoint: =True; // сделать активной для клавиатуры

end; {proc}

 

{Обработка пункта меню «Многоугольник»}

procedure TForm1.N_angleClick (Sender: TObject);

begin

Point1: =TPoligon.Create(100, 100, 50, 6, clBlue); // создан синий шестиугольник

ObjectType: =3;

Point1.Show; // показать

FlagPoint: =True; // сделать активной для клавиатуры

end; {proc}

 

{Обработка события формы - перерисовка}

procedure TForm1.FormPaint (Sender: TObject);

begin

if (FlagPoint=True) and (ObjectType=3) then begin

(Point1 as TPoligon).Show;

end;

end; {proc}

end. {Unit1}

 

// ============ Второй модуль программы ========================

unit Unit3; // Пользовательская иерархия графических объектов

Interface

Uses

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

Dialogs, Menus, ExtCtrls;

Type

// Наша декларация точки

// Основное - использование массива TForm.Canvas.Pixels[x, y]

//

TMyPoint = class {Объект}

public

X, Y: Integer;

Visible: Boolean; {свойство - Видимость!!! }

Color: TColor;


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-03-17; Просмотров: 1429; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.562 с.)
Главная | Случайная страница | Обратная связь