pascal变量记录的使用
我需要那些熟悉帕斯卡语的人的帮助 我需要(教师要求)使用变体记录。这些变量记录的定义如下:pascal变量记录的使用,pascal,freepascal,Pascal,Freepascal,我需要那些熟悉帕斯卡语的人的帮助 我需要(教师要求)使用变体记录。这些变量记录的定义如下: Temperature = record case scale : TemperatureScale of celsius : (celsius_value : ScaleCelsius); kelvin : (kelvin_value : ScaleKelvin); end; 根据我在研究这个主题时发现的主要来源,我找不到如何使用变体记录,只有如何声明它 我的主要来源:谷歌搜索(
Temperature = record
case scale : TemperatureScale of
celsius : (celsius_value : ScaleCelsius);
kelvin : (kelvin_value : ScaleKelvin);
end;
根据我在研究这个主题时发现的主要来源,我找不到如何使用变体记录,只有如何声明它
我的主要来源:谷歌搜索(什么也没找到),和
对于那些想知道我必须在实现中使用什么的人,请编辑以下内容:
type
UkPolozka = ^Polozka;
UkHodnota = ^Hodnota;
TypUdaj=(typretez, typcele, typrealne, typlogik, typpole, typobjekt);
VarZaznam = record
case Udaj: TypUdaj of
typretez: (retez: string);
typcele: (cele: word);
typrealne: (realne: single);
typlogik: (logik: boolean);
typpole: (pole: UkHodnota);
typobjekt: (objekt: UkPolozka);
end;
Polozka = record
Nazev: string;
Hodn: VarZaznam;
Dalsi: UkPolozka
end;
Hodnota = record
Hodn: VarZaznam;
Dalsi: UkHodnota
end;
考虑来自的示例记录。我用标签修改了它 标签使用是可选的,通常不使用,也不提供有用的信息。
请注意,第一行输出的半径值与高度值相同-它们共享相同的内存 然后我显式地设置标记(但字段保持不变) 还应注意无标记记录和标记记录的尺寸差异 再次注意-在大多数情况下,程序员不定义或使用标记值。依赖标记可能是不安全的(除非您在分配标记时遵循严格的规则)。我没有设置<代码>矩形> /Cord>TAG,但是程序将零标签视为第一个变体。 只需按名称分配所需字段。只需按名称读取所需字段。对于您的示例
varVarZaznam.retez:='test'代码>
type
TShapeList = (Rectangle, Triangle, Circle, Ellipse, Other);
TFigure = record
case shape: TShapeList of
Rectangle: (Height, Width: Real);
Triangle: (Side1, Side2, Angle: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;
TFigureNoTag = record
case TShapeList of
Rectangle: (Height, Width: Real);
Triangle: (Side1, Side2, Angle: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;
var
Fig: TFigure;
begin
Fig.Height := 5;
Fig.Width := 3;
//default tag is zero = Rectangle
if Fig.shape = Rectangle then
Writeln('Rect ', Fig.Height:3:0, Fig.Width:3:0, Fig.Radius:3:0)
else
Writeln('not Rect');
Fig.shape := Circle;
if Fig.shape <> Rectangle then
Writeln('not Rect');
Writeln('Fig size ', SizeOf(TFigure), ' noTag size ', SizeOf(TFigureNoTag));
Readln;
您没有描述具体的问题。作为有用的变体Realdif记录字段的例子,代码<代码> />代码>代码> Celsius<代码>,变体部分包含<代码> CelsiuSuxValue/Cuth>。如果是kelvin
,则变型零件包含kelvin\u值
。根据变量描述符,变量零件共享多个解释的空间。变量描述符也可以仅指定为类型<代码>大小写布尔值的
@mbo记录的图形类型如何?你是怎么读的?当然这些都包含在你的课程和课本里了。@DavidHeffernan nope。。。不是。。。。breafly老师在3周或更长时间前的课堂上提到了这一点……这似乎是一个很好的例子。。。同样合法的是,我可能需要设置标签,因为我将把它存储在一个大的dinamic结构(老师的要求)的内存中,并用它做一些事情。。。我还需要知道如何设置标签标签只是一个字段。像记录中的任何其他字段一样设置它代码>
Rect 5 3 5
not Rect
Fig size 32 noTag size 24