Условный оператор
Цель: Выработать умение составлять программы, где на определенном этапе производится выбор очередного выполняемого оператора в результате анализа некоторых условий. Рассмотрим данную тему на конкретных примерах. Задание1: Составить программу вычисления выражения Технология выполнения задания Постановка задачи: Создать приложение вычисления значений функции f. Математическая модель представляется так: исходные данные – переменные х, у и z, результат - f, связь между данными и результатом выражается формулой Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 8. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом: var x,y,z,f:real; Begin x:=StrToFloat(Edit1.text); y:=StrToFloat(Edit2.Text); z:=StrToFloat(Edit3.Text); if x>3 then f:=sqr(x)+y+z else if x=3 then f:=x+sqr(y)+z else f:=x+y+sqr(z); Label4.Caption:=FloatToStrF(f,fffixed,6,3); end; Рисунок 8 - Итоговый вид формы Задание2: Найдите максимальное из трех заданных чисел. Технология выполнения задания Постановка задачи: Создать приложение нахождения максимального из трех чисел x,y,z. Математическая модель представляется так: исходные данные – переменные х, у и z, результат – максимальное из исходных данных. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 9. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для примера2 эта часть выглядит следующим образом: var x,y,z:real; Begin x:=StrToFloat(Edit1.Text); y:=StrToFloat(Edit2.Text); z:=StrToFloat(Edit3.Text); if x>y then if x>z then Label4.Caption:='максимальное'+FloatToStrF(x,fffixed,6,3) else Label4.Caption:='максимальное'+FloatToStrF(z,fffixed,6,3) else if y>z then Label4.Caption:='максимальное'+FloatToStrF(y,fffixed,6,3) else Label4.Caption:='максимальное'+FloatToStrF(z,fffixed,6,3) End; Рисунок 9 - Образец размещения компонент на форме Задание3:Вычислить значение функции Технология выполнения задания Постановка задачи: Создать приложение вычисления значений функции y(x). Математическая модель представляется так: исходные данные – переменные х, у, результат - y, связь между данными и результатом выражается формулой Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом: var x,y:real; Begin x:=StrToFloat(Edit1.text); if x>1 then y:=x-1 else if x<-1 then y:=x+1 else y:=0; Label4.Caption:='y='+FloatToStrF(f,fffixed,6,3); end; Таблица 5 - Индивидуальные варианты лабораторной работы №3
Продолжение таблицы 5
Продолжение таблицы 5
Продолжение таблицы 5
Продолжение таблицы 5
1.4 Цикл с предусловием Цель:Умение составлять циклические программы, используя, оператор цикла с предварительным условием. Рассмотрим данную тему на конкретных примерах. Задание1: На интервале Технология выполнения задания Постановка задачи: Создать приложение вычисления значений функции z. Математическая модель представляется так: исходные данные – xn, xk, hx, t, результат – z. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента. На форму установите новый компонент ListBox, который находится на панели Standart, в соответствии с рисунком 10. Рисунок 10 - Образец размещения компонентов на форме Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var x, xn,xk,hx,t:real; s:string; Begin t:=StrToFloat(Edit1.Text); s:=inputbox('ввод данных','xn','0'); xn:=StrToFloat(s); s:=inputbox('ввод данных','xk','0'); xk:=StrToFloat(s); s:=inputbox('ввод данных','hx','0'); hx:=StrToFloat(s); while x<=xk+hx/2 do Begin z:=sin(xn*t); xn:=xn+hx; ListBox1.Items.Add(FloatToStrF(z,ffFixed,5,3)); End; End; Задание2:Вычислить функцию вида для значений аргумента от a до b с шагом h. Технология выполнения задания Постановка задачи: Создать приложение вычисления значений функции y. Математическая модель представляется так: исходные данные – a,b,h, результат – y, условия. Предварительная работа: При решении этой задачи необходимо использовать циклический процесс, в котором переменная х последовательно принимает значения a,a+h,a+2h,…,a+Nh, где a+Nh=b. Первое вычисление функции y(x) следует сделать для значения а, поэтому перед входом в цикл зададим переменной x начальное значение: x:=a; На каждом проходе цикла после вычисления функции значение переменной х должно возрастать на величину h, что может быть обеспечено оператором: x:=x+h; Этот оператор подготавливает аргумент для вычисления следующего значения функции. Цикл должен повторяться до тех пор, пока значение переменной х не превысит b, то есть пока выполняется неравенство Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента. На форму установите новый компонент ListBox, который находится на панели Standart. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose.
procedure TForm1.Button1Click(Sender: TObject); var x,y,a,b,h:real; s:string; Begin s:=inputbox('ввод данных','a','0'); a:=StrToFloat(s); s:=inputbox('ввод данных','b','0'); b:=StrToFloat(s); s:=inputbox('вводданных','h','0'); h:=StrToFloat(s); x:=a; while x<b+h/2 do Begin if (x<1) and (x>=-1) then y:= x/3 else y:=x-0.6667; ListBox1.Items.Add (FloattoStrf(y,fffixed,10,4)); x:=x+h; End; End; Таблица 6 - Индивидуальные варианты лабораторной работы №4
Продолжение таблицы 6
Продолжение таблицы 6
Продолжение таблицы 6
1.5 Цикл с параметром Цель:Умение программировать алгоритмы, связанные с вычислением конечных сумм и произведений, используя оператор цикла с параметром. Рассмотрим данную тему на примерах. Задание1:Составить программу вычисления выражения. Дано натуральное число n и действительное число х. Найти сумму конечного ряда Технология выполнения задания Постановка задачи: Создать приложение вычисления суммы конечного ряда s. Математическая модель представляется так: исходные данные – x, n, результат – s, i- параметр цикла. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента по образцу, приведенного ниже на рисунке 11. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. Рисунок 11 - Образец размещения компонент на форме В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var x,s:real; i,n: integer; Begin n:=StrToInt(Edit1.Text); x:=StrToFloat(Edit2.Text); s:=0; for i:=1 to n do s:=s+(sqr(x)-sin(i*x))/exp(i*ln(x)); Label3.Caption:='сумма ='+FloatToStrF(s,ffFixed,6,3); End; Задание2:Рассмотрим вычисление суммы ряда Технология выполнения задания Постановка задачи: Создать приложение вычисления суммы конечного ряда S. Математическая модель представляется так: исходные данные – x, n, результат – S, k- параметр цикла. Предварительная работа:Общее слагаемое суммы ai (i=1,2,…,n) выражается формулой Запишем рекуррентные соотношения Для начала счета по этим формулам нужно задать значения Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции)
Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 2 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var x,s,a:real; k,n: integer; Begin n:=StrToInt(Edit1.Text); x:=StrToFloat(Edit2.Text); a:=x/sqr(sin(2*x)); s:=a; for i:=2 to n do Begin a:=a*x/sin(2*x); s:=s+a End; Label3.Caption:='сумма ='+FloatToStrF(s,ffFixed,6,3); End; Рисунок 12 - Образец размещения компонент на форме Задание3:Вычислить произведение N!=1×2×3×…×N (N - факториал). Технология выполнения задания Постановка задачи: Создать приложение вычисления факториала N. Математическая модель представляется так: исходные данные – N, результат – f, i - параметр цикла. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 13. Рисунок 13 - Образец размещения компонент на форме Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) втоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы).Для задания 3 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var f,N:real; i: integer; Begin N:=StrToInt(Edit1.Text); f:=1; for i:=2 to N do f:=f*i; Label2.Caption:='N! ='+FloatToStrF(f); End; Таблица 7 - Индивидуальные варианты лабораторной работы №5
Продолжение таблицы 7
Продолжение таблицы 7
1.6 Цикл с постусловием Цель:Научиться программировать циклы с неизвестным числом повторений, используя, оператор цикла с последующим условием. Рассмотрим данную тему на следующих примерах: Задание1:Вычислить для некоторого значения х с заданной точностью Технология выполнения задания Постановка задачи: Создать приложение вычисления суммы бесконечного ряда y. Математическая модель представляется так: исходные данные – x, eps, результат – y, a- слагаемое ряда. Предварительная работа:Обозначим через ак общее слагаемое суммы и найдем рекуррентное соотношение, связывающее ак-1 и ак. Для этого составим отношение: Ясно, что процесс вычисления носит циклический характер: после задания начального элемента суммы а0=1, дальнейшие действия сводятся к многократному вычислению очередного слагаемого и последующему суммированию, то есть нахождению очередного приближения к искомому результату: а0=1, у= а0; а1=а0*х/1, у= а0+а1; а2=а1*х/2, у=а0+а1+а2; и т.д. Этот процесс заканчивается, когда очередное слагаемое удовлетворяет условию: Очевидно, что число повторений этого цикла заранее неизвестно, а его определение равносильно решению поставленной задачи. В подобных случаях можно лишь сформулировать условие, при выполнении которого циклический процесс должен завершиться. Одним из способов программирования таких вычислительных процессов является использование оператора цикла с последующим условием. Это оператор имеет вид: Repeat A1, A2, …, An until B. Здесь repeat и until - служебные слова, А1,А2,…,Аn – последовательность выполняемых в цикле операторов (тело цикла), В – логическое выражение, управляющее повторением цикла. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа:Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 14. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 1 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var x,eps,a,y:real; k: integer; Begin x:=StrToFloat(Edit1.Text); eps:=StrToFloat(Edit2.Text); k:=1; a:=1; y:=a; Repeat k:=k+1; a:=a*x/k; y:=y+a; until abs(a/s)<=eps; Label3.Caption:='частичная сумма'+FloatToStrF(y,ffFixed,6,4); End; Рисунок 14 - Образец размещения компонент на форме Задание2:Вычислить с точностью e>0 сумму бесконечного ряда для выбранного значения 0<х<1: Технология выполнения задания Постановка задачи: Создать приложение вычисления суммы бесконечного ряда s. Математическая модель представляется так: исходные данные – x, eps, результат – s, a- слагаемое ряда. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа:Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 15. Рисунок 15 - Образец размещения компонент на форме Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 2 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var x,eps,a,s:real; k: integer; Begin x:=StrToFloat(Edit1.Text); eps:=StrToFloat(Edit2.Text); k:=1; a:=sqr(x)/2; s:=a; Repeat k:=k+1; a:=power(x,2*k)/2*k; s:=s+a; until abs(a/s)<=eps; Label3.Caption:='частичная сумма'+FloatToStrF(s,ffFixed,6,4); End; Задание3:Вычислить с заданной точностью Технология выполнения задания Постановка задачи: Создать приложение вычисления произведения бесконечного ряда P. Математическая модель представляется так: k - номер очередного сомножителя, P - произведение k сомножителей, eps – требуемая точность вычислений, результат – P. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Рисунок 16 - Образец размещения компонент на форме Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 16. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для задания 3 эта часть выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); var P,eps:real; k: integer; Begin x:=StrToFloat(Edit1.Text); eps:=StrToFloat(Edit2.Text); k:=2; P:=1; Repeat P:=P*(1-2/(k*(k+1))); K:=k+1; until 1/(k*k)<=eps; Label3.Caption:='P='+FloatToStrF(P,ffFixed,6,4); End;
Таблица 8 - Индивидуальные варианты лабораторной работы №6
Продолжение таблицы 8
Продолжение таблицы 8
Продолжение таблицы 8
|