Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
#1

Итерационные числа.Суммы Ряда.(ООП) - Delphi

19.04.2011, 11:44. Просмотров 717. Ответов 11
Метки нет (Все метки)

Решал и так и сяк выдает нереальные числа, в чем ошибка?
Задание1

Задание2

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
procedure TForm1.btn1Click(Sender: TObject);
begin
form1.close;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,m,t: Extended;
    b,q,w: string;
    i:word;
begin
      x:=StrToFloat(edt1.Text);
     m:=StrToFloat(edt2.Text);
     i:=0;
     a:=1;
     sum:=0;
     y:=Exp(-m*ln(1-x));
     while (Abs(a)>EPS) and (i<max) do
       begin
         Inc(i);
         mnog:=-((-m-(i-1))/i)*x;
         a:=a*mnog;
         sum:=sum+a;
         t:=abs(y-sum);
       end;
       if i<=max then
          begin
                b:=FloatToStrF(sum,ffnumber,10,7);
                q:=FloatToStrF(i,ffnumber,10,7);
                w:=FloatToStrF(t,ffNumber,10,7);
               mmo1.Lines.Add(' приближенное значение функции равно = '+b+' с количеством членов ряда = '+q+' точное значение функции = '+FloatToStrF(y,ffNumber,10,7)+' абсолютное значение = '+w);
          end
          else
          begin
            Mmo1.Lines.Add(' количество ряда превышает максимальное значение. Требуемая точность вычисления недостигнута!');
          end;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,t: Extended;
    b,q,number,result,w: string;
    i:word;
    code: Integer;
begin
   number:=Inputbox('введите число х','Ввод х','0');
      Val(number,x,code);
      y:=1/sqr(1-x);
      i:=0;
      a:=1;
      sum:=0;
      while  (Abs(a)>EPS) and (i<max) do
       begin
         inc(i);
         mnog:=(i+1)*x;
         a:=a*mnog;
         sum:=sum+a;
         t:=(y-sum);
       end;
       if i<=max then
       begin
         b:=FloatToStrF(sum,ffNumber,10,7);
         q:=FloatToStrF(i,ffNumber,10,7);
         w:=FloatToStrF(t,ffNumber,10,7);
         result:=' приближённое значение функции равно '+b+' с количеством членов '+q+' точное значение функции = '+FloatToStrF(y,ffNumber,10,7)+' Абсолютное значение '+w;
         code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
       end
        else
          begin
            result:='количество ряда привышает максимальное значение. Требуемая точность вычисления недостигнута!';
            code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
            end;
 
end;
 
end.
с Уважением,Александр(=

Добавлено через 3 минуты
решал оба задания поочереди в одном коде,подскажите кому не сложно,спасибо заранее ,2 дня бьюсь))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 11:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итерационные числа.Суммы Ряда.(ООП) (Delphi):

ООП.Итерационные числа.Суммы Ряда.Второе задание - Delphi
Задание1 http://www.****************/images/71951.JPG (Первое задание не нужно его решил я и преп засчитал мне его ) Задание2 ...

Вычисление суммы ряда - Delphi
Помогите пожалуйста реализовать функцию выссчитывания ряда в делфи. функцию приложил,пример итогового окна тоже

подсчет суммы ряда - Delphi
написал код. у меня х меняется от 0.1до 0.8.не соображу как сделать чтоб для каждого х с шагом 0.05 в табулированном виде все это выводил....

Подсчет суммы ряда - Delphi
написал программу,но возникает деление на ноль.не знаю почему и как исправить. unit Unit1; interface uses Windows,...

Вычисление суммы ряда - Delphi
Здравствуйте Составил программу для вычисления суммы ряда.Проблема в следующем.При запуске в ответ выводит За 1 итерацию точность не...

Вычисление суммы ряда - Delphi
Помогите, ничего не получается в написании кода. Объяснили на лёгких примерах, а задали сложноватую (для меня) Условие: Вычислите...

11
julia77
84 / 68 / 3
Регистрация: 17.02.2011
Сообщений: 138
20.04.2011, 09:20 #2
Первая ошибка в строке 18. Начальное приближение суммы должно быть 1 ну или a
Delphi
1
sum:=1;
Проверка условия i<=max всегда будет давать положительный ответ даже в том случае, если остаточный член ряда сильно отличается по модулю от eps, т.к. это условия выхода из предыдущего цикла. Условие нужно сделать ( i<=max)and(Abs(a)<EPS).

