Ir ao conteúdo
  • Cadastre-se

Favor Analisem


E.M.I.C.I.D.A

Posts recomendados

Estou fazendo um programa aqui para treinar para a prova...

Gostaria por gentileza que verificassem porque dá erro na "datan" (data de nascimento)

Porque dá esse erro galera ?

Segue o programa :



program registro;
type

tiponome = string[50];
tiporg = string [10];
tipodia = integer;
tipomes = integer;
tipoano = integer;
tiporua = string [50];
tipocidade = string [30];
tipoestado = string [2];
tipocep = string [9];
tipora = string [6];
tipocr = real;

tipodata = record
dia : tipodia;
mes : tipomes;
ano : tipoano;
end;

tipoendereco = record
rua : tiporua;
cidade : tipocidade;
estado : tipoestado;
cep : tipocep;
end;

tipoaluno = record
nome : tiponome;
rg : tiporg;
datan : tipodata;
endereco : tipoendereco;
ra : tipora;
cr : tipocr;
end;

var aluno : tipoaluno;

begin
writeln ('Digite o nome do aluno');
readln (aluno.nome);
writeln ('Digite o RG ');
readln (aluno.rg);
writeln ('Digite a data de Nascimento');
readln (aluno.datan);
writeln ('Digite o RA ');
readln (aluno.ra);
writeln ('Digite o cr ');
readln (aluno.cr);
end.

Obrigado.

Att,

Roger Mayer

Link para o comentário
Compartilhar em outros sites

O erro ocorre porque "datan" é do tipo "tipodata", que é um record (registro). Não se pode ler diretamente um registro com readln. Deve-se ler separadamente o dia, o mês e o ano.

[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color][color=#ff4500]'Digite a data de Nascimento (dia)'[/color][color=#a52a2a][b]);[/b][/color]
[color=#228b22]readln[/color][color=#a52a2a][b]([/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]dia[color=#a52a2a][b]);[/b][/color]
[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color][color=#ff4500]'Digite a data de Nascimento (mês)'[/color][color=#a52a2a][b]);[/b][/color]
[color=#228b22]readln[/color][color=#a52a2a][b]([/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]mes[color=#a52a2a][b]);[/b][/color]
[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color][color=#ff4500]'Digite a data de Nascimento (ano)'[/color][color=#a52a2a][b]);[/b][/color]
[color=#228b22]readln[/color][color=#a52a2a][b]([/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]ano[color=#a52a2a][b]);[/b][/color]

Ou:

[color=#228b22]writeln[/color][color=#a52a2a][b]([/b][/color][color=#ff4500]'Digite a data de Nascimento (dia mês ano)'[/color][color=#a52a2a][b]);[/b][/color]
[color=#228b22]readln[/color][color=#a52a2a][b]([/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]dia[color=#a52a2a][b],[/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]mes[color=#a52a2a][b],[/b][/color]aluno[color=#a52a2a][b].[/b][/color]datan[color=#a52a2a][b].[/b][/color]ano[color=#a52a2a][b]);[/b][/color]

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Olha só que mancada da professora não ter explicado.

Bom, provavelmente foi para eu correr atrás e eu corri.

Vinicius Muito Obrigado Chapa !

Att,

Roger Mayer

Olá,

Roger Mayer, antes de tudo parabéns pela sua iniciativa de "correr atrás". Continue assim! :lol:

Queria aproveitar para sugerir que você comece também a melhorar e aplicar o conceito de indentação. Ela é de suma importância na boa aprendizagem e desenvolvimento (de certo modo faz parte também da técnica de programação, ou seja, além da utilidade em si, ela também pode ser exigida como regra - de fato é - por alguns professores (e com certeza será profissionalmente). Não existe um padrão em si, cada um pode ter o seu padrão. O meu mesmo é um pouco diferente, mas sigo meio que um padrão pré-estabelecido, só que faço algumas adaptações (tanto as que julgo mais práticas, como as que julgo mais estéticas).

É ideia é você seguir um padrão qualquer, como por exemplo a do seu professor (as vantagens nesse casos são óbvias, rs). Daí, se quiser, vai adaptando algumas coisas ali, outra aqui... o importante que exista meio que uma regra. Essa regra não é exatamente fixa e obrigatória, mas não deve ser muito fugida...

Sugiro que pesquise um pouco sobre o assunto e tire também algumas dúvidas com o seu professor.

Abaixo fiz algumas modificações no seu código para servir como exemplos (tanto de conceitos, quanto de indentação).

PROGRAM registro;
uses
CRT; //carrega comando extras como ReadKey, ClrScr, TextBackGround, TextColor etc
type
tiponome = string[50];
tiporg = string[10];
tipodia = integer;
tipomes = integer;
tipoano = integer;
tiporua = string[50];
tipocidade = string[30];
tipoestado = string[2];
tipocep = string[9];
tipora = string[6];
tipocr = real;

tipodata = record
dia :tipodia;
mes :tipomes;
ano :tipoano;
end;

tipoendereco = record
rua :tiporua;
cidade :tipocidade;
estado :tipoestado;
cep :tipocep;
end;

tipoaluno = record
nome :tiponome;
rg :tiporg;
datan :tipodata;
endereco :tipoendereco;
ra :tipora;
cr :tipocr;
end;


{não sei se você já viu procedure e function, se sim, abaixo um exemplo útil}
//imprime os dados do aluno na tela
procedure imprimeAluno;
begin
with aluno do //with vair servi para não precisar colocar "aluno." quando precisaria.
begin
writeln('NOME : ',nome);
writeln('RG : ',rg);
with datan do //aqui no caso ficará 'aluno.datan." (em cadeia... )
writeln('DATA DE NASCIMENTO : ',dia,'/',mes,'/',ano);
writeln('"RA" : ',ra);
writeln('"CR" : ',cr:0:2); //:x:y = casas a esquerda e número de casas decimais reservadas
end;
end;

{veja que propositalmente eu coloquei as "variáveis globais abaixo dos
procedimentos. Essa "técnica" é para evitar que se use uma variável globai
acidentalente. Isso é possível porque o Pascal "aprende" da seguinte forma: da
esqueda para direita / de cima pra baixo. Logo os procedimento NÃO enxergaram
as coias que estão abaixo dela. (obs.: Isso é uma característica típica do
Pascal, em outras linguágens a posição pode não fazer diferença, como é o caso
do Java}
var
aluno :tipoaluno;

BEGIN
TextBackGround(black); //cor do fundo preto (é o mesmo do padrão, mas não custa nada)
TextColor(white); //cor do texto branco mais fluorescente
ClrScr; //limpa a tela
writeln('Digite o nome do aluno');
readln(aluno.nome);
writeln('Digite o RG ');
readln(aluno.rg);
writeln('Digite a data de Nascimento (dia mes ano)');
readln(aluno.datan.dia,aluno.datan.mes,aluno.datan.ano); //proposta por viniciusbmatos
writeln('Digite o RA ');
readln(aluno.ra);
writeln('Digite o cr ');
readln(aluno.cr);
writeln('Aluno cadastrado com sucesso');
writeln;
write('Pressione qualquer tecla para continuar');
ReadKey; //aguarda uma tecla ser pressionada (ela também retorna "a tecla" nela mesma)
ClrScr;
imprimeAluno;
ReadKey;
END.

PS: Veja que esteticamente a visualização do código fica mais clara. Inclusive ajuda a entender as relações das instruções com as outras.

Por ai vai...

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!