Pascal функция возвращающая структурный тип

balera1111

возможно ли ето?
(в лоб ето не делаеться но может есть какие-то искуственные методы)
P.S.
может ето както поможет
 
Type
  Complex = ^Cmpxnum;
  Cmpxnum = Record
    RE_part,IM_part:Real;
    Tempsto:Boolean;
  End;
Var
  P:Complex;
  NR,NI,NRE,NIM,T:Real;
Procedure CPERM(N:Complex);
{to make complex number permanent}
Begin
  N^.Tempsto := False
End;
Procedure CERASE(N:Complex);
{to release temporary complex variables}
Begin
  IF N^.Tempsto then
    Dispose(N);
End;
Function CMPLX(R,I:Real): Complex;
{to create complex number with cartesian coordinates}
Begin
  NEW(P);
  P^.RE_part := R;
  P^.IM_part := I;
  P^.Tempsto := True;
  CMPLX := P
End;
Function RE(N:Complex): Real;
{returns real part of complex number}
Begin
  RE := N^.RE_part
End;
Function IM(N:Complex): Real;
{returns imaginary part of complex number}
Begin
  IM := N^.IM_part
End;

Ivan8209

Нет, невозможно, используй переменные, изменяемые параметры,
или создавай динамические структуры в куче.
А ещё в паскале не бывает фигурных скобок, не надо без нужды
использовать компиляторо-зависимые расширения.
---
...Я работаю антинаучным аферистом...

Andbar

А ещё в паскале не бывает фигурных скобок, не надо без нужды
использовать компиляторо-зависимые расширения.
С этого места поподробнее. Это где такой компилятор, который фигурные скобки не воспринимает как коментарий?

yolki

компилятор какой?
FPC/Delphi:

type
MyType=record
x: Double;
y: Integer;
end;
function DoSomething(bla-blabla):MyType;
begin
...

...
Result.x:=...;
Result.y:=...;
end;

замечательно работает..
Что за дурацкая реализация комплексных чисел? зачем указатели?
Паскаль отличный (от других ) язык - позволяет сделать ПОЧТИ ВСЁ без указателей.
зачем изобретать велосипед?
в дельфях есть поддержка комплексных чисел. (VarComplex...)
в 2005 дельфе можно определять операторы для классов.
fpc имеет встроенный Complex, поддержка операторов для классов у него была ещё году эдак в 2000.
это к тому, что вполне наглядным получается код:

var
z,c: Complex;
begin
..
z:=c*c+2*Complex(0,1);
..
end;

zorin29

А ещё в паскале не бывает фигурных скобок, не надо без нужды
использовать компиляторо-зависимые расширения.

Наглая ложь

Pascal (ISO 7185:1990)

6.1.8 Token separators
Where a commentary shall be any sequence of characters and separations of lines, containing neither
} nor * the construct
( '{' | '(*' ) commentary ( '*)' | '}' )
shall be a comment if neither the { nor the (* occurs within a character-string or within a commentary.
NOTES
1 A comment may thus commence with { and end with * or commence with (* and end with }.
2 The sequence (*) cannot occur in a commentary even though the sequence {) can.

Olenenok

ты турбопаскалём штоле пользуешься?

balera1111

может ты и прав но мне сейчас интересно можно ли ето реализоватьь на паскале
а если можно то как

agaaaa

а в чём проблема передать структуру как var?

balera1111

проблема в том что в раскале функция не может возвращать структурный тип данных
но я думаю что ето можно сделать при поможи динамических параметров в куче
вот и хочу узнать как ето можно сделать или может есть еще какой путь
но ответа пока не нашел

vall

а в чём проблема? пусть функция возвращает указатель на структуру и всё.

yolki

проблема в том что в раскале функция не может возвращать структу
нужно говорить
проблема в том что в турбопаскале функция не может возвращать структу
может, лучше нормальный компилятор,а?
что тогда мешает передавать результат через var-аргумент? писанины побольше да, но на рухляди бывает без бубна и не уедешь..

balera1111

а в чём проблема? пусть функция возвращает указатель на структуру и всё.

если скажешь как ето реализовать буду благодарен

yolki

у тебя же в первом посте так сделано.. разве не работает?

PStruct=^TStruct;

TStruct=record
a,b: Integer;
end;

function CreateStruct(a,b:Integer):PStruct;
var res: PStruct;
begin
Res:=GetMem(SizeOf(TStruct;
Res^.a:=a;
Res^.b:=b;
CreateStruct:=Res;
end;

balera1111

ща покопаюсь спасибо может заработоет

balera1111

Все ок всем спасибо

elenangel

кстати по теме треда. возвращать указатель на структуру на куче в паскале это конечно замечательно, а кто мусор собирать будет? в конце концов 640 кбайт это не много и если будет какойнить цикл с итерациями в комплексных числах память просто закончится, так что придется выбирать или человеческую форму записи типа
 
result := add(a,b);
result := mul(add(result,xsub(b,complex(1,0;
{ну не совсем по человечески, но для турбо это помоему предел удобства:) }

или временные переменные и некрасивую запись, зато без утечки памяти
  
add(a,b,result);
{bla-bla...}
dispose(result);
dispose(a);
dispose(b);
Оставить комментарий
Имя или ник:
Комментарий: