Jump to content

Record Com Case


Go to solution Solved by pwseo,

Recommended Posts

Posted (edited)

Olá a todos, E minha primeira vez por aqui é estou com duvida meio banal sobre record com case.

Eu sei usar records com variantes mais só de uma maneira, consigo usar assim

program Dados;
uses
 Crt;
type
 TDados=record
  Case D:integer of
 1:(S:integer);
 2:(X:array[1..5] of integer);
  end;
var
 Ds:TDados;
 I:integer;
begin
  writeln('Digite 1 Para Uma Entradas, E 2 Para 5 Entradas.');
  readln(Ds.D);
  ClrScr;
  If Ds.D=1 then
  begin
  writeln('Digite Um Numero.');
  readln(Ds.S);
  end
  else if Ds.D=2 then
  for I:=1 to 5 do
  begin
	 ClrScr;
	 writeln('Digite Um Numero Para A Posição ',I);
	 readln(Ds.X[i]);
  end;
  ClrScr;
  if Ds.D=1 then
  writeln('Resultados ',Ds.S)
  else if Ds.D=2 then
  for I:=1 to 5 do
	 writeln('Resultados ',I,' ',Ds.X[i]);
  readln;
end.

E assim não

TDados:record
  Case integer of
 1:(S:integer);
 2:(X:array[1..5] of integer);
  end;

Omitir a variável do case, e utilizar só o tipo.

Edited by Maou
Posted

Estou começando a aprender pascal, e no help do borland pascal lá esta escrito,

que pode retirar a variável do case e utilizar só o tipo de dado isso que eu não entendi.

Exemplo:

type
 TDados=record
  Case D:integer of
 1:(S:integer);
 2:(X:array[1..5] of integer);
  end;

lá no help estava escrito que era plena mente possível assim

type
 TDados=record
  Case integer of
 1:(S:integer);
 2:(X:array[1..5] of integer);
  end;

Omitindo a variável D e usando só o tipo (integer).

  • Solution
Posted

Maou,

Quando utilizas variant records, ambas as variantes coexistem em toda a execução do programa. Por outras palavras, o campo TDados.S ocupa o mesmo lugar na memória que TDados.X[1]:

program test;

type
 TDados = record
 case integer of
   1: ( S: integer );
   2: ( X: array [1..5] of integer );
 end;

var
 rec: TDados;

begin
 rec.S := 42;
 writeln('rec.X[1] = ', rec.X[1]);
end.

E a execução mostra-nos o seguinte:

~ $ ./test
rec.X[1] = 42

Como se pode ver, definir .S é o mesmo que definir .X[1] mas com outro nome; a localização na memória é a mesma. Esta técnica é óptima quando pretendes ter várias formas de ver os dados de uma determinada estrutura de dados.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.