p align="left">4. Практичне завдання З використанням засобів візуального програмування розробити програму для автоматичного розрахунку значень складної функції: Приклад файлу форми Delphi6 для табулювання функції: unit Func_tab; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids, Menus; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; StringGrid1: TStringGrid; BitBtn1: TBitBtn; Label4: TLabel; ListBox1: TListBox; Memo1: TMemo; BitBtn2: TBitBtn; Label5: TLabel; Label6: TLabel; Label7: TLabel; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N4: TMenuItem; N5: TMenuItem; N3: TMenuItem; N7: TMenuItem; N8: TMenuItem; N9: TMenuItem; BitBtn3: TBitBtn; procedure BitBtn1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure Edit1Exit(Sender: TObject); procedure Edit2Exit(Sender: TObject); procedure Edit3Exit(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure N8Click(Sender: TObject); procedure N9Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; X,Xn,Xk,H:real;//Параметри табулювання fname:String[25];// f:textfile; implementation {$R *.dfm} // Повідомлення про помилку у завданні інтервалів табулювання procedure P1; begin MessageDlg ('"Xп" не може бути більшим ніж "Хк".' +#13 +'Введіть значення правильно.', mtWarning, [mbCancel], 0); Form1.Edit1.Text:=''; Form1.Edit2.Text:=''; end; //Повідомлення про помилку у значенні кроку табулювання по відношенню до // меж табулювання procedure P2; begin MessageDlg ('Крок табулювання "H" не може приймати таких значень.' +#13 +'Введіть значення правильно.', mtWarning, [mbCancel], 0); Form1.Edit3.Text:=''; end; //Повідомлення про помилку перевищення допустимої розмірності даних procedure P3; begin MessageDlg ('Введене значення знаходться за межами допустимого.' +#13 +'Введіть значення правильно.', mtWarning, [mbCancel], 0); end; procedure P4; begin MessageDlg ('Треба ввести всі дані.', mtWarning, [mbCancel], 0); end; //Процедура очищення даних у формі procedure P5; begin Form1.Edit1.Text:=''; Form1.Edit2.Text:=''; Form1.Edit3.Text:=''; Form1.Edit1.SetFocus; Form1.Height:=167; Form1.Position:=poScreenCenter; Form1.Label4.Visible:=False; Form1.Label5.Visible:=False; Form1.Label6.Visible:=False; Form1.Label7.Visible:=False; Form1.StringGrid1.Visible:=False; Form1.ListBox1.Items.Clear; Form1.Memo1.Lines.Clear; Form1.ListBox1.Visible:=False; Form1.Memo1.Visible:=False; end; //Контроль введення даних у поля фории procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9',Chr(8):; '-': if (pos('-',Edit1.Text)= 0) and (length(Edit1.Text) = 0) Then Key := '-' else Key := Chr(0); ',': if pos(',',Edit1.Text)<>0 THen Key := Chr(0); else Key := Chr(0); end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9',Chr(8):; '-': if (pos('-',Edit2.Text)= 0) and (length(Edit2.Text) = 0) Then Key := '-' else Key := Chr(0); ',': if pos(',',Edit2.Text)<>0 THen Key := Chr(0); else Key := Chr(0); end; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9',Chr(8):; ',': if pos(',',Edit3.Text)<>0 THen Key := Chr(0); else Key := Chr(0); end; end; procedure TForm1.Edit1Exit(Sender: TObject); begin If Edit1.Text='' Then Exit; If (Abs(StrToFloat(Edit1.Text))>100000)Then begin P3; Edit1.Text:=''; Edit1.SetFocus; end; end; procedure TForm1.Edit2Exit(Sender: TObject); begin If Edit2.Text='' Then Exit; If (Abs(StrToFloat(Edit2.Text))>100000)Then begin P3; Edit2.Text:=''; Edit2.SetFocus; end; end; procedure TForm1.Edit3Exit(Sender: TObject); begin If Edit3.Text='' Then Exit; If (StrToFloat(Edit3.Text)>10000)Then begin P3; Edit3.Text:=''; Edit3.SetFocus; end; end; //Основна процедура програми Procedure TForm1.BitBtn1Click(Sender: TObject); var I,K:integer; Y :array[0..1000] of Real; label L1; begin //Перевірка наявності правильних значень в полях введення і їх взаємної //коректності, з виведенням відповдних повідомлень і формуванням переходів IF (Edit1.Text = '') or (Edit2.Text = '') or(Edit3.Text = '') then begin P4; Exit; end; IF Edit3.Text = '0' then begin MessageDlg ('Треба задати крок табулювання,' + #13 +' який має ненульове значення', mtWarning, [mbCancel], 0); Edit3.Text := ''; Edit3.SetFocus; goto l1; end; Xn:=StrToFloat(Edit1.Text); Xk:=StrToFloat(Edit2.Text); H:=StrToFloat(Edit3.Text); If Xk<Xn Then begin P1; goto L1; end; If (H<=0) Or (H>=Abs(Xk-Xn)) Then begin P2; goto L1; end; X:=Xn-H; K:= Round((Abs((Xk-Xn))/H)); If K>1000 Then begin MessageDlg ('Переповнення масиву даних.' +#13 +'Треба зменшити інтервал або' +#13 +' збільшити крок табулювання', mtWarning, [mbCancel], 0); Edit1.Text := ''; Edit2.Text := ''; Edit3.Text := ''; goto l1; end; //Фомування компонентів для виведення результатів StringGrid1.RowCount:= K+2; Form1.Height:=430; Form1.Position:=poScreenCenter; Label4.Visible:=True; Label5.Visible:=True; Label6.Visible:=True; Label7.Visible:=True; StringGrid1.Visible:=True; Label7.Caption:='у полі memo'; ListBox1.Items.Clear; Memo1.Lines.Clear; ListBox1.Visible:=True; Memo1.Visible:=True; StringGrid1.Cells[0,0]:='X'; StringGrid1.Cells[1,0]:='Y'; //Розрахунок і виведення результатів For I:=0 to K do begin Y[I]:=(1+ln(2-Xn+H*I))/(1-Xn+H*I+0.1); //Наступний рядок забезпечує виведення результату // з точністю до тисячних Y[I]:= Round(Y[I]*1000)/1000; StringGrid1.Cells[0,I+1]:=FloatToStr(Xn+H*I);//Виведення у таблицю StringGrid1.Cells[1,I+1]:=FloatToStr(Y[I]); ListBox1.Items.Add(FloatToStr(Xn+H*I)+' '+FloatToStr(Y[i])); //Виведення у список Memo1.Lines.Add(FloatToStr(Xn+H*I)+' '+FloatToStr(Y[i])); //Виведення у поле Мемо end; l1:; end; //Запис результатів у файл procedure TForm1.BitBtn2Click(Sender: TObject); begin ListBox1.Items.SaveToFile('result.txt'); end; //Збереження у файлі procedure TForm1.N4Click(Sender: TObject); begin ListBox1.Items.SaveToFile(fname); end; //Зчитати з файла і вивести у поле Мемо із скриттям зайвих компонентів procedure TForm1.N3Click(Sender: TObject); begin If FileExists('result.txt')= False Then Begin MessageDlg('Файла не існує', mtWarning, [mbCancel], 0); Exit; end; Label7.Visible:=True; Label7.Caption := 'Результати зчитування з файлу'; Memo1.Lines.LoadFromFile('result.txt'); Memo1.Visible:=True; Label4.Visible:=False; Label5.Visible:=False; Label6.Visible:=False; ListBox1.Visible:=False; StringGrid1.Visible:=False; Form1.Height:=430; Memo1.SetFocus; Form1.Position:=poScreenCenter; end; //Створення файлу з перевіркою його існування procedure TForm1.FormActivate(Sender: TObject); begin fname:='result.txt'; AssignFile (f, fname); If FileExists('result.txt')= False Then begin rewrite(f); CloseFile(f); end; end; //Очищення полів введення procedure TForm1.BitBtn3Click(Sender: TObject); begin P5; end; procedure TForm1.N5Click(Sender: TObject); begin P5; end; //Вихід з програми procedure TForm1.N7Click(Sender: TObject); begin Close; end; //Виведення довідки procedure TForm1.N8Click(Sender: TObject); begin ShowMessage(Горпинич О.О. + #13 + ' студент групи пзс-504'); end; procedure TForm1.N9Click(Sender: TObject); begin ShowMessage('Навчальна програма табулювання функції.' + #13 + ' Версія 1.0'); end; end.
Список використаної літератури 1. В. Турский. «Методология программирования». 2. Б.Іванов “Дискретная математика. Алгоритмы и программы”. 3. Конспект лекцій з предмету. 4. Інтернет мережа..
Страницы: 1, 2
|