Série da semana: Primeiros passos no React

Veja mais

Duvida em uma função DELPHI.... alguém pode ajudar

24/11/2015

3

Olá, bom dia.
Estou com uma duvida em um teste que eu tive que fazer, gostaria de verificar as alternativas e verificar se a minha lógica esta correta; tive que fazer uma Função AlterarData(data: string; operacao: string; valor: integer), com as seguintes regras;

- Data e uma string no formato dd/MM/yyyy HH24:mi
- Operação e uma string so pode ser '+' ou '-'
- Valor e um integer que valem ao MINUTOS.

- Não é permitida a utilização de nenhuma classe ou biblioteca não nativa.
- Não é permitida a utilização da classe DateTime ou TimeSpan.
- Se o Valor ( minutos ) for menor que 0, ignorar o sinal e tratar como positivo.
- Ignore o fato de fevereiro possuir 28 ou 29 dias, considere sempre como 28.
- Ignore o horario de verão.


Exemplo de entrada/resultado:
AlterarData('30/01/2015 14:10','+',4000) = '02/02/2015 08:50'




function AlterarData(Data: string; Operacao: char;
valor: integer): string;
var
Dia, Mes, Ano, Hora, Minuto, TotalDiasMes: integer;
DiaFinal, MesFinal, AnoFinal, HoraFinal, MinutoFInal: integer;
{ Funcao para verificar a quantidade de dias que um mes especifico possui,
a variavel Mes deve ser preenchida com o numero do mes. }
function TotalDiaMes(Mes: integer): integer;
begin
Result := 31;
case Mes of
4, 6, 9, 11:
Result := 30;
2:
Result := 28;
end;
end;

begin
try
// Resultado caso saia da funcao sem terminar
Result := 'VER. VLR DIG.';

if (Data = '') then
exit;

valor := abs(valor);

// Verifica Formato
if (Length(Data) <> 16) and (Data[3] <> '/') and (Data[6] <> '/') and
(Data[11] <> ' ') and (Data[14] <> ':') then
exit;

// Verifica se o dia, mes, ano hora e minuto sao valores corretos;
Mes := strtoint(copy(Data, 4, 2));
Hora := strtoint(copy(Data, 12, 2));
Minuto := strtoint(copy(Data, 15, 2));

if not(Mes in [1 .. 12]) or not(Hora in [0 .. 23]) or
not(Minuto in [0 .. 59]) then
exit;

Dia := strtoint(copy(Data, 1, 2));
Ano := strtoint(copy(Data, 7, 4));

if TotalDiaMes(Mes) < Dia then
exit;

if Ano <0> 0 do
begin
if Operacao = '-' then
begin
// Se a operacao dor para decrementar os minutos
Dec(MinutoFInal);
if MinutoFInal = -1 then
begin
MinutoFInal := 59;
Dec(HoraFinal);
if HoraFinal = -1 then
begin
HoraFinal := 23;
Dec(DiaFinal);
if DiaFinal = -1 then
begin
Dec(MesFinal);
if MesFinal = -1 then
begin
MesFinal := 12;
Dec(AnoFinal);
end;
DiaFinal := TotalDiaMes(MesFinal);
end;
end;
end;
end
else
begin
// Se a operacao for para acrescentar os minutos
inc(MinutoFInal);
if MinutoFInal = 60 then
begin
MinutoFInal := 0;
inc(HoraFinal);
if HoraFinal = 24 then
begin
HoraFinal := 0;
inc(DiaFinal);
if DiaFinal > TotalDiaMes(MesFinal) then
begin
inc(MesFinal);
if MesFinal = 13 then
begin
MesFinal := 1;
inc(AnoFinal);
end;
DiaFinal := 1;
end;
end;
end;
end;
valor := valor - 1;
end;

// Retorna os resultados da funcao
Result := Format('%.2d/%.2d/%.4d %.2d:%.2d', [DiaFinal,MesFinal,AnoFinal, HoraFInal, MinutoFInal]);
except
on e: exception do begin
Result := 'Erro: ' + e.Message;
end;
end;

end;



ALGUEM AI CONHECE ALGUMA FORMA MAIS SIMPLES
Responder