Строка 19 в вычислении функции y у вас стоит в скобках знак "-". Когда вроде как по задаче должен стоять "+"

Delphi
1
y:=Exp(-m*ln(1+x));
Попробуйте исправить эти ошибки.

Добавлено через 4 минуты
Еще забыла указать ошибку в вычислении множителя
Delphi
1
mnog:=((-m-(i-1))/i)*x;//убрала "-" перед скобкой
1
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
20.04.2011, 15:21  [ТС] #3
спасибо чуть позже отвечу))))

Добавлено через 36 секунд
работает ли(проверить над)
0
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
25.04.2011, 07:53  [ТС] #4
Первая выдает теперь ошибку флоатин бай зиро запрещено,а вторую часть задания?
0
julia77
84 / 68 / 3
Регистрация: 17.02.2011
Сообщений: 138
25.04.2011, 08:22 #5
Запустите пошагово отладчик и определите в какой строке возникает ошибка при каких значения x на каком шаге итерации и выложите код со всеми исправлениями.
1
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
25.04.2011, 08:49  [ТС] #6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.btn1Click(Sender: TObject);
begin
form1.close;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,m,t: Extended;
    b,q,w: string;
    i:word;
begin
x:=StrToFloat(edt1.Text);
m:=StrToFloat(edt2.Text);
i:=0;
a:=1;
sum:=1;
y:=Exp(-m*ln(1+x));
while (Abs(a)<EPS) and (i<=max) do
begin
Inc(i);
         mnog:=((m-(i-1))/i)*x;
         a:=a*mnog;
         sum:=sum+a;
       end;
       begin
         t:=abs(y-sum);
       end;
       if i<=max then
          begin
                b:=FloatToStrF(sum,ffnumber,10,7);
                q:=FloatToStrF(i,ffnumber,10,7);
                  w:=FloatToStrF(t,ffNumber,10,7);
               mmo1.Lines.Add('приближенное значение функции равно'+b+'с количеством членов ряда ='+q+ 'абсолютное значение = '+w+'точное значение функции= '+FloatToStrF(y,ffNumber,10,7));
          end
          else
          begin
            Mmo1.Lines.Add('количество ряда превышает максимальное значение. Требуемая точность вычисления недостигнута!');
          end;
