- •Инструктивно-методические указания по проведению лабораторного занятия
- •На тему:
- •«Разработка задач с использованием ветвящейся и циклической структуры»
- •Лабораторное занятие № 2
- •Указания по проведению лабораторного занятия
- •4. Синтаксис оператора If…Then…Else.
- •5. Оператор Case.
- •10. Какие виды итерационных циклов вы знаете?
- •11. Разкажите о операторе for.
- •12. Синтаксис цикла с предусловием While (пока)?
- •13. Синтаксис цикла с постусловием Repeat … Until (повторять до)?
- •14. Компонент Memo.
- •3. Подведение итогов, выдача заданий для самостоятельного изучения и отработки.
- •13. Синтаксис цикла с постусловием Repeat … Until (повторять до)?
11. Разкажите о операторе for.
Синтаксис оператора For:
Последовательность операторов, находящаяся между begin и end, будет выполнена (кон_зн_счетчика - нач_зн_счетчика_цикла + 1) раз. Если начальное значение счетчика превышает конечное значение счетчика, при шаге цикла равным 1, то последовательность операторов, находящаяся между begin и end ни разу не будет выполнена.
Пример: Вычислить сумму конечного ряда , т.е. сумму первых n членов последовательности (k=1,2,3..,n).
Программа, реализующая данный алгоритм будет иметь вид:
Замечание. В том случае, если тело цикла состоит только из одной инструкции, нет смысла использовать составной оператор (операторные скобки Begin…End)
12. Синтаксис цикла с предусловием While (пока)?
- Инструкции, находящиеся между begin и end выполняются до тех пор, пока условие истинно. Если условие неверно при входе в цикл, инструкции ни разу не исполняются.
- Чтобы цикл завершился, необходимо, чтобы последовательность инструкций между begin и end изменяла значения переменных, входящих в выражение условие.
Пример.
var k:integer;
n,y,s:real;
begin
n:=strtofloat(edit1.text);
k:=1;
s:=0;
while y>=n do begin {цикл с предусловием}
y:=(k+0.3)/(3*k*k+5);
s:=s+y;
k:=k+1;
end;
edit2.text:=floattostr(s)+' '+inttostr(k-1);
end;
Замечание. В том случае, если тело цикла состоит только из одной инструкции, нет смысла использовать составной оператор (операторные скобки Begin…End)
13. Синтаксис цикла с постусловием Repeat … Until (повторять до)?
Работа оператора:
- выполняются инструкции, следующие после ключевого слова Repeat;
- вычисляется значение условия. Если условие ложно, то повторно выполняются инструкции цикла. Если условие истинно, то выполнение цикла прекращается.
Замечание. При использовании цикла с постусловием нет необходимости использовать операторные скобки.
Пример.
var k:integer;
n,y,s:real;
begin
n:=strtofloat(edit1.text);
k:=1;
s:=0;
repeat
y:=(k+0.3)/(3*k*k+5);
s:=s+y;
k:=k+1;
until
y<=n;
edit2.text:=floattostr(s)+' '+inttostr(k-1);
end;
14. Компонент Memo.
Практическая часть.
Разработать программу для вычисления значений функции Z(x), заданной соотношением:
Параметры А и В задать в программе (в разделе Const и оператором присвоения), а значения Х вводить с клавиатуры с помощью компоненты однострочного редактора. Вводу значения Х должен предшествовать вывод на экран подсказки, например «Введите значение Х». Использовать все виды циклов.
№ |
|
|
А |
В |
Х |
1 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
2 |
|
|
0,2 |
0,6 |
0 0,5 1 |
3 |
|
|
2,3 |
6,8 |
1,9 2,6 3,3 |
4 |
|
|
0,1 |
2,5 |
0,8 1,6 2,4 |
5 |
|
|
4,7 |
8,2 |
4,5 5,0 5,5 |
6 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
7 |
|
|
0,2 |
0,6 |
0 0,5 1 |
8 |
|
|
2,3 |
6,8 |
1,9 2,6 3,3 |
9 |
|
|
0,1 |
2,5 |
0,8 1,6 2,4 |
10 |
|
|
4,7 |
8,2 |
4,5 5,0 5,5 |
11 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
12 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
13 |
|
|
0,2 |
0,6 |
0 0,5 1 |
14 |
|
|
2,3 |
6,8 |
1,9 2,6 3,3 |
15 |
|
|
0,1 |
2,5 |
0,8 1,6 2,4 |
16 |
|
|
4,7 |
8,2 |
4,5 5,0 5,5 |
17 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
18 |
|
|
0,2 |
0,6 |
0 0,5 1 |
19 |
|
|
2,3 |
6,8 |
1,9 2,6 3,3 |
20 |
|
|
0,1 |
2,5 |
0,8 1,6 2,4 |
21 |
|
|
4,7 |
8,2 |
4,5 5,0 5,5 |
22 |
|
|
0,6 |
5,5 |
1,2 2,9 4,8 |
23 |
|
|
0,2 |
0,6 |
0 0,5 1 |
24 |
|
|
2,3 |
6,8 |
1,9 2,6 3,3 |
25 |
|
|
0,1 |
2,5 |
0,8 1,6 2,4 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,math;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Label6: TLabel;
Button2: TButton;
Button1: TButton;
Button3: TButton;
Memo1: TMemo;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,a,b,nz,kz,dx,F,G:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const a=0.2;
b=0.6;
begin
nz:=strtofloat(edit1.Text);
kz:=strtofloat(edit2.Text);
dx:=strtofloat(edit3.Text);
x:=strtofloat(edit4.Text);
while (x>=nz)and(x<=kz) do begin
if (x>a)and(x<b) then begin
F:=round(ln(abs(6-x))/(sin(x)+x));
memo1.Lines.Add('F='+floattostr(F));
end
else begin
G:=round(x*ln(abs(x-2.5)));
memo1.Lines.Add('G='+floattostr(G));
end;
x:=x+dx;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
const a=0.2;
b=0.6;
begin
nz:=strtofloat(edit1.Text);
kz:=strtofloat(edit2.Text);
dx:=strtofloat(edit3.Text);
x:=strtofloat(edit4.Text);
for x:=nz to kz do
begin
if (x>a)and(x<b) then
begin
F:=round(ln(abs(6-x))/(sin(x)+x));
memo1.Lines.Add('F='+floattostr(F));
end
else
begin
G:=round(x*ln(abs(x-2.5)));
end;
memo1.Lines.Add('G='+floattostr(G));
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
const a=0.2;
b=0.6;
begin
nz:=strtofloat(edit1.Text);
kz:=strtofloat(edit2.Text);
dx:=strtofloat(edit3.Text);
x:=strtofloat(edit4.Text);
repeat
if (x>a)and(x<b) then begin
F:=round(ln(abs(6-x))/(sin(x)+x));
memo1.Lines.Add('F='+floattostr(F));
end
else begin
G:=round(x*ln(abs(x-2.5)));
memo1.Lines.Add('G='+floattostr(G));
end;
x:=x+dx;
until (x>kz);
end;
end.