Ir ao conteúdo
  • Cadastre-se
tjgreenday

Projeto em pascal

Recommended Posts

Cá estou eu aqui de novo ^_^

Muito bem.. estou com um novo projeto na facul, pra daqui há 2 semanas.

Eis a questão:

8 - Um hemocentro possui um cadastro de doadores de sangue. Faça um algoritmo que:

a) leia os dados de 10 pessoas com: nome, data de nascimento, data da última doação, tipo sanguíneo e fator RH

B) escrever o nome das pessoas com idade entre 18 e 55 anos com tipo sanguíneo B+

c) escrever ao final quantos doadores estão a mais de 90 dias sem doar sangue

d) o cálculo da idade e do tempo da última doação devem ser efetuados através de funções

Já resolvi o item A, da seguinte forma:



Program Med_Hemo ;
Var
nome, dta_nasc, dta_ult_doa, tip_sangue, fat_rh : array[1..10] of string;
i : integer;

Begin

for i:=1 to 10 do
begin
writeln('Escreva nome ',i, 'Data de nascimento, Data da última doação, Tipo sanguíneo e Fator RH: ');
read(nome[i], dta_nasc[i], dta_ult_doa[i], tip_sangue[i], fat_rh[i]);
end;
End.

Minha dúvida cai em cima do item B, já que eu preciso da idade, e eu tenho como entrada uma data de nascimento usando array em string, posso mudar isso, to pensando em mudar.

To pensando em ter como entrada a data de nascimento no esquema: dia, mês e ano, usando array também, e daí posso fazer o calculo de dias e transformar em anos.

Aceito sugestões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

Minha dúvida cai em cima do item B, já que eu preciso da idade, e eu tenho como entrada uma data de nascimento usando array em string, posso mudar isso, to pensando em mudar.

To pensando em ter como entrada a data de nascimento no esquema: dia, mês e ano, usando array também, e daí posso fazer o calculo de dias e transformar em anos.

Aceito sugestões.

Você poderia passar a string para data utilizando a função "StrToDate();", se preferir. E depois de calcular a diferença passar de volta usando "DateToStr();"

Qualquer coisa poste!

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Função para calcular anos completos em duas datas passadas por parametro, muito útil para calcular idade.

//função a ser utilizada

function CalcAnos(const Data1, Data2: TDateTime): integer;

var

D1, M1, A1,

D2, M2, A2: Word;

begin

DecodeDate(Data1, A1, M1, D1);

DecodeDate(Data2, A2, M2, D2);

Result := A2 - A1;

if (M1 > M2) or ((M1 = M2) and (D1 > D2)) then

Dec(Result);

end;

//exemplo de como chamar a função para calcular a idade de uma pessoa...

var

DataNasc: TDateTime;

begin

DataNasc := StrToDate(Edit1.Text);

ShowMessage(IntToStr(CalcAnos(DataNasc, Date)) + ' anos');

end;

(Delphi Mais - http://www.delphimais.com/modules/smartsection/item.php?itemid=61)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Função que testa se determinada String é um Inteiro.

Função que testa se determinada String é um número inteiro.

function IsInteger(TestaString: String) : boolean;

begin

try

StrToInt(TestaString);

except

On EConvertError do result := False;

else

result := True;

end;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá!

Você poderia passar a string para data utilizando a função "StrToDate();", se preferir. E depois de calcular a diferença passar de volta usando "DateToStr();"

Qualquer coisa poste!

Abraços!

Não entendi cara. Pode me explicar melhor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você disse que tem uma data em string, correto?

então temos

s:string;

s := '15/11/2008';

passamos isso para date..

d:TDate; ou TDateTime;

d := StrToDate(s);

faz as contas, utilizando as funções que o amigo postou acima..

E, se precisar, pode até passar devolta pra string:

s := DateToStr(d);

E uma breve explicação, caso você n saiba, do "DateToStr" e "StrToDate", bem simples:

StrToDate = StringToDate - Converte uma string em um formato de data

DateToString - Converte um formato de data em string

Abraços, qualquer coisa poste!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você disse que tem uma data em string, correto?

então temos

s:string;

s := '15/11/2008';

passamos isso para date..

d:TDate; ou TDateTime;

d := StrToDate(s);

faz as contas, utilizando as funções que o amigo postou acima..

E, se precisar, pode até passar devolta pra string:

s := DateToStr(d);

E uma breve explicação, caso você n saiba, do "DateToStr" e "StrToDate", bem simples:

StrToDate = StringToDate - Converte uma string em um formato de data

DateToString - Converte um formato de data em string

Abraços, qualquer coisa poste!

Eu usei um ''artificio'' interessante... não sei o que você vai achar:

writeln('Data de Nascimento: ( dia <enter> mês <enter> ano <enter>) ',i,': '); read(dia[i], mes[i], ano[i]);
idade[i] := CalculoIdade(ano[i]);

Nesse campo, eu quebrei o string, antes existente em 3 variáveis inteiras, sumindo assim com o array dt_nascimento string... Fiz uma função também para calcular a idade e atribui o valor dessa função a uma array idade, pra eu poder guardar os valores da idade.

Function CalculoIdade(ano: integer):integer;
Var
idade: integer;
Begin
idade := (2008-ano);
End;

Não achei muito legal esse função, vou melhorá-la :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui finalizar o programa... o código ficou assim:

Program Med_Hemo ;
Var
nome, tipo_sangue, fat_rh : array[1..1] of string;
dia, mes, ano, idade, dias_ud, dia_ud, mes_ud, ano_ud : array[1..1] of integer;
i, cont : integer;

Function CalculoIdade(ano: integer):integer;
Var
idade: integer;
Begin
CalculoIdade := (2008-ano);
End;

Function TempoUD (dia_ud, mes_ud, ano_ud:integer):integer;

Begin
TempoUD := [B]7738[/B] -(((ano_ud*12)*30) + (mes_ud*30) + dia_ud);
End;



Begin
cont :=0;
i:=0;

for i:=1 to 1 do
begin
writeln('Nome ',i,': '); read(nome[i]);
writeln('Data de Nascimento: ( dia <enter> mês <enter> ano <enter>) ',i,': '); read(dia[i], mes[i], ano[i]);
idade[i] := CalculoIdade(ano[i]);
dias_ud[i] := TempoUD(dia_ud[i], mes_ud[i], ano_ud[i]);
writeln('Data da última doação: ( dia <enter> mês <enter> ano <enter>) ',i,': '); read(dia_ud[i], mes_ud[i], ano_ud[i]);
writeln('Tipo sanguíneo ',i,': (Exemplo: A+) '); read(tipo_sangue[i]);
WRITELN(dias_ud[i]);
clrscr;
end;
for i:=1 to 1 do
if (idade[i]>=18) and (idade[i]<=55) and (tipo_sangue[i]='B+') then writeln(nome[i]);

writeln(' ');
writeln(' ');

for i:=1 to 1 do
if (dias_ud[i]>90) then
begin
cont := cont+1;
end;

writeln(cont, ' Doador(es), estão há mais de 90 dias sem doar sangue!');


End.

Na function TempoUD (tempo ultima doação) esse valor em negrito, 7738, é o valor de dias em relação a data de hj. E ela é subtraída ao tempo de dias que o cara fez sua última doação. Como mostra a fómula.

Alguem tem alguma sugestão pra melhorar o programa?

Assim ele já roda legal e funciona 100% bem pra tudo q eu qro.

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×