• Lenguaje

    Pascal

  • Descripción

    Calcula la fecha del anterior día a partir de una fecha digitada desde el teclado por el usuario (dd, mm, aaaa) e imprimirla. (Tenga en cuenta los años bisiestos.), recuerde que sólo debe ingresar valores correctos, es decir no pueden haber meses de más de 31 días o años con más de 12 meses, se debe garantizar que el año este en el rango de 4 cifras. (en caso de no cumplir con las condiciones se debe mostrar los mensaje de error).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
program DiaAnterior;
uses crt;

var anno, anno_anterior, dia, dia_anterior, mes : integer;
var mes_anterior : integer;
begin
    write ('Ingresa el valor de anno: ');
    readln (anno);
    write ('Ingresa el valor de dia: ');
    readln (dia);
    write ('Ingresa el valor de mes: ');
    readln (mes);
    if dia=1 then
        begin
            dia_anterior := 31;
            mes_anterior := mes-1;
        end
    else
        begin
            dia_anterior := dia-1;
            mes_anterior := mes;
        end;
    if (dia=1) and ((mes=4) or (mes=6) or (mes=9) or (mes=11)) then
        begin
            dia_anterior := 30;
        end;
    if (dia=1) and (mes=2) then
        begin
            dia_anterior := 28;
        end;
    if (dia=1) and (mes=2) and ((((anno mod 4=0)) and ((anno mod 100<>0))) or (anno mod 400=0)) then
        begin
            dia_anterior := 29;
        end;
    if mes_anterior=0 then
        begin
            anno_anterior := anno-1;
            mes_anterior := 12;
        end
    else
        begin
            anno_anterior := anno;
        end;
    if (dia<1) or (dia>31) or ((mes=2) and (dia>29)) or (((mes=4) or (mes=6) or (mes=9) or (mes=11)) and (dia=31)) or ((mes=2) and (dia=29) and ((anno mod 4<>0) or (anno mod 100=0)) and (anno mod 400<>0)) then
        begin
            dia_anterior := 0;
            mes_anterior := 0;
            anno_anterior := 0;
            writeln ('D'#161'a incorrecto');
        end;
    if (mes<1) or (mes>12) then
        begin
            dia_anterior := 0;
            mes_anterior := 0;
            anno_anterior := 0;
            writeln ('Mes incorrecto');
        end;
    if (anno<1000) or (anno>=10000) then
        begin
            dia_anterior := 0;
            mes_anterior := 0;
            anno_anterior := 0;
            writeln ('A'#164'o incorrecto');
        end;
    writeln ('Valor de anno anterior: ', anno_anterior);
    writeln ('Valor de dia anterior: ', dia_anterior);
    writeln ('Valor de mes anterior: ', mes_anterior);
    writeln;
    write ('Presiona una tecla para terminar . . . ');
    readkey;
end.