Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Külhkamp

duvida: salvar no arquivo em posições diferente apartir de um vetor

Recommended Posts

bem o objetivo é, criar um vetor do tipo tcliente(record: cod,nome e idade), onde tenho que preencher cada registro e cada espaço do vetor e salvar no pc em arquivo .txt, onde que na mesma pasta deve se encontrar outro programa em console e ao iniciar-se, apareça os respectivos valores inserido no primeiro console.

fiz o cod da seguinte maneira:

prog1:

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

tpessoas=record

cod:text;

nome:text;

idade:text;

end;

var

pessoas:array[1..3] of tpessoas;

x,y,z:string;

i:integer;

ocod,onome,oidade:text;

begin

for i:=1 to 3 do

begin

assign(pessoas.cod ,'cod.txt');

assign(pessoas.nome ,'nome.txt');

assign(pessoas.idade ,'idade.txt');

{$I-}

append(pessoas.cod);

append(pessoas.nome);

append(pessoas.idade);

if ioresult <>0 then

rewrite(pessoas.cod);

writeln('digite o codigo do cliente:');

readln(x);

write(pessoas.cod,x+'_');

if ioresult <>0 then

rewrite(pessoas.nome);

writeln('digite o nome do cliente:');

readln(y);

write(pessoas.nome,y+'_');

if ioresult <>0 then

rewrite(pessoas.idade);

writeln('digite a idade do cliente:');

readln(z);

write(pessoas.idade,z+'_');

readln;

close(pessoas.cod);

close(pessoas.nome);

close(pessoas.idade);

end;

end.

prog2:

program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

tpessoas = record

cod:text;

nome:text;

idade:text;

end;

var

pessoas:array[1..3]of tpessoas;

y,z,x:string;

i:integer;

begin

for i:= 1 to 3 do

begin

assign(pessoas.cod,'cod.txt');

reset(pessoas.cod);

assign(pessoas.nome,'nome.txt');

reset(pessoas.nome);

assign(pessoas.idade,'idade.txt');

reset(pessoas.idade);

while not eof(pessoas.cod) do

begin

readln(pessoas.cod,x);

writeln(x);

end;

while not eof(pessoas.nome) do

begin

readln(pessoas.nome,y);

writeln(y);

end;

while not eof(pessoas.idade) do

begin

readln(pessoas.idade,z);

writeln(z);

end;

readln;

end;

end.

e quando c roda o 1º console aparece:

----------------------

"digite o cod do cliente:"

ai digita um valor x

"digite o nome do cliente:"

ai digita um nome x

"digite a idade do cliente:"

ai digita uma idade x

--------------isso 3vezes-------

ao rodar se o 2º console DEVERIA aparecer:

--------

"cod x"

"nome x"

"idade x"

-----isso 3 vezes----

mas...

----

"cod x1/cod x2/cod x3"

"nome x1/ nome x2/ nome x3"

"idade x1/ idade x2/ idade x3"

--------isso 3 vezes-----

ql o erro do codigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é porque você tem 3 whiles

tire o segundo e o terceiro

while not eof(pessoas.cod) do

begin

readln(pessoas.cod,x);

writeln(x);

readln(pessoas.nome,y);

writeln(y);

readln(pessoas.idade,z);

writeln(z);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites
bem o objetivo é, criar um vetor do tipo tcliente(record: cod,nome e idade), onde tenho que preencher cada registro e cada espaço do vetor e salvar no pc em arquivo .txt, onde que na mesma pasta deve se encontrar outro programa em console e ao iniciar-se, apareça os respectivos valores inserido no primeiro console.

fiz o cod da seguinte maneira:

prog1:

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

tpessoas=record

cod:text;

nome:text;

idade:text;

end;

var

pessoas:array[1..3] of tpessoas;

x,y,z:string;

i:integer;

ocod,onome,oidade:text;

begin

for i:=1 to 3 do

begin

assign(pessoas.cod ,'cod.txt');

assign(pessoas.nome ,'nome.txt');

assign(pessoas.idade ,'idade.txt');

{$I-}

append(pessoas.cod);

append(pessoas.nome);

append(pessoas.idade);

if ioresult <>0 then

rewrite(pessoas.cod);

writeln('digite o codigo do cliente:');

readln(x);

write(pessoas.cod,x+'_');

if ioresult <>0 then

rewrite(pessoas.nome);

writeln('digite o nome do cliente:');

readln(y);

write(pessoas.nome,y+'_');

if ioresult <>0 then

rewrite(pessoas.idade);

writeln('digite a idade do cliente:');

readln(z);

write(pessoas.idade,z+'_');

readln;

close(pessoas.cod);

close(pessoas.nome);

close(pessoas.idade);

end;

end.

prog2:

program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

tpessoas = record

cod:text;

nome:text;

idade:text;

end;

var

pessoas:array[1..3]of tpessoas;

y,z,x:string;

i:integer;

begin

for i:= 1 to 3 do

begin

assign(pessoas.cod,'cod.txt');

reset(pessoas.cod);

assign(pessoas.nome,'nome.txt');

reset(pessoas.nome);

assign(pessoas.idade,'idade.txt');

reset(pessoas.idade);

