Maou Posted July 8, 2016 at 04:15 PM Report #597594 Posted July 8, 2016 at 04:15 PM (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 July 8, 2016 at 08:49 PM by Maou
BHAMF Posted July 8, 2016 at 06:05 PM Report #597598 Posted July 8, 2016 at 06:05 PM Não estou conseguindo entender bem o seu programa, tente colocar espaços ou comentários pra ajudar! 🙂 Brenio Hallison A.M. Filho
Maou Posted July 8, 2016 at 10:04 PM Author Report #597599 Posted July 8, 2016 at 10:04 PM 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 pwseo Posted July 9, 2016 at 06:16 PM Solution Report #597605 Posted July 9, 2016 at 06:16 PM 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.
Maou Posted July 9, 2016 at 07:29 PM Author Report #597606 Posted July 9, 2016 at 07:29 PM Obrigado esclareceu muitas coisas pra min.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now