Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
1

ошибка во внешней процедуре

28.04.2013, 10:36. Показов 1675. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно для данной программы написать внешнюю процедуру или функцию ( программа вычисляет сумму ряда с требуемой точностью (|x|<1 и e вводятся): ln(1+x)= x-x^2/2 + x^3/3 - x^4/4 ...)) :

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
    x,e,m, f: Real;
begin
  if (Length(Edit1.Text) = 0) or
     (Length(Edit2.Text) = 0)
    then Label2.Caption := ''
    else begin
      x := StrToFloat(Edit1.Text);
      e := StrToFloat(Edit2.Text);
        f := ln(1 + x);
          i := 1;
          m := 0;
          while (abs(f - m) > e)  do begin
            m := m + (Power(-1, i + 1)*power(x,(i)))/i;
            i := i + 1;
          end;//while
       Label2.Caption := FloatToStr(m);
    end;
end;
пишу такую процедуру :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure Summa_Ryada ;
var i: Integer;
    x,e,m, f: Real;
    begin
      x := StrToFloat(Form1.Edit1.Text);
      e := StrToFloat(Form1.Edit2.Text);
        f := ln(1 + x);
          i := 1;
          m := 0;
          while (abs(f - m) > e)  do begin
            m := m + (Power(-1, i + 1)*power(x,(i)))/i;
            i := i + 1;
          end;//while
         Form1.Label2.Caption := FloatToStr(m);
    end;
в строке " m := m + (Power(-1, i + 1)*power(x,(i)))/i; " выдает ошибку " [Error] Unit1.pas(40): Undeclared identifier: 'Power'". Причем если не создавать внешнюю процедуру программа работает правильно. что не так я делаю?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2013, 10:36
Ответы с готовыми решениями:

Ошибка в процедуре
Создал простенькую процедуру. procedure spravka; var f: TextFile; line: string; begin...

Ошибка в процедуре
procedure TForm1.btn3Click(Sender: TObject); var q, i,g:Integer; begin...

Ошибка в процедуре.
Эта процедура должна из заданного массива брать и сортировать числа по возрастанию и...

Ошибка в процедуре: '(' expected but ',' found
программа не доделана, но вылезает ошибка : Project2.dpr(40): '(' expected but ',' found и на всех...

13
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
28.04.2013, 10:39 2
Модуль Math подключен?
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
28.04.2013, 10:42  [ТС] 3
эмм, не знаю))) как это проверить и исправить если не подключен?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.04.2013, 10:51 4
Цитата Сообщение от gorfil Посмотреть сообщение
Модуль Math подключен?
Если б он не был подключен - программа не компилировалась бы и без выноса вычислений в отдельную процедуру. Но самое интересное - это то, что Power тут вообще не нужен, без него прекрасно вычисляется сумма ряда.
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
28.04.2013, 10:52  [ТС] 5
Цитата Сообщение от UI Посмотреть сообщение
Если б он не был подключен - программа не компилировалась бы и без выноса вычислений в отдельную процедуру. Но самое интересное - это то, что Power тут вообще не нужен, без него прекрасно вычисляется сумма ряда.
почему не нужен, если у нас х возводится в степень?
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
28.04.2013, 10:57 6
Цитата Сообщение от UI Посмотреть сообщение
Если б он не был подключен
Под внешней процедурой может подразумеваться и вынос ее в отдельный модуль.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.04.2013, 10:59 7
Цитата Сообщение от Genbl4 Посмотреть сообщение
почему не нужен, если у нас х возводится в степень?
Потому что не нужен. Возведение в степень - это последовательное домножение числителя на X, правда? Вот и присваивай числитель изначально 1, и домножай на X на каждой итерации. И еще на (-1), чтобы и от второго Power-а избавиться:

Delphi
1
2
3
4
5
6
7
num := -1; s := 0;
i := 1;
repeat
  num := - num * X;
  s := s + num / i;
  inc(i);
until abs(num / i) < e;
И зачем нужно было возведение в степень?
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
28.04.2013, 11:21  [ТС] 8
Цитата Сообщение от UI Посмотреть сообщение
И зачем нужно было возведение в степень?
возведение нужно было для того что бы знак чередовался "-" и "+". дело еще в том, что мне нужно написать процедуру для ГОТОВОЙ программы, т.е. в том виде в котором у меня есть, просто вынести ее во внешнюю и все.


