Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. В 2 ч. Ч. 2.pdf
Скачиваний:
0
Добавлен:
24.11.2025
Размер:
1.34 Mб
Скачать

Л а б о р а т о р н а я р а б о т а № 3 ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

Цель работы: приобретение практических навыков использования операторов циклов.

Используемые программные средства: Borland Delphi.

3.1. Теоретические сведения

Циклическими называются алгоритмы, в которых определенные серии команд повторяются некоторое число раз. Для организации циклов с заданным числом повторений используется оператор for. Если неизвестно, сколько раз необходимо повторить цикл, то используются операторы цикла с постусловием repeat или с предусловием while (Приложение А).

Работа с компонентами. Для работы с многострочным текстом в Delphi

имеются компоненты Memo типа TMemo (панель Standard) и RichEdit типа

TRichEdit (панель Win32), которые относятся к многострочным редакторам. Многострочный редактор предоставляет возможности для ввода, редактирования и отображения информации и позволяет содержать несколько строк.

Для работы с отдельными строками используется свойство Lines типа

TStrings. Для того чтобы изменить значение свойства Lines компонента Memo в режиме проектирования приложения, используется StringListEditor, который вызывается с помощью Object Inspector:

Для добавления новой строки во время выполнения приложения необходимо вызвать метод Add (переменная типа string) компонента Memo:

Memo1.Lines.Add('новая строка');

Для выравнивания текста в поле компонента Memo используется свойство

Alignment, которое может принимать значения: taCenter – выровнять по центру; taLeftJustify – выровнять по левому краю; taRightJustify – выровнять по правому краю.

37

Для просмотра всей информации в компоненте Memo используются свойства

WordWrap (перенос текста) и ScrollBars (полосы прокрутки), которые задаются, используя окно Object Inspector во время разработки приложения, или при обращении к этим свойствам компонентов непосредственно во время работы приложения. Для очистки содержимого компонента Memo используется метод

Clear:

Memo1.Clear.

Содержимое компонентов можно загружать из текстового файла и сохранять в текстовом файле. Для этого удобно использовать методы

Memo1.Lines.LoadFromFile (const FileName: string)

и

Memo1.Lines.SaveToFile (const FileName: string)

класса TStrings.

3.2. Порядок выполнения работы

Изучить операторы, используемые для организации циклов, компонент Memo и его свойства, выполнить контрольные примеры и задания соответствующего варианта.

Контрольный пример 3.1

Составить программу для расчета f (x). Значения N и x вводятся с

клавиатуры. Предусмотреть возможность вывода значения функции в зависимости от x , изменяющегося в диапазоне [x1, x2 ]с заданным шагом h :

f ( x) = N xn .

n =1 n!

Решение.

1.Открыть новый проект Delphi: File – New Application.

2.Установить с помощью Object Inspector следующие свойства компонента

Form1:

Form1.Height = 302

Form1.Wight = 326

Form1.BorderIcons

38

biMaximize = false Form1BorderStyle = bsSingle Form1.Position = poScreenCenter

Form1.Caption = ‘ Контрольный пример 1a’

3. Рассмотрим по отдельности программирование каждого из слагаемых этого примера.

3.1. Вычисление n!. Вводится число n . Переменной f , предназначенной для хранения значения последовательности чисел, присваивается начальное значение, равное единице. Затем организуется цикл, параметром которого выступает переменная i . Если значение параметра цикла меньше или равно n , то выполняется оператор тела цикла, в котором из участка памяти с именем f

считывается предыдущее значение произведения, умножается на текущее значение параметра цикла, а результат снова помещается в участок памяти с именем f . Когда параметр i становится больше n , цикл заканчивается.

f:=1;

for i:=1 to n do f:=f*i;

3.2. Вычисление степени an . Здесь a – вещественное число, которое необходимо возвести в целую положительную степень. Для того чтобы получить целую степень n числа a , нужно умножить его само на себя n раз. Результат будет храниться в участке памяти с именем st . При выполнении очередного цикла из этого участка предыдущее значение будет считываться, умножаться на основание степени a и снова записываться в участок памяти st . Цикл выполняется n раз.

st:=1;

for i:=1 to n do st:=st*x;

3.3. Суммирование. При сложении нескольких чисел необходимо накапливать результат в определенном участке памяти, каждый раз считывая оттуда предыдущее значение суммы и прибавляя к нему следующее слагаемое. Для выполнения первого оператора накапливания суммы из участка памяти необходимо взять такое число, которое не влияло бы на результат сложения. Другими словами, перед началом цикла переменной, предназначенной для накапливания суммы, необходимо присвоить нуль.

39

3.4. Объединив, получим:

st:=1; s:=0; f:=1; for i:=1 to n do begin

st:=st*x; f:=f*i; s:=s+st/f;

end;

4. Расположить на форме следующие компоненты: три компонента Edit, три компонента Label, один компонент Button и один компонент BitBtn. Установить с помощью Object Inspector для них следующие свойства:

Label1.Caption = 'N'

Label2.Caption = 'x'

Label3.Caption = 'Сумма'

Edit1.Text = ''

Edit2.Text = ''

Edit3.Text = ''

Button1.Caption = 'Счет'

BitBtn1.Caption:=’&Закрыть’

