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:  
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.

Editado por tjgreenday

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:

Editado por tjgreenday

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






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

×