Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Sem2_Kurs_1_03-1.docx
Скачиваний:
7
Добавлен:
27.08.2019
Размер:
262.99 Кб
Скачать

Лабораторная работа № 3 программирование циклических алгоритмов.

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

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

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

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

Работа с компонентами

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

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

Рис. 1 Окно String List Editor

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

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

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

taCenter – выровнять по центру;

taLeftJustify – выровнять по левому краю;

taRightJustify – выровнять по правому краю.

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

Для очистки содержимого компонента Memo используется метод Clear:

Memo1.Clear.

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

Memo1.Lines.LoadFromFile (const FileName: string) и

Memo1.Lines.SaveToFile (const FileName: string)

класса TStrings.

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

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

Контрольный пример 1. Составить программу для расчета . Значения и вводятся с клавиатуры. Предусмотреть возможность вывода значения функции в зависимости от , изменяющегося в диапазоне с заданным шагом :

.

Решение.

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

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

Form1.Height = 302

Form1.Wight = 326

Form1.BorderIcons

biMaximize = false

Form1BorderStyle = bsSingle

Form1.Position = poScreenCenter

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

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

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

f:=1;

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

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

st:=1;

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

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

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:=’&Закрыть’

Результат показан на рис. 2.

Рис. 2. Вид формы

  1. Для решения задачи запишем обработчик событий 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, и нажать кнопку Счет.

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

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

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

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

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

Результат показан на рис. 4.

рис. 4 Вид формы

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;

stroka:='f('+FloatToStr(x)+')= '+FloatToStrF(s,ffFixed,7,3);

Memo1.Lines.Add(stroka);

x:=x+h;

until x>x2;

end;

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

13. Задать значения для , и нажать кнопку Счет. Результат выполнения программы показан на рис. 5:

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

Контрольный пример 2. Корень некоторого уравнения находится последовательными приближениями по формуле . Написать программу для нахождения такого приближения корня, при котором разность по модулю между двумя соседними приближениями не превосходит , а начальное приближение . Вывести на экран корень уравнения до 5-го знака и число итераций.

Решение.

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

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 = 'Решение'

Результат показан на рис. 6.

Рис.6. Вид формы.

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);

end;

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

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

6. Задать значение начального приближения и нажать кнопку Решение. Результат выполнения программы показан на рис. 7:

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]