Jump to content
Sign in to follow this  
Gurzi

duvida

Recommended Posts

Gurzi

Pessoal surgiu-me uma dúvida um pouco confusa que é a seguinte:

- Quando a gente usa o ciclo FOR os arrays tem um indice : pascal[1] por exemplo

entao FOR i := 1 to 3 aqui a variavel pascal pode assumir varios valores mas pk tem la o indice[1] que vai aumentando até ao 3 mas nos records:

FOR I:= 1 TO QUANTOS DO

BEGIN

WRITELN('NOME DO PRODUTO : ');

READLN(NUMB.NOME);

WRITELN('PRECO DO PRODUTO : ');

READLN(NUMB.PREXO);

WRITELN('QUANTIDADE DO PRODUTO : ');

READLN(NUMB.QUANTIDADE);

END;

como é que o programa sabe qual o valor que ta em numb.nome quando o i é 2 ?se n tem numb.nome ?

Share this post


Link to post
Share on other sites
satanuke

Vamos lá a ver se eu percebi.

Tens um record definido que é qualquer coisa assim:

type
TProduto = record
nome:string;
prexo:Real;
quantidade:integer;
end;

E tens um array desse tipo não é?

var
 produtos : array[1..10] of TProduto;

O teu problema é conseguir aceder a cada posição do array?

Existem 2 formas de fazer isto.

A primeira é aceder directamente á posição do array :

   for i:=0 to quantos do
  begin
     WRITELN('NOME DO PRODUTO : ');
     READLN(produtos[i].NOME);
     WRITELN('PRECO DO PRODUTO : ');
     READLN(produtos[i].PREXO);
     WRITELN('QUANTIDADE DO PRODUTO : ');
     READLN(produtos[i].QUANTIDADE);
  end;

A segunda é declarando uma variavel temporaria, que creio que é aquilo que tas a tentar fazer.

Declaras a variavel :

var
numb:TProduto;

Depois em cada inicio do cliclo for associas a variavel á posicao do array:

   for i:=0 to quantos do
  begin
     numb:=produtos[i];
     WRITELN('NOME DO PRODUTO : ');
     READLN(NUMB.NOME);
     WRITELN('PRECO DO PRODUTO : ');
     READLN(NUMB.PREXO);
     WRITELN('QUANTIDADE DO PRODUTO : ');
     READLN(NUMB.QUANTIDADE);
  end;

Penso que é esse o teu problema, certo?

Share this post


Link to post
Share on other sites
Gurzi

era mais a cena de num record

type numb = record

nome : string ;

end;

depois como é que posso por isto numa funçao for?

tenho que por tb assim ?

for i := 1 to 2 do

writeln('qual é o seu nome');

readln(nome);

só queria saber se uma variavel dentro de um record neste caso "nome" pode assumir mais que um vallor

Share this post


Link to post
Share on other sites
satanuke

Um record não é um array, nem sequer uma variavel.

Um record é um registo e neste caso é definido como sendo um tipo.

A unica maneira de aceder a um tipo é declarando uma variavel desse tipo.

Resumindo, não podes ler valores directamente para dentro de um record mas sim para uma variavel desse tipo, percebes?

Share this post


Link to post
Share on other sites
Gurzi

então isto é "ilegal" ?

type vendas : record

nome : string;

end;

For i:= 1 to 3 do

begin

writeln('Qual é o nome do produto');

readln(nome);

end;

isto é ilegal ? por o em nome ?

Share this post


Link to post
Share on other sites
satanuke

Eu tou a tentar dizer que nunca podes aceder a uma variavel directamente no record. Tens que declarar uma variavel fora do record mas que seja do novo tipo de dados que definiste no record e então podes aceder a essa variavel.

Encontrei este manual no google que te deve dar alguma ajuda, porque acho que que não me tou a conseguir explicar.

http://www.lsd.ic.unicamp.br/projetos/e-lane/introPascal/aula8.html

O teu código deveria ser :

 type 
  TVenda = record
      nome : string;
  end;

var
vendas : array[1..3] of TVenda;

begin
 For i:= 1 to 3 do
   begin
     writeln('Qual é o nome do produto');
     readln(vendas[i].nome);
   end; 
end.

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
Sign in to follow this  

×
×
  • 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.