Условный оператор
Цель: Выработать умение составлять программы, где на определенном этапе производится выбор очередного выполняемого оператора в результате анализа некоторых условий. Рассмотрим данную тему на конкретных примерах. Задание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: На интервале с шагом протабулировать функцию , где t - произвольное число. Технология выполнения задания Постановка задачи: Создать приложение вычисления значений функции 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, то есть пока выполняется неравенство В качестве условия повторения цикла целесообразно использовать условие , заведомо выполненное для всех требуемых значений х, так как величина шага h обычно на несколько порядков больше величины тех неточностей в представлении данных о которых шла речь. Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции). Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента. На форму установите новый компонент ListBox, который находится на панели Standart. Для компонента BitBtn1 (кнопка Закрыть) в инспекторе объектов измените свойство Kind – bkClose. Двойным щелчком по компоненту Button1 (кнопка Вычислить) автоматически создается в окне кода стандартная структур. В данную структуру впишите часть программы (у каждого варианта своя индивидуальная часть программы). Для примера 2 эта часть выглядит следующим образом: 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) выражается формулой . Однако использовать эту формулу для расчетов нерационально. Действительно, например, для определения а10 требуется вычислить (sin2x)11. Между тем при нахождении а9 было вычислено значение (sin2x)10, которое достаточно умножить на sin2x, чтобы получить нужную нам степень, а не вычислять ее заново. Для рационального вычисления общего члена конечной суммы, выведем рекуррентное соотношение, связывающее текущее слагаемое суммы с предыдущим. Рассмотрим отношение двух последующих слагаемых аi и ai-1
Запишем рекуррентные соотношения
Для начала счета по этим формулам нужно задать значения Алгоритм решения задачи: запишем алгоритм решения поставленной задачи с помощью блок-схемы (описываем только процедуру вычисления значения функции) Программа: Установите компоненты на форме и измените свойство Caption для каждого компонента в соответствии с рисунком 12. Для компонента 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 и ак. Для этого составим отношение: , из которого получим ак=ак-1*х/к, к=1,2,…. Ясно, что процесс вычисления носит циклический характер: после задания начального элемента суммы а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
|