При подключении модуля math ошибка исчезает, но появляется новая, в конце внешней процедуры делфи просит поставить "." ('.' expected but ';' found), если ее поставить то появляется опять ошибка "[Warning] Unit1.pas(46): Text after final 'END.' - ignored by compiler".
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
28.04.2013, 11:49 9
Это не ошибка, а предупреждение о том, что любой текст после "END." компилятором игнорируется.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.04.2013, 12:21 10
Цитата Сообщение от Genbl4 Посмотреть сообщение
т.е. в том виде в котором у меня есть, просто вынести ее во внешнюю и все
То есть, из одной плохой программы сделать вторую? Спасибо, таких программ и так полно, не надо плодить их больше и больше.
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
28.04.2013, 13:13  [ТС] 11
Цитата Сообщение от gorfil Посмотреть сообщение
Это не ошибка, а предупреждение о том, что любой текст после "END." компилятором игнорируется.
это понятно, почему тогда если поставить ";" делфи просит поставить ".", а поставив "." игнорирует весь текст после запятой?? как это исправить?
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure Summa_Ryada(Sender: TObject);
var i: Integer;
    x,e,m, f: Real;
    begin
      x := StrToFloat(Form1.Edit1.Text);
      e := StrToFloat(Form1.Edit2.Text);
        f := ln(1 + x);
          i := 1;
          m := 0;
          while (abs(f - m) > e)  do begin
            m := m + (Power(-1, i + 1)*power(x,(i)))/i;
            i := i + 1;
          end;//while
         Form1.Label2.Caption := FloatToStr(m);
    end;
 
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    if (Length(Edit1.Text) = 0) or
     (Length(Edit2.Text) = 0)
    then Form1.Label2.Caption := '' else begin
 
    Summa_Ryada;
     end;
end;
end;
end.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
28.04.2013, 13:19 12
Потому что у тебя с количеством Ендов напутано.
0
0 / 0 / 0
Регистрация: 20.04.2013
Сообщений: 48
28.04.2013, 13:24  [ТС] 13
Цитата Сообщение от gorfil Посмотреть сообщение
Потому что у тебя с количеством Ендов напутано.
где, в " procedure TForm1.Button1Click(Sender: TObject);" ?? там да, вижу, только дело в том, что делфи просит поставить точку после последнего end в " procedure Summa_Ryada;" и дальше не идет, а поставив точку пишет что все после этого энда игнорируется и ничего опять же не происходит
0
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
28.04.2013, 13:47 14
Учись писать структурировано, а то будешь всё время с такими ошибками встречаться (например, закрывающий end должен находиться под открывающим begin'ом)

Вот немного поправил ошибки с end'ами, кстати посмотри, как нужно объявлять процедуру:
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
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Summa_Ryada;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure Tform1.Summa_Ryada;
var i: Integer;
    x,e,m, f: Real;
    begin
      x := StrToFloat(Form1.Edit1.Text);
      e := StrToFloat(Form1.Edit2.Text);
        f := ln(1 + x);
          i := 1;
          m := 0;
          while (abs(f - m) > e)  do
            begin
              m := m + (Power(-1, i + 1)*power(x,(i)))/i;
              i := i + 1;
            end;//while
         Form1.Label2.Caption := FloatToStr(m);
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    if (Length(Edit1.Text) = 0) or (Length(Edit2.Text) = 0) then
      Form1.Label2.Caption := ''
    else
      begin
        Summa_Ryada;
      end;
end;
 
 
end.
Только код не откомпилится, останется ошибка связанная с power, я не понял для чего ты его используешь?
0
28.04.2013, 13:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2013, 13:47
Помогаю со студенческими работами здесь

Ошибка EAccessViolation в своей процедуре
Есть массив объявленный глобально, в обычных процедурах с ним можно делать что угодно... Когда...

Ошибка при процедуре из DLL
Проблема за проблемой... Прога загружает DLL, но при нажатии на кнопку (при котором...

Объекты, ошибка в процедуре ReadLn
есть объект: type TextFile=File of char; // &lt;--- TBase_of_Students=class Base:array of...

Ошибка в процедуре: Undeclared identifier: 'Label1'
Друзья, добрый день! Подскажите, пожалуйста, почему выдает ошибку? Пытаюсь написать процедуру...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru