лабораторные работы. Отчет по Л.Р. Романова Света. ПРИ-191. Лабораторная работа 1 Создание калькулятора
Скачать 0.89 Mb.
|
Романова Света ПРИ – 191 ООП Лабораторная работа 1 Создание калькулятора Цель работы: Изучение основных элементов языка программирования Free Pascal: переменных, их типов, основных операций и функций на примере создания простейшего калькулятора. Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ActnList, Interfaces; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var e1,e2,e3:extended; begin e1:=strtofloat(edit1.Text); e2:=strtofloat(edit2.Text); e3:=e1+e2; edit3.Text:=floattostr(e3); end; procedure TForm1.Button2Click(Sender: TObject); var e1,e2,e3:extended; begin if e2<>0 then ShowMessage('ОШИБКА! На 0 делить нельзя!') else begin e1:=strtofloat(edit1.Text); e2:=strtofloat(edit2.Text); e3:=e1/e2; edit3.Text:=floattostr(e3); end; end; procedure TForm1.Button3Click(Sender: TObject); var e1,e2,e3:extended; begin e1:=strtofloat(edit1.Text); e2:=strtofloat(edit2.Text); e3:=e1-e2; edit3.Text:=floattostr(e3); end; procedure TForm1.Button4Click(Sender: TObject); var e1,e2,e3:extended; begin e1:=strtofloat(edit1.Text); e2:=strtofloat(edit2.Text); e3:=e1*e2; edit3.Text:=floattostr(e3); end; procedure TForm1.Button5Click(Sender: TObject); var e1,e2,e3:extended; begin e1:=strtofloat(edit1.Text); edit2.clear; e3:=Sqr(e1); edit3.Text:=floattostr(e3); end; procedure TForm1.Button6Click(Sender: TObject); var e1,e2,e3:extended; begin e1:=strtofloat(edit1.Text); edit2.clear; e3:=Sqrt(e1); edit3.Text:=floattostr(e3); end; procedure TForm1.Button7Click(Sender: TObject); begin close; end; procedure TForm1.Button8Click(Sender: TObject); begin edit1.clear; edit2.clear; edit3.clear; end; end. Вид программы: Рисунок 1 – Окно программы 1 На рисунке 1 кнопка «+» - складывает введенные данные в строке Рисунок 2 – Окно программы 2 На рисунке 2 Кнопка «-» - вычитает введенные данные в строке Рисунок 3 – Окно программы 3 На рисунке 3 Кнопка «/» - делит веденные данные в строке Рисунок 4 – Окно программы 4 На рисунке 4 Кнопка «*» - умножает введенные данные в строке Рисунок 5 – Окно программы 5 На рисунке 5 Кнопка «возвести в квадрат» выполняет соответствующую команду. Рисунок 6 – Окно программы 6 На рисунке 6 Кнопка «извлечь квадратный корень» выполняет соответствующую команду. Лабораторная работа №2 Линейные структуры Цель работы: Изучение основных элементов языка программирования: переменных, их типов, основных операций и функций на примере создания программы для расчета формулы при заданных значениях переменных. Задание 1. Вычислить значения переменных в соответствии с вариантами за- дания, приведенными в табл. 7. Вывести значения вводимых исходных дан- ных и результаты, сопровождая их вывод именами выводимых переменных. Задание выполнить в виде консольного приложения. 2. Повторить задание 1, используя функции из модуля math. Задание 1. Листинг программы: program project1; {$APPTYPE CONSOLE} uses SysUtils; Label 10; var s,w,x,y,z: real; proba:integer; begin 10: writeln('Vvedite x,y'); readln(x,y); writeln('Vi vveli'); writeln('x=',x:8:3,' y=',y:8:3); writeln('Vvedite 1, esli dannie sovpadaut s zadannimi'); readln(proba); if proba<>1 then begin writeln; goto 10; end; writeln; s:=1+x+(sqr(x)/1*2)+(sqr(x)/1*2*3)+(sqr(x)/1*2*3*4); w:=x*(sin(x)+cos(y)); writeln('Rezultat'); writeln('s=',s:8:3,' w=',w:8:3); readLn; end. Результат программы изображен на рисунке 7. Рисунок 7 – Результат программы Задание 2 Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var x, y, s, w:extended; begin x:=strtofloat(edit1.Text); y:=strtofloat(edit2.Text); s:=1+x+(sqr(x)/1*2)+(sqr(x)/1*2*3)+(sqr(x)/1*2*3*4); w:=x*(sin(x)+cos(y)); edit3.Text:=floattostr(s); edit4.text:=floattostr(w); end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.clear; edit2.clear; edit3.clear; edit4.clear; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; initialization end. Результат программы изображен на рисунке 8. Рисунок 8 – Результат Лабораторная работа №3 Cписки Цель работы: Изучение основных команд, используемых для работы со списками. Листинг программы: object Form1: TForm1 Left = 318 Height = 594 Top = 179 Width = 876 Caption = 'Работа со списками' ClientHeight = 594 ClientWidth = 876 Color = clBlue DesignTimePPI = 120 LCLVersion = '2.0.8.0' object ListBox1: TListBox Left = 24 Height = 319 Top = 48 Width = 271 Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ItemHeight = 0 ParentFont = False TabOrder = 0 end object Label1: TLabel Left = 49 Height = 22 Top = 16 Width = 138 Caption = 'Простой список' Color = clWhite Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ParentColor = False ParentFont = False Transparent = False end object ComboBox1: TComboBox Left = 352 Height = 30 Top = 48 Width = 188 Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ItemHeight = 22 ParentFont = False TabOrder = 1 end object Label2: TLabel Left = 352 Height = 22 Top = 16 Width = 227 Caption = 'Комбинированный список' Color = clDefault Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ParentColor = False ParentFont = False Transparent = False end object Button1: TButton Left = 624 Height = 32 Top = 16 Width = 162 AutoSize = True Caption = 'Инициализация' Color = clLime Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button1Click ParentFont = False TabOrder = 2 end object Button2: TButton Left = 624 Height = 32 Top = 64 Width = 207 AutoSize = True Caption = 'Принять в ComboBox' Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button2Click ParentFont = False TabOrder = 3 end object Button3: TButton Left = 624 Height = 32 Top = 112 Width = 245 AutoSize = True Caption = 'Редактировать ComboBox' Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button3Click ParentFont = False TabOrder = 4 end object Button4: TButton Left = 624 Height = 32 Top = 160 Width = 221 AutoSize = True Caption = 'Копировать ComboBox' Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button4Click ParentFont = False TabOrder = 5 end object Label3: TLabel Left = 24 Height = 22 Top = 424 Width = 121 Caption = 'Введите текст' Color = clDefault Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ParentColor = False ParentFont = False Transparent = False end object Edit1: TEdit Left = 176 Height = 30 Top = 424 Width = 232 Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft ParentFont = False TabOrder = 6 end object Button5: TButton Left = 624 Height = 31 Top = 208 Width = 94 Caption = 'Очистить' Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button5Click ParentFont = False TabOrder = 7 end object Button6: TButton Left = 624 Height = 32 Top = 256 Width = 194 AutoSize = True Caption = 'Закрыть программу' Font.CharSet = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -20 Font.Name = 'Times New Roman' Font.Pitch = fpVariable Font.Quality = fqDraft OnClick = Button6Click ParentFont = False TabOrder = 8 end end Вид программы: На рисунке 9 изображено окно программы с результатом проделанной работы. Рисунок 9 - Результат Инициализация. Кнопкой Инициализация очищаем Edit1 и передаем ему фокус ввода. Курсор появляется в поле ввода Edit1. Заполнение списка ComboBox. Для каждой строки в редакторе Edit1 за- носим текст, кнопкой Принять в ComboBox переносим его в список. Повто- ряем операцию нужное число раз. Каждый раз проверяем список ComboBox, убеждаясь в появлении новой строки в конце. Редактирование. В редакторе Edit1 заносим строку текста для ввода в произвольно выбираемую позицию. В ComboBox выделяем позицию для вво- да, ее текст перемещается в верхнюю строку редактирования. Копирование. В ComboBox выделяем позицию для копирования, ее текст перемещается в верхнюю строку редактирования. Кнопкой Копировать в ListBox переносим строку в ListBox. Каждый раз наблюдаем ListBox, чтобы убедится в появлении там новой строки в очередной позиции. Лабораторная работа №4 Структуры с ветвлениями Цель работы: Изучение основных команд условной и безусловной передачи управления, вычислительного процесса с разветвляющейся структурой. Вычислить значения функции по варианту задания из табл. 8. Вывести значения исходных данных и полученные результаты, сопровождая их именами переменных. Значения аргумента взять из указанного диапазона так, чтобы протестировать все ветви программы. Проект – обычное приложение. Листинг программы: program project1; {$APPTYPE CONSOLE} uses SysUtils, Unit1; var a, y, x, xs, xk,dx:real; label 20; begin writeln('Vvedite a,xs,xk,dx'); readln(a,xs,xk,dx); writeln; writeln('Tabl y(x)'); x:=xs; 20: if a*x<1.3 then y:=(PI*SQR(x))-(7/SQR(x)) else if a*x=1.3 then y:=a*(SQR(x*x*x))-7/(SQRT(x)) else y:=(sin(x)/cos(x))*(x+7*(SQRT(x))); writeln('x', x:5:1, 'y=', y:6:3); x:=x+dx; if x<=xk then goto 20; readln; end. Результат изображен на рисунке 10 Рисунок 10 – Окно работающего приложения Задание 2. Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Buttons; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Memo1: TMemo; procedure BitBtn1Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.BitBtn1Click(Sender: TObject); var a, y, x, xn, xk,dx:real; label 20; begin a:=strtofloat(Edit1.Text); xn:=strtofloat(Edit2.Text); xk:=strtofloat(Edit3.Text); dx:=strtofloat(Edit4.Text); x:=xn; 20:if x<1.3 then y:=(PI*SQR(x))-(7/SQR(x)) else if x=1.3 then y:=a*(SQR(x*x*x))-7/(SQRT(x)) else y:=(sin(x)/cos(x))*(x+7*(SQRT(x))); Memo1.lines.add(floattostrF(y,ffFixed,4,2)); Edit1.SetFocus; x:=x+dx; if x<=xk then goto 20; end; procedure TForm1.BitBtn3Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.clear; Edit4.clear; Memo1.clear; end; end. Результат программы изображен на рисунке 11. Рисунок 11 – Окно с результатами тестирования программы. Лабораторная работа №5.1 Циклы с неизвестным числом повторений Цель работы: Изучение организации циклов с неизвестным числов повторенний с помощью операторов while...do и repeat...until. Задание 1 Вариант задания: Листинг программы: program project1; {$APPTYPE CONSOLE} uses SysUtils; var a,e,q,s,x:real; n:integer; begin writeln('Vvedite tochnost'); write('e='); readln(e); writeln('Vvedite argument'); write('x='); readln(x); n := 0; a := x; s := a; while abs(a)>E do begin q:=2*n-1/2*n*(sqr(x))-3*(sqr(x)); a:=a*q; s:=s+a; n:=n+1; end; writeln; writeln('Rezultat'); writeln('Summa s=',s:8:3); writeln('Chlenov ryada n=',n); readln; end. Окно запущенной программы изображено на рисунке 12 Рисунок 12 – Результат В данной Л.Р нужно было вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием оператора цикла while...do. На печать вывести значение суммы и число членов ряда, вошедших в сумму. Задание 2 (обычное приложение) Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Buttons; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.BitBtn1Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.clear; Edit4.clear; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); var e,x,q,a,s:extended; var n:integer; begin e:=strtofloat(edit1.text); x:=strtofloat(edit2.text); n:=0; a:=x; s:=a; while abs(a)>E do begin q:=2*n-1/2*n*(sqr(x))-3*(sqr(x)); a:=a*q; s:=s+a; n:=n+1; edit3.text:=floattostr(s); edit4.text:=floattostr(n); end; end; end. Окно запущенной программы изображено на рисунке 13 Рисунок 13 – Результат Лабораторная работа № 5.2 Циклы с заданным числом повторений Цель работы: Изучение организации циклов с заданным числом повторенний с помощью операторов for...to...do и for...downto...do. Задание: Вычислить значения функции с использованием оператора цикла for...to...do. Проект – обычное приложение. Листинг программы(консольное приложение): program project1; {$APPTYPE CONSOLE} uses SysUtils; var z,k,s,t,a,b: real; n,m,p: integer; begin writeln('Vvedite k:'); readln(k); z:=0; for n:=1 to 12 do z:=cos(k)+sin(k); writeln; writeln('Rezultat'); writeln('k=', k:8:3, 'z=', z); begin writeln('Vvedite a:'); readln(a); writeln('Vvedite b:'); readln(b); s:=0; t:=1; for m:=1 to 5 do for p:=2 to 10 do s:=(a*b)+s; t:=s*t; writeln; writeln('Rezultat'); writeln('a=',a:8:3, 'b=', b); writeln('t=',t); readln; end; end. Рузультат изображен на рисунке 14 Рисунок 14 – Результат Задание 2 Код для обычного приложения: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button4Click(Sender: TObject); begin close; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.clear; Edit4.clear; end; procedure TForm1.Button1Click(Sender: TObject); var z,t,p,k:extended; n:integer; begin k:=strtofloat(edit1.text); p:=1; for n:=1 to 2 do p:=p*cos(k)+sin(k); edit3.Text:=floattostr(p); end; procedure TForm1.Button2Click(Sender: TObject); var s,t:extended; a,b:integer; begin a:=strtoint(edit1.text); b:=strtoint(edit2.text); s:=0; b:=1; for a:=1 to 5 do for b:=2 to 10 do begin s:=(a*b)+s; t:=s*t; end; edit4.Text:=floattostr(t); end; end. Результат работы приложения изображен на рисунках 15, 16 Рисунок 15 - Окно программы с заданным числом повторений (результаты работы программы) Рисунок 16 - Окно программы с заданным числом повторений (результаты работы программы) Лабораторная работа №6 Новогодняя открытка Цель работы: Изучение графических функций среды визуального программирования Lazarus на примере создания программы «Новогодняя открытка». Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button6: TButton; Image1: TImage; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Timer1Timer(Sender: TObject); begin form1.canvas.brush.color:=$000000+random(255*255*255); form1.canvas.pen.color:=$000000+random(255*255*255); form1.canvas.ellipse(390,20,410,40); end; procedure TForm1.Button1Click(Sender: TObject); var p: array[1..15] of TPoint; begin form1.canvas.Pen.Color:=clgreen; form1.Canvas.brush.Color:=clLime; form1.Canvas.pen.Width:=3; p[1].x:=400; p[1].y:=30; p[2].x:=360; p[2].y:=90; p[3].x:=380; p[3].y:=90; p[4].x:=340; p[4].y:=130; p[5].x:=380; p[5].y:=130; p[6].x:=320; p[6].y:=200; p[7].x:=380; p[7].y:=200; p[8].x:=380; p[8].y:=220; p[9].x:=420; p[9].y:=220; p[10].x:=420; p[10].y:=200; p[11].x:=480; p[11].y:=200; p[12].x:=420; p[12].y:=130; p[13].x:=460; p[13].y:=130; p[14].x:=420; p[14].y:=90; p[15].x:=440; p[15].y:=90; p[16].x:=400; p[16].y:=30; form1.canvas.polygon (p); end; procedure TForm1.Button2Click(Sender: TObject); begin form1.canvas.Pen.Color:=clwhite; form1.Canvas.brush.Color:=clwhite; form1.Canvas.pen.Width:=3; form1.canvas.ellipse(590,160,680,220); form1.canvas.ellipse(600,110,670,160); form1.canvas.ellipse(615,70,655,110); end; procedure TForm1.Button3Click(Sender: TObject); begin form1.canvas.Pen.Color:=clblue; form1.Canvas.brush.Color:=clyellow; form1.Canvas.pen.Width:=2; form1.canvas.rectangle(260,220,200,90); form1.canvas.rectangle(500,140,160,140); form1.canvas.rectangle(40,220,300,80); form1.canvas.rectangle(90,100,150,150); form1.canvas.MoveTo(120,100); form1.canvas.LineTo(120,150); form1.canvas.Pen.Color:=clgray; form1.Canvas.brush.Color:=clblue; form1.Canvas.pen.Width:=2; form1.Canvas.brush.Color:=clgreen; form1.canvas.rectangle(0,220,700,280); //подиум //каркас дома form1.canvas.rectangle(20,80,320,60); // крыша снизу вверх form1.canvas.rectangle(50,40,290,60); form1.canvas.rectangle(90,40,250,20); form1.canvas.rectangle(200,0,140,20); form1.canvas.rectangle(250,220,190,90); end; procedure TForm1.Button4Click(Sender: TObject); var p:array of TPoint; cx,cy,r,i:integer; u:double; begin cx:=clientwidth div 2; cy:=clientheight div 20; if cx setlength(p,11); u:=pi/1; for i:=0 to 10 do begin if not odd(i) then begin p[i].x:=cx+round(r*cos(u)); p[i].y:=cy-round(r*sin(u)); end else begin p[i].x:=cx+round(r*cos(u)*0.382); p[i].y:=cy-round(r*sin(u)*0.382); end; u:=u+pi/5; end; with Canvas do begin pen.Width:=2; pen.Color:=clRed; brush.Color:=clGreen; polygon(p); end; end; procedure TForm1.Button6Click(Sender: TObject); begin close; end; procedure TForm1.FormCreate(Sender: TObject); begin end; procedure TForm1.Image1Click(Sender: TObject); begin end end. На рисунках 17, 18 будет изображено окно программы Рисунок 17 - Окно программы «Новогодняя открытка» Рисунок 18 - Окно программы «Новогодняя открытка» Кнопка «Елка» выводит на экран рисунок елки. Кнопка «Снеговик» выводит на экран рисунок снеговика. Кнопка « Дом» выводит на экран рисунок дома. Кнопка «Звездочка» выводит на экран звезду. В данной лабораторной работе нужно было создать Новогоднюю открытку применяя объекты Timer, Label, Image, анимацию. Графика нужна для визуализации информации. Кроме того, иногда возникает потребность украсить свое приложение какими-то изображениями. 1.Для рисования рисунков использовался объект TImage. Компонент (TImage) обеспечивает вывод на поверхность формы иллюстраций, представленных в bmp–формате (чтобы компонент можно было использовать для отображения иллюстраций в формате JPG, надо подключить модуль JPEG – указать имя модуля в директиве uses). 2.Рисование выполнялось путем обращения к свойству Canvas (графическая канва) этого объекта: Image1.Canvas. Лабораторная работа №7 Таблицы Цель работы: Изучение основных возможностей работы с таблицей в среде визуального программирования Lazarus на примере создания программы «Таблица конвертации». Листинг программы: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; SellAgree: TButton; SumAgree: TButton; Button3: TButton; DecCol: TButton; IncCol: TButton; DecRow: TButton; IncRow: TButton; EdCell: TEdit; EdSum: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; LbDate: TLabel; StringGrid1: TStringGrid; procedure Button3Click(Sender: TObject); procedure DecColClick(Sender: TObject); procedure DecRowClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure IncColClick(Sender: TObject); procedure IncRowClick(Sender: TObject); procedure SellAgreeClick(Sender: TObject); procedure SumAgreeClick(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.ColCount:=6; StringGrid1.RowCount:=4; StringGrid1.Cells[0,0]:='Валюта'; StringGrid1.Cells[1,0]:='Курс рубля'; StringGrid1.DefaultColWidth:=78; StringGrid1.Cells[2,0]:='Сумма выдачи'; StringGrid1.Cells[3,0]:='Комиссия,%'; StringGrid1.Cells[4,0]:='Комис-ные'; StringGrid1.Cells[5,0]:='Взнос'; StringGrid1.Cells[0,1]:='USD';// Доллар США StringGrid1.Cells[0,2]:='JPY';// Японская йена StringGrid1.Cells[0,3]:='GBP';// Фунт стерлингов StringGrid1.Cells[1,1]:='77,06'; StringGrid1.Cells[1,2]:='0,73'; StringGrid1.Cells[1,3]:='99,7'; StringGrid1.Cells[3,1]:='2'; StringGrid1.Cells[3,2]:='2'; StringGrid1.Cells[3,3]:='2'; LbDate.Caption:='По состоянию на'+ DateToStr(Date); end; procedure TForm1.IncColClick(Sender: TObject); begin StringGrid1.ColCount:=StringGrid1.ColCount+1; end; procedure TForm1.IncRowClick(Sender: TObject); begin StringGrid1.RowCount:=StringGrid1.RowCount+1; end; procedure TForm1.SellAgreeClick(Sender: TObject); begin StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:=EdCell.Text; end; procedure TForm1.SumAgreeClick(Sender: TObject); var ResVal, Komis:real; i:byte; S:string; begin with form1 do for i:=1 to StringGrid1.RowCount-1 do if (StrToFloat(StringGrid1.Cells[1,i])<>0) then begin Komis:=StrToFloat(EdSum.Text)/100*StrToFloat(StringGrid1.Cells[3,i]); ResVal:=(StrToFloat(EdSum.Text)-Komis)/StrToFloat(StringGrid1.Cells[1,i]); str(Komis:0:2,s); StringGrid1.Cells[4,i]:=s; str(ResVal:0:2,s); StringGrid1.Cells[2,i]:=s; str(StrToFloat(EdSum.Text):0:2,s); StringGrid1.Cells[5,i]:=s; end; end; procedure TForm1.DecRowClick(Sender: TObject); begin if StringGrid1.RowCount>2 then StringGrid1.RowCount:=StringGrid1.RowCount-1; end; procedure TForm1.DecColClick(Sender: TObject); begin if StringGrid1.ColCount>2 then StringGrid1.ColCount:=StringGrid1.ColCount-1; end; procedure TForm1.Button3Click(Sender: TObject); begin Close; end; end. Данная программа позволяет конвертировать российские рубли в такие валюты как: доллар США, японская йена, фунт стерлинга. На форме размещены следующие компоненты: Label1 – заголовок таблицы Label2 – описание поля ввода(Редактор ячеек) Label3 – описание поля ввода (Сумма для конвертации) Label4 – вывод даты EdCell – поле ввода редактирования EdSum – поле ввода суммы для конвертации Button1 (SellAgree) – принятие изменений текущей ячейки Button2 (SumAgree) – принятие суммы и расчет по курсу Button3 – выполняет выход из приложения Button4 (< DecRol) – уменьшение числа столбцов на 1 Button5 (> IncCol) – увеличение числа столбцов на1 Button6 (^ DecRow) – уменьшение числа строк на 1 Button7 (v IncRow) – увеличение числа строк на 1 StringGrid1 – основная таблица Image1-Image4. Работа программы показана на рисунке 19. Рисунок 19 – Окно работы программы. В программе имеется возможность добавления или удаления строк и столбцов (Рис.20): Рисунок 20 – Добавление строки и столбца Также можно редактировать любые ячейки (Рис.21). Рисунок 21 – Редактирование ячейки «Комиссия, %». |