5. Для решения задачи запишем обработчик событий Button1.Click, щелкнув на компоненте Button1 (кнопка Счет) два раза левой кнопкой мыши.

Текст соответствующей процедуры имеет вид:

procedure TForm1.Button1Click(Sender: TObject); var n,i:integer;x,s,st,f:extended;

begin n:=StrToInt(Edit1.Text); x:=StrToFloat(Edit2.Text); st:=1; s:=0; f:=1;

for i:=1 to n do begin st:=st*x; f:=f*i; s:=s+st/f;

end;

Edit3.Text:=FloatToStrF(s,ffFixed,7,3);

end;

Переменные, которые необходимы для решения задачи, описаны в соответствующем разделе процедуры TForm1.Button1Click.

6.Запустить проект на компиляцию и выполнение.

7.Задать значения для N =5 , x = 2 и нажать кнопку Счет.

8.Теперь нужно посчитать значение данной суммы на отрезке [x1; x2 ].

Открыть новый проект Delphi: File New Application .

40

9. Установить с помощью Object Inspector следующие свойства компонента

Form1:

Form1.Height = 302

Form1.Width = 326

Form1.BorderIcons biMaximize = false Form1.BorderStyle = bsSingle

Form1.Position = poScreenCenter Form1.Caption = 'Контрольный пример 1-б'

10. Расположить на форме следующие компоненты: четыре компонента Edit,

четыре компонента Label, один компонент Button и один компонент Memo. Установить с помощью Object Inspector для них следующие свойства:

Label1.Caption = 'N'

Label2.Caption = 'x1'

Label3.Caption = 'x2'

Label3.Caption = 'h'

Edit1.Text = ''

Edit2.Text = ''

Edit3.Text = ''

Edit4.Text = ''

Button1.Caption = 'Счет'

Memo1.Lines = ''

Memo1.ScrollBars = ssVertical

11. Для решения задачи запишем обработчик событий Button1.Click,

щелкнув на компоненте Button1 (кнопка Счет) два раза левой кнопкой мыши. Текст соответствующей процедуры имеет вид:

procedure TForm1.Button1Click(Sender: TObject); var x1,x2,x,h,s,st,f:extended; n,i:integer; stroka:string;

begin Memo1.Clear;

n:=StrToInt(Edit1.Text);

x1:=StrToFloat(Edit2.Text);

x2:=StrToFloat(Edit3.Text);

h:=StrToFloat(Edit4.Text);

x:=x1; repeat

st:=1; s:=0; f:=1; for i:=1 to n do begin st:=st*x; f:=f*i; s:=s+st/f;

end;

41

stroka:='f('+FloatToStr(x)+')=

'+FloatToStrF(s,ffFixed,7,3);

Memo1.Lines.Add(stroka);

x:=x+h; until x>x2;

end;

12. Запустить проект на компиляцию и выполнение.

13. Задать значения для N =10 , x1 =1, x2 =10, h = 0.5 и нажать кнопку Счет.

Результат выполнения программы показан на рис. 3.1:

Рис. 3.1. Результат выполнения программы для контрольного задания 3.1

Контрольный пример 3.2

Корень некоторого уравнения находится последовательными приближениями по формуле xn+1 = 4 29 +3xn 2 +8xn . Написать программу для нахождения такого приближения корня, при котором разность по модулю между двумя соседними приближениями не превосходит 106 , а начальное приближение x0 =1.92 . Вывести на экран корень уравнения до 5-го знака и число итераций.

Решение.

1. Открыть новый проект Delphi: File – New Application.

42

2. Установить с помощью Object Inspector следующие свойства компонента

Form1:

Form1.Height = 323

Form1.Wight = 268

Form1.BorderIcons biMaximize = false

Form1BorderStyle = bsSingle Form1.Position = poScreenCenter

Form1.Caption = ‘ Последовательные приближения’.

3. Расположить на форме следующие компоненты: четыре компонента Edit,

четыре компонента Label, один компонент Button. Установить с помощью Object Inspector для них следующие свойства:

Label1.Caption = 'начальное приближение' Label2.Caption = 'решение' Label3.Caption = 'количество итераций'

Label3.Caption = 'Проверка: подстановка в исходное

уравнение'

Edit1.Text = ''

Edit2.Text = ''

Edit3.Text = ''

Edit4.Text = '' Button1.Caption = 'Решение'

4. Для решения задачи запишем обработчик событий Button1.Click, щелкнув

на компоненте Button1 (кнопка Решение) два раза левой кнопкой мыши. Текст соответствующей процедуры имеет вид:

procedure TForm1.Button1Click(Sender: TObject); var x0,x1,eps,f:extended; n:integer;

begin x0:=StrToFloat(Edit1.Text); eps:=1E-6;

x1:=exp(ln(29+3*sqr(x0)+8*x0)*(1/4));

n:=1;

while abs(x0-x1)>eps do begin

x0:=x1;

x1:=exp(ln(29+3*sqr(x0)+8*x0)*(1/4));

n:=n+1;

end;

Edit2.Text:=FloatToStrF(x1,fffixed,10,4); Edit3.Text:=IntToStr(n-1); f:=sqr(sqr(x1))-3*sqr(x1)-8*x1-29; Edit4.Text:=FloatToStrF(f,fffixed,10,6);

43