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

Gurzi

duvida

6 mensagens neste tópico

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link 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