Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 14:46   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию указать возвращаемый тип функции ))

Всем привет, поменьше бед)

Не могу разобраться с премудростями Делфи!
Помещаю функцию и её описание в дополнительный модуль ( дополнительный к модулю в котором находиться основная программа) так вот пока не перемещаю- всё хорошо работает, а если переместить- то Делфи требует определить возвращаемый функцией тип, хотя в коде указано- что это "integer".......в чём ошибка?
вот код этого дополнительного модуля:
Код:
unit br;


interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  pelement= ^telement;
  Telement= record
             infa: integer;
             ukazatel:pelement;
            end;
   TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
   function fg ( r: pelement ; b:integer):integer;
   end;
var Form1: TForm1;
implementation


function fg ( r: pelement ; b:integer):integer; //рекурсивная функция
begin
  if (r=nil)  then begin Result:=0; end;  // условие выхода из рекурсии ( результат преобретает конкретное значение)
  if (r<>nil) and (b=r^.infa) then
  begin
    Result:=1+fg(r^.ukazatel,b);
  end;
  if (r<>nil) and (b<>r^.infa) then   
  begin
    Result:=fg(r^.ukazatel,b);
  end;

end;


end.
(прикладываю архив с "проектом" ))
--------------------------------------------------------------------------
если вопрос не ясен - скажите что пояснить
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 22.04.2010 в 15:54. Причина: не отвечают
vedro-compota вне форума Ответить с цитированием
Старый 22.04.2010, 17:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
type
  pelement= ^telement;
  Telement= record
             infa: integer;
             ukazatel:pelement;
            end;
   TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
   function fg ( r: pelement ; b:integer):integer;
   end;
var Form1: TForm1;
i
из всего этого в дополнительном модуле останется
Код:
   function fg ( r: pelement ; b:integer):integer;
невнимательнов рассмотрел тело функции
должно еще остаться
Код:
type
  pelement= ^telement;
  Telement= record
             infa: integer;
             ukazatel:pelement;
            end;
но форма там совсем ни к чему.
а вот в основном модуле, если остались эти определения, то их надо будет убрать.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 22.04.2010 в 17:22.
evg_m вне форума Ответить с цитированием
Старый 22.04.2010, 17:35   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию дело в том.....

дело в том...... что помимо этой функции в модуле вызываются процедуры, которые являются обработчиками событий (buttonclick) . это для них форма......
но пока без них разберусь.....во.
теперь так: (код дополнительного модуля)
Код:
unit br;


interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  pelement= ^telement;
  Telement= record
             infa: integer;
             ukazatel:pelement;
            end;

function fg ( r: pelement ; b:integer) :integer ;

implementation


function fg ( r: pelement ; b:integer):integer; //рекурсивная функция
begin
  if (r=nil)  then begin Result:=0; end;  // условие выхода из рекурсии ( результат преобретает конкретное значение)
  if (r<>nil) and (b=r^.infa) then
  begin
    Result:=1+fg(r^.ukazatel,b);
  end;
  if (r<>nil) and (b<>r^.infa) then  // если значение очередного элемента списка не совпадает
  begin
    Result:=fg(r^.ukazatel,b);
  end;

end;


end.
---------------------------------------------
теперь делфи говорит, что
Цитата:
[Pascal Error] Unit1.pas(91): E2010 Incompatible types: 'br.pelement' and 'Unit1.pelement'
какая-то несовместимость......
ужас.
(прикладываю то, что получилось "проект v1.0.0.1"))
Вложения
Тип файла: zip 2.zip (300.3 Кб, 7 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 22.04.2010 в 17:42.
vedro-compota вне форума Ответить с цитированием
Старый 22.04.2010, 17:53   #4
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Удалите описание type pelement из Unit1
Hottabych вне форума Ответить с цитированием
Старый 23.04.2010, 09:17   #5
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
Хорошо вот теперь!

точно )) всё работает. Спасибо, Hottabych ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal (тип record, процедуры и функции) 4otenado Помощь студентам 3 23.12.2009 01:00
Помогите определить тип функции RNT Помощь студентам 10 14.06.2009 23:22
Как в функции СЧЁТЕСЛИ указать критерий в виде ссыки на ячейку? CaustiC Microsoft Office Excel 1 05.12.2008 07:16
Указать нужный тип переменной KiDoki Общие вопросы Delphi 3 06.10.2008 17:11
Шаблон функции срвнения. Определить тип. Иллидан Общие вопросы C/C++ 3 30.05.2008 00:44