Ir para o conteúdo
Maou

[Resolvido] Record Com Case

Mensagens Recomendadas

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.

Editado por Maou

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.