Краткие сведения из теории. Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же ветвей при различных значениях промежуточных данных.
Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же ветвей при различных значениях промежуточных данных. Различают циклы с параметрами и циклы с условием. Для программирования циклов с параметром в Delphi используют оператор for. Формат оператора: for v:= а1 to а2 do оператор; v – переменная цикла – переменная порядкового типа, a1- выражение целого типа, задающее начальное значение переменной цикла, a2 - выражение целого типа, задающее конечное значение переменной цикла. оператор – оператор, выполнение которого будет повторяться (оператор тела цикла). Если нужно сделать цикл по убыванию, то оператор for записывается в виде for v: =a1 downto a2 do оператор; Оператор работает так же, но шаг переменной цикла –1. Для программирования циклов с условием в Delphi существуют оператор цикла с предусловием WHILE и оператор цикла с постусловием REPEAT. Формат операторов: while условие do оператор; repeat операторы until условие; условие – логическое выражение. В операторе while сначала вычисляется логическое выражение и если оно истинно, то выполняется оператор. После этого управление возвращается в начало цикла на вычисление логического выражения. Если условие ложно, оператор завершает работу и управление передается на следующий оператор. В операторе repeat сначала выполняются операторы, и только потом вычисляется логическое выражение. Если оно ложно, то управление возвращается в начало цикла, повторяется выполнение операторов тела цикла. Если условие истинно – то выход из цикла. Пример 6. Приписать к 523*** три такие цифры справа, чтобы полученное шестизначное число делилось на 7, на 8, на 9. Использованные компоненты: Label1 – для вывода результата; BitBtn1 – для запуска программы; BitBtn2 – для выхода из программы.
Рис. 14. Форма примера 6 Программный код unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Label1: TLabel; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure BitBtn2Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var s,a,b,c,n: integer; procedure TForm1.BitBtn2Click(Sender: TObject); begin close; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin for n:=0 to 999 do begin s:=523000+n; a:=s mod 7; b:=s mod 8; c:=s mod 9; if (a=0) and (b=0) and (c=0) then label1.Caption:='523..'+inttostr(n); end; end; end.
Пример 7. Подсчитать сумму ряда: s=1-2+3-4+5-... для заданного числа членов. Использованные компоненты: Edit1 – для ввода числа членов n; Label6 – для вывода результата; Button1 – для запуска программы.
Рис. 15. Форма примера 7 Программный код unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; Label6: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i, n: integer; s:real; begin n:=StrToInt(Edit1.Text); s:=0; for i:=1 to n do if odd(i) then {ïðîâåðêà íå÷åòíîñòè íîìåðà} s:=s + i else s:=s - i; Label6.Caption:= 's='+ FloatToStr(s); end; end. Пример 8. Алгоритм Евклида для подсчета НОД (наибольшего общего делителя) двух натуральных чисел. Использованные компоненты: Label3 – для вывода результата; Edit1 – для ввода первого числа; Edit2 – для ввода второго числа; BitBtn1 – для запуска программы; BitBtn2 – для выхода из программы.
Рис. 16. Форма примера 8 Программный код unit Unit1;interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons;type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit2: TEdit; Label3: TLabel; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Edit1: TEdit;procedure BitBtn2Click(Sender: TObject);procedure BitBtn1Click(Sender: TObject); private{ Private declarations } public{ Public declarations }end; var Form1: TForm1;implementation{$R *.dfm} var a,b,x,y,z:integer;procedure TForm1.BitBtn2Click(Sender: TObject);begin close;end;procedure TForm1.BitBtn1Click(Sender: TObject);begin a:=strtoint(edit1.Text); b:=strtoint(edit2.Text); x:=a; y:=b; while (x<>y) do if x>y then x:=x-y else y:=y-x; z:=x; label3.Caption:='НОД= '+inttostr(z);end;end.Пример 9. Вычислить сумму членов ряда с точностью до члена ряда, меньшего Е. Использованные компоненты: Edit1 – для ввода точности; Label6 – для вывода результата;
Рис. 17. Форма примера 9 Программный код unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; Label6: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var n:integer; s,z,e:real; begin e:=strtofloat(edit1.Text); n:=1; z:=1/6; s:=0; while abs(z)>=e do begin s:=s+z; n:=n+1; z:=n/((n+1)*(n+2)); end; label6.Caption:='Сумма= '+floattostr(s); end; end. Пример 10. Вычислить кубический корень из числа m методом Ньютона по формуле: Вычисления продолжать пока Использованные компоненты: Label6 – для вывода результата; Edit1 – для ввода числа m; Edit2 – для ввода точности; Button1 – для запуска программы. Рис. 18. Форма примера 10 Программный код unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; Label6: TLabel; Edit2: TEdit; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x1,x2,d,e,m:real; begin m:=strtofloat(edit1.Text); e:=strtofloat(edit2.Text); x1:=m; repeat x2:=2/3*x1+m/3/sqr(x1); d:=abs(x1-x2); x1:=x2; until d<=e; label6.Caption:='Корень= '+floattostr(x2); end; end.
|