end;
Снова большие числа=(
0
julia77
84 / 68 / 3
Регистрация: 17.02.2011
Сообщений: 138
25.04.2011, 09:10 #7
По поводу второй части. Скажите, это задание было чтобы x вводилось из диалогового окна. Я б для x использовала тот же эдит, что и для первой части или расположила бы на форме еще один эдит. Но в принципе не принципиально. Ошибки по второй части

Строка 52 определение y не соответствует заданной функции (если верно то, что вы выложили как картинку)
нужно
Delphi
1
 y:=1/(1-x);
Начальное приближение sum (строка 55)
Delphi
1
sum:=1;
Не верно определение множителя (строка 59)
Delphi
1
mnog:=(i+1)*x/i;
Про условие, проверяющее результат итерации я уже писала для первой части. ТО что стоит у вас всегда будет давать истину.

Еще что не нравится. Строк и 67 и 31, определение q. У вас переменная i -- целочисленная, а потому для перевода числа в строку уместней использовать функцию IntToStr. Т.е.
Delphi
1
q:=IntToStr(i);
Добавлено через 7 минут
В первом задание вы не ответили при каком x возникает ошибка и на каком шаге итерации (Запустите пошагово).
При вычислении множителя ошибка отсутствует '-' перед m, сравните с тем что писала я.
Delphi
1
mnog:=((-m-(i-1))/i)*x;
Ну и повторюсь за q
Delphi
1
q:=IntToStr(i);
1
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
25.04.2011, 09:23  [ТС] #8
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
procedure TForm1.btn1Click(Sender: TObject);
begin
form1.close;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,m,t: Extended;
    b,q,w: string;
    i:word;
begin
x:=StrToFloat(edt1.Text);
m:=StrToFloat(edt2.Text);
i:=0;
a:=1;
sum:=1;
y:=Exp(-m*ln(1-x));
while (Abs(a)<EPS) and (i<=max) do
begin
Inc(i);
         mnog:=((m-(i-1))/i)*x;
         a:=a*mnog;
         sum:=sum+a;
       end;
       begin
         t:=abs(sum-y);
       end;
       if i<=max then
          begin
                b:=FloatToStrF(sum,ffnumber,10,7);
                q:=FloatToStrF(i,ffnumber,10,7);
                  w:=FloatToStrF(t,ffNumber,10,7);
               mmo1.Lines.Add('приближенное значение функции равно'+b+'с количеством членов ряда ='+q+ 'абсолютное значение = '+w+'точное значение функции= '+FloatToStrF(y,ffNumber,10,7));
          end
          else
          begin
            Mmo1.Lines.Add('количество ряда превышает максимальное значение. Требуемая точность вычисления недостигнута!');
          end;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog: Extended;
    b,q,number,result: string;
    i:word;
    code: Integer;
begin
   number:=Inputbox('введите число х','Ввод х','0');
      Val(number,x,code);
      y:=1/(1-x);
      i:=0;
      a:=1;
      sum:=1;
      q:=IntToStr(i);
      while  (Abs(a)<EPS) and (i<=max) do
       begin
         inc(i);
        mnog:=(i+1)*x/i;
 
         a:=a*mnog;
         sum:=sum+a;
       end;
       if i<=max then
       begin
         b:=FloatToStrF(sum,ffNumber,10,7);
         q:=FloatToStrF(i,ffNumber,10,7);
         result:='приближённое значение функции равно'+b+'с количеством членов'+q+'точное значение функции = '+FloatToStrF(y,ffNumber,10,7);
         code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
       end
        else
          begin
            result:='количество ряда привышает максимальное значение. Требуемая точность вычисления недостигнута!';
            code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
            end;
 
end;
тобишь так вот все будет?,нащет 2го вроде вопросов нет там норм а в первом задании у меня большие числа получаются а преп грил типа чисха должны получаться такие :0,000x4123

Добавлено через 3 минуты
b:=FloatToStrF(sum,ffNumber,10,7);
q:=INToStr(i);вот сюда q сорри первый раз не туда вставил
0
julia77
84 / 68 / 3
Регистрация: 17.02.2011
Сообщений: 138
25.04.2011, 09:33 #9
Писала, чтоб откорректировали условие, вы откорректировали да не там.
Исправляйте строка 20 и 59
Delphi
1
while (Abs(a)>EPS) and (i<=max) do//Здесь условие не нужно было трогать!!!!!!!!!!!
Строка 30 и 67
Delphi
1
if (Abs(a)<EPS) and (i<=max) then// а вот здесь я рекомендую исправить
Строка 23 множитель
Delphi
1
mnog:=((-m-(i-1))/i)*x;//Потеряли минус перед m
Строка 70 и 33
Delphi
1
q:=IntToStr(i);
1
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
25.04.2011, 09:48  [ТС] #10
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
procedure TForm1.btn1Click(Sender: TObject);
begin
form1.close;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,m,t: Extended;
    b,q,w: string;
    i:word;
begin
x:=StrToFloat(edt1.Text);
m:=StrToFloat(edt2.Text);
i:=0;
a:=1;
sum:=1;
y:=Exp(-m*ln(1-x));
while (Abs(a)>EPS) and (i<=max) do
begin
Inc(i);
         mnog:=((m-(i-1))/i)*x;
         a:=a*mnog;
         sum:=sum+a;
       end;
       begin
         t:=abs(sum-y);
       end;
     if (Abs(a)<EPS) and (i<=max) then
          begin
                b:=FloatToStrF(sum,ffnumber,10,7);
                q:=INtToStr(i);
                  w:=FloatToStrF(t,ffNumber,10,7);
               mmo1.Lines.Add('приближенное значение функции равно'+b+'с количеством членов ряда ='+q+ 'абсолютное значение = '+w+'точное значение функции= '+FloatToStrF(y,ffNumber,10,7));
          end
          else
          begin
            Mmo1.Lines.Add('количество ряда превышает максимальное значение. Требуемая точность вычисления недостигнута!');
          end;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog: Extended;
    b,q,number,result: string;
    i:word;
    code: Integer;
begin
   number:=Inputbox('введите число х','Ввод х','0');
      Val(number,x,code);
      y:=1/(1-x);
      i:=0;
      a:=1;
      sum:=1;
while  (Abs(a)>EPS) and (i<=max) do
       begin
         inc(i);
        mnog:=(i+1)*x/i;
 
         a:=a*mnog;
         sum:=sum+a;
       end;
      if (Abs(a)<EPS) and (i<=max) then
       begin
         b:=FloatToStrF(sum,ffNumber,10,7);
         q:=INtToStr(i);
         result:='приближённое значение функции равно'+b+'с количеством членов'+q+'точное значение функции = '+FloatToStrF(y,ffNumber,10,7);
         code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
       end
        else
          begin
            result:='количество ряда привышает максимальное значение. Требуемая точность вычисления недостигнута!';
            code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
            end;
 
end;
так???????

Добавлено через 1 минуту
mnog:=((m-(i-1))/i)*x;
ну и - перед m

Добавлено через 3 минуты
Сорри за флуд вот вроде все работает спасибо вам башое)))))
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
procedure TForm1.btn1Click(Sender: TObject);
begin
form1.close;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog,m,t: Extended;
    b,q,w: string;
    i:word;