while not eof(pessoas.cod) do

begin

readln(pessoas.cod,x);

writeln(x);

end;

while not eof(pessoas.nome) do

begin

readln(pessoas.nome,y);

writeln(y);

end;

while not eof(pessoas.idade) do

begin

readln(pessoas.idade,z);

writeln(z);

end;

readln;

end;

end.

e quando c roda o 1º console aparece:

----------------------

"digite o cod do cliente:"

ai digita um valor x

"digite o nome do cliente:"

ai digita um nome x

"digite a idade do cliente:"

ai digita uma idade x

--------------isso 3vezes-------

ao rodar se o 2º console DEVERIA aparecer:

--------

"cod x"

"nome x"

"idade x"

-----isso 3 vezes----

mas...

----

"cod x1/cod x2/cod x3"

"nome x1/ nome x2/ nome x3"

"idade x1/ idade x2/ idade x3"

--------isso 3 vezes-----

ql o erro do codigo?

Olá,

1) Sempre que for usar código utilize a tag "CODE" (símbolo #)

2) Eu fiz alguns comentários utilizando o próprio pascal veja abaixo:

PROGRAM Project1;

type
tpessoas = record
cod :text;
nome :text;
idade:text;
end;
var
(*
PORQUE UM ARQUIVO DE TEXTO PAR CADA PESSOA ????
NAO FAZ MUITO SENTIDO. Explique isso !
*)
pessoas :array[1..3] of tpessoas;
x,y,z :string;
i :integer;
ocod,
onome,
oidade :text;


begin
for i:=1 to 3 do
begin
assign(pessoas[i].cod ,'cod.txt');
assign(pessoas[i].nome ,'nome.txt');
assign(pessoas[i].idade ,'idade.txt');

{$I-}
(*
Cada uma dessas operecoes abaixo he passivel de erro, logo, deve se
verificar o IOResult de cada uma. Lembre-se que o IOResulto retorna
a resultado da ULTIMA OPERACAO de entrada e saida.
*)
append(pessoas[i].cod);
append(pessoas[i].nome);
append(pessoas[i].idade);

(*
O IOResult CAPTA A "ULTIMA" OPERECAO DE ENTRADA E SAIDA
"IOResult = Returns the status of the last I/O operation performed."
O if abaixo estaria + ou - assim:
"se ele nao abrir "pessoas[i].idade" recrie "pessoas[i].cod", ja que
a ultima operacao de entrada e saida foi a linha acima !!! TA ERRADO !
*)
if ioresult <>0 then
rewrite(pessoas[i].cod);

writeln('digite o codigo do cliente:');
readln(x);
write(pessoas[i].cod,x+'_');

(*
Mesma situacao acima!!! O IOResult esta sendo usado de forma incorreta
*)

if ioresult <>0 then
rewrite(pessoas[i].nome);
writeln('digite o nome do cliente:');
readln(y);
write(pessoas[i].nome,y+'_');

(*
Mesma situacao acima!!! O IOResult esta sendo usado de forma incorreta
*)
if ioresult <>0 then
rewrite(pessoas[i].idade);
writeln('digite a idade do cliente:');
readln(z);
write(pessoas[i].idade,z+'_');

readln;


close(pessoas[i].cod);
close(pessoas[i].nome);
close(pessoas[i].idade);
end;
end.

3) Eu acho que você deveria reestruturar esse algoritmo.

Minha sugestão seria a seguinte:

a) usar um vetor de tCliente (você usou tPessoas, mas dá no mesmo) utilizando os tipos correspondentes deles mesmo, e não como um "text". Não faz sentido ter um arquivo de texto para cada palavra!!

Ficaria assim:

cod   = string; (ou qualquer tipo mais apropriado)
nome = string;
idade = integer; (ou byte)

E o vetor ficaria da mesma forma

vClientes : array [1..3] of tClientes;

... ou seja, eu tenho um vetor de "Clientes" e não um vetor de "ARQUIVOS de cada dado do cliente". Entendeu a diferença? (seria um vetor normal de clientes, como se não existisse arquivos.)

B) Com a estrutura acima, bastaria ter somente um arquivo (o mais correto) para todo os clientes, ex: Clientes.txt.

Ai teria que escolher um modo para escrever os dados neste arquivo. Repare que para todos os dados escritos tem que se observar como recuperar esse dado. "Não existe armazenamento sem recuperação" isso é um conceito!.

Eu sugiro duas formas:

Uma seria colocar cada dado um embaixo do outro. Ficaria assim:

Clientes.txt

1
EstilingueAtomico
26
2
Külhkamp
20

Ai na hora de recuperar bastava seguir a mesma seqüência: cod, depois nome e por fim a idade. Bem simples não? :lol:

Ou do jeito mais difícil.

Colocando um no lado do outro, para este você deveria colocar alguma coisa que marque onde termina e onde começa cada novo cliente. Dá mais trabalho, e nem vou entrar neste mérito no momento. Aconselho a primeira opção mesmo!!

Com essas informações acredito que consiga fazer um algoritmo mais aprimorado. Faça e poste aqui, que ajudo com as correções. E vou dando dicas de acordo com sua evolução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×