Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Maou

[Resolvido] Record Com Case

Recommended Posts

Maou

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

Share this post


Link to post
Share on other sites
BHAMF

Não estou conseguindo entender bem o seu programa, tente colocar espaços ou comentários pra ajudar! :)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
Maou

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).

Share this post


Link to post
Share on other sites
pwseo

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.

Share this post


Link to post
Share on other sites

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

×

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.