1_6 (Delphi. Лабы. Много неизвестных вариантов и примеров)
Описание файла
Файл "1_6" внутри архива находится в папке "Delphi. Лабы". Документ из архива "Delphi. Лабы. Много неизвестных вариантов и примеров", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. .
Онлайн просмотр документа "1_6"
Текст из документа "1_6"
ЗАДАЧА 1.6.пример
1)Условие задачи: Вычислить сумму бесконечного ряда с точностью eps=0.001. Ряд сходится при | x| < 1.
При вычислении очередного члена ряда использовать рекуррентное соотношение.
2а) Используемые компоненты
Имя компонента (Name) | Для чего используется | Примечание |
Form1 | Для размещения компонент | |
Label1 | Для размещения текста ‘ Исходные данные ’ | |
Label2 | Для размещения текста ‘ Результаты ’ | |
Label3 | Для размещения текста ‘ |x| >1, введите снова ’ | |
Label4 | Для размещения текста ‘ i>nmax ’ | |
StringGrid1 | Для ввода исходных данных | RowCount=2, ColCount=3 В верхней строке ( ‘шапке’ ) – x eps nmax |
StringGrid2 | Для вывода результатов | RowCount=2, ColCount=3 В верхней строке ( ‘шапке’ ) – x sum i |
Button1 | Для запуска проекта на решение | |
Button2 | Для очистки всех компонент | |
Button3 | Для занесения тестовых исходных данных в таблицу StringGrid1 |
2в) Таблица событий
Имя компонента (Name) | Название события | Описание события | Реакция на событие | Имя соответствующей процедуры – обработчика события |
Form1 | OnActivate | Активизация формы | Заполнение ‘шапок’ таблиц | TForm1Activate |
Button1 | OnClick | Щелчок по мышке | Решение задачи c выводом результата | TForm1.Button1Click |
Button2 | OnClick | Щелчок по мышке | Очистка компонент | TForm1.Button2Click |
Button3 | OnClick | Щелчок по мышке | Занесение тестовых исходных данных в таблицу StringGrid1 | TForm1.Button3Click |
3) procedure TForm1.Button1Click : Таблица данных
Вид данного | Обозна-чение | Смысл | Тип | Примечание |
Исходные данные | x | Аргумент | Веществ. (real) | | x | < 1 |
eps | Точность вычисления суммы ряда | Веществ. (real) | ||
nmax | Предельно допустимое кол-во суммируемых членов ряда | Целое (Integer) | ||
Результирующие данные | sum | Сумма ряда | Веществ. (real) | |
Промежуточные данные | i | Порядковый номер текущего члена ряда | Целое (Integer) | |
T | Текущий член ряда | Веществ. (real) | ||
c | Коэффициент для вычислениия T | Веществ. (real) |
4)Тесты
4а)Аномалии: 1) | x| > 1 2) i > nmax
4б) Тесты
№ пп | Что проверяется | Значения исходных данных | Ожидаемый результат |
1 | Реакция программы при |x|>=1 | x=2,5 | Текст ‘| x| >= 1, введите снова' |
2 | Реакция программы при i >nmax | nmax =1, eps = 0.01, x = 0.5 | Текст ‘i>nmax’ |
3 | 1 > x > 0, i < nmax | x = 0.9, eps = 0.01, nmax =50 | х=…, sum=…, i =… |
4 | 0 > x > -1, i < nmax | x = - 0.9, eps = 0.01, nmax =50 | х=…, sum=…, i =… |
5) Вывод формулы c = (i-ый член ряда ) / ( (i – 1)-ый член ряда ) =
6)Алгоритм
Начало ввод x если | x| < 1 то ввод nmax, eps i :=1 T := Первый текущий член ряда sum := T (в некоторых задачах 1+ T) цикл i := i + 1 c :=… T := c* T sum := sum + T до ( i = nmax или |T| < eps ) конец цикла если ( |T| < eps ) то вывод x, sum, i иначе вывод ‘ i > nmax ’ конец если иначе вывод “| x| > 1, введите снова “ конец если конец |
Пример 1:
n! = 1 * 2 * 3 * … (n-2) * (n-1) * n = (n-1)! * n = (n-2)! * (n-1) * n = (n-3)! * (n-2) * (n-1) * n и т.д.
(2n)! = 1*2*3* … (2n) = 1*2*3* … * (2n -3)*(2n -2)*(2n -1)*(2n) = (2n-1)! *(2n)= (2n-2)! *(2n-1)*(2n)= . . .
(2n + 2)! = 1*2*3 * … (2n + 2) = 1*2*3* …*(2n -1)*(2n )*(2n + 1)*(2n + 2) = (2n-1)! * (2n )*(2n + 1)*(2n + 2)
(2n-1)!/ (2n + 2)! = (2n-1)! / [(2n-1)! * (2n ) * (2n + 1) * (2n + 2)] = 1 / [(2n ) * (2n + 1) * (2n + 2)]
Пример 2:
Ряд |
1 – 2*x3 / 4! + 3*x4 / 8! - . . . + (-1)k(i+1)*xk+2 / (4k)! + . . . |
k-ое слагаемое T = (-1)k(i+1)*xk+2 / (4k)!
Tпри k=i = (-1)i *(i +1)*x i+2 / (4i)!
Tпри k= i-1= (-1)(i-1) *((i-1) +1)*x (i-1)+2 / (4(i-1))! = (-1)i-1 *(i-1 +1)*x i-1+2 / (4i-4)! = (-1)i-1 * i *x i +1 / (4i-4)!
c = Tпри k=i / Tпри k= i-1 = ( (-1)i *(i +1)*x i+2 /(4i)! ) / ( (-1)i-1 * i *x i +1 / (4i-4)! ) = (-1)* (i +1)*x* (4i-4)! / ( i* (4i)! ) =
= - ( x*(i +1) / i ) * ( (4i-4)! /(4i)! ) = - x * (i +1) / ( i * (4i)*(4i-1)*(4i-2)*(4i-3) ), т.к.
(4i)! = 1 *2 *… * (4i - 4) * (4i - 3) * (4i - 2) * (4i - 1) * (4i) = (4i - 4)! * (4i - 3) * (4i - 2) * (4i - 1) * (4i)
Начало
ввод x
если | x| < 1 то
ввод nmax, eps
i :=1
T := – 2*x3 / (1*2*3*4)
sum := 1+T
цикл
i := i + 1
c := - x * (i +1) / ( i * (4i) (4i-1) (4i-2) (4i-3))
T := c* T
sum := sum + T
до( i = nmax или |T| < eps )
конец цикла
если ( |T|<eps) то
вывод x, sum, i
иначе
вывод ‘i>nmax’
конец если
иначе
вывод ‘| x| > 1, введите снова ‘
конец если
конец
Пример 3:
Ряд |
X3 / (1*3) + x5 / (1*3*5) + x7 /(1*3*5*7) + . . . + * x2k+1 / (1*3*5*. . .*(2k+1)) + . . . |
Tпри k=i = x2i+1 / (1*3*5*. . .*(2i+1))
Tпри k= i-1= x2(i-1)+1 / (1*3*5*. . .*( 2(i-1) +1) ) = x2i-2+1 / (1*3*5*. . .*( 2i-2+1) )= x2i -1 / (1*3*5*. . .*( 2i - 1) )
c = Tпри k=i / Tпри k= i-1 = x2i+1 / (1*3*5*. . .*(2i+1)) / [x2i -1 / (1*3*5*. . .*( 2i - 1) )] =
= x2 * (1*3*5*. . .*( 2i - 1) ) / (1*3*5*. . .*( 2i + 1) ) = x2 / ( 2i + 1), т.к.
1*3*5*. . .*( 2i + 1) = 1*3*5*. . . *( 2i -3) *( 2i - 1) *( 2i + 1)
Пример 4:
Ряд |
x(1/3! + 1/5!) + x2(1/5! + 1/7!) + … + xi(1/(2i+1)! + 1/(2i+3)!)+ … |
Tпри k=i = T1при k=i + T2при k=i, T1при k=i = xi /(2i+1)!, T2при k=i = xi/(2i+3)!) ,
T1при k=i = c1* T1при k=i-1
T2при k=i = c2* T2при k=i-1
Некоторые обработчики событий
procedure TForm1.Activate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0, 0]:= ' x ';
Cells[1, 0]:= ' eps';
Cells[2, 0]:= ' nmax ';
end;
with StringGrid2 do
begin
Cells[0, 0]:= ' x ';
Cells[1, 0]:= ' sum';
Cells[2, 0]:= ' i ';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var j: integer;
begin
Label3.caption:= ' ';
Label4.caption:= ' ';
For j :=1 to 3 do
begin
StringGrid1.Cells[j-1, 1]:= ' ';
StringGrid2.Cells[j-1, 1]:= ' ';
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0, 0]:= ' 0,9 ';
Cells[1, 0]:= ' 0,0001';
Cells[2, 0]:= ' 50 ';
end;
end;