begin
x:=StrToFloat(edt1.Text);
m:=StrToFloat(edt2.Text);
i:=0;
a:=1;
sum:=1;
y:=Exp(-m*ln(1+x));
while (Abs(a)>EPS) and (i<=max) do
begin
Inc(i);
         mnog:=((-m-(i-1))/i)*x;
         a:=a*mnog;
         sum:=sum+a;
       end;
       begin
         t:=abs(sum-y);
       end;
     if (Abs(a)<EPS) and (i<=max) then
          begin
                b:=FloatToStrF(sum,ffnumber,10,7);
                q:=INtToStr(i);
                  w:=FloatToStrF(t,ffNumber,10,7);
               mmo1.Lines.Add('приближенное значение функции равно'+b+'с количеством членов ряда ='+q+ 'абсолютное значение = '+w+'точное значение функции= '+FloatToStrF(y,ffNumber,10,7));
          end
          else
          begin
            Mmo1.Lines.Add('количество ряда превышает максимальное значение. Требуемая точность вычисления недостигнута!');
          end;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
 
const EPS: Extended=1e-6;
      max: Word= 50;
var a,x,y,sum,mnog: Extended;
    b,q,number,result: string;
    i:word;
    code: Integer;
begin
   number:=Inputbox('введите число х','Ввод х','0');
      Val(number,x,code);
      y:=1/(1-x);
      i:=0;
      a:=1;
      sum:=1;
while  (Abs(a)>EPS) and (i<=max) do
       begin
         inc(i);
        mnog:=(i+1)*x/i;
 
         a:=a*mnog;
         sum:=sum+a;
       end;
      if (Abs(a)<EPS) and (i<=max) then
       begin
         b:=FloatToStrF(sum,ffNumber,10,7);
         q:=INtToStr(i);
         result:='приближённое значение функции равно'+b+'с количеством членов'+q+'точное значение функции = '+FloatToStrF(y,ffNumber,10,7);
         code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
       end
        else
          begin
            result:='количество ряда привышает максимальное значение. Требуемая точность вычисления недостигнута!';
            code:=Application.Messagebox(PChar(result),'Ответ',MB_OK);
            end;
 
end;
0
specnazkin
-13 / 2 / 0
Регистрация: 18.11.2010
Сообщений: 36
02.05.2011, 12:34  [ТС] #11
первую часть препод засчитал а вторую нет,в чем ошибка подскажите кому не сложно,спасибо(=
0
julia77
84 / 68 / 3
Регистрация: 17.02.2011
Сообщений: 138
03.05.2011, 15:53 #12
Александр, у вас ошибка не в решение, а в задании. Проверьте еще раз второе задание. Все дело в том, что представленное разложение в ряд не подходит для заданной функции. Возможно вы потеряли квадрат в знаменателе исходной функции, либо же разложение в ряд должно быть другим. (У вас первый ряд носит общий характер, а второй ряд -- частный, чтобы убедиться что во втором ряде ошибка, подставьте эти частные значения m из второго ряда в первый ряд)
1
03.05.2011, 15:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 15:53
Привет! Вот еще темы с ответами:

Вычисление суммы ряда - Delphi
Составить две программы: - программу вычисления суммы первых n членов последовательности (k=1,2,3..,n); - программу...

Вычисление суммы ряда - Delphi
Помогите решить вот эту задачку. Не могу разобраться с факториалом и как его здесь использовать. Переделывал код постоянно и от этого...

Вычисление суммы ряда - Delphi
Для заданного положительного епсилон=10^(-6)(описывается как константа)и заданного х и m(вводится с клавиатуры) вычислить сумму ряда с...

Вычисление суммы ряда - Delphi
Для заданных значений ε&gt;0 и x вычислить сумму ряда с точностью ε. Суммирование ряда завершить, если модуль очередного члена ряда не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru