day_count
Abstract
Le programme day_count établie le nombre de jour écoulé d'une date à une autre en utilisant la procédure Difference de Ada.Calendar.Arithmetic.
Elle affiche en même temps grâce à la procédure position utilisé dans un appel de la procédure Put de Ada Text_Io d'autre information établie selon un modulo dans un ensemble énoncé par la déclaration d'un type discré énuméré.
Le calcul du nombre de jour est évalué selon la date de départ approximatif pourvant être un mardi. Sensiblement c'est le cas ; Ca tombe juste.
La procédure position est founie par la bibliothèque PragmARC.Ansi_TTY_Control de PragmAda.
source
with Ada.Text_Io;
use Ada.Text_Io;
with Ada.Calendar;
with Ada.Calendar.Formatting;
use Ada.Calendar;
with Ada.Calendar.Arithmetic;
with PragmARC.Ansi_Tty_Control;
use PragmARC.Ansi_Tty_Control;
procedure Day_Count is
type Week_Enum is (None, Monthday, Tusday, Wenesday, Thirday, Friday, Saturday, Sunday);
type Sem_Enum is (None, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche);
type Romain_Enum is (None, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche);
Start_Date : Time := Time_Of(1970, 4, 20, 43200.0);
Date_Cur : Time := Clock+43200.0;
Birthday : Time := Time_of(1970, 4, 22, 14580.0);
Day_Num : Arithmetic.Day_Count := 0;
sec : Duration := 0.0;
Leaps : Arithmetic.Leap_Seconds_Count := 0;
type Step_Enum is (Chaos, Machine, Program, Result, Manuel);
type Cmd_Enum is (Logique, Raison, science, Hasard, Libre, Buggy);
type Name_Enum is (Amour, Classe, Style, BCBG, Bab, Ceel, Admin);
Step : Positive := Positive(Year(Clock)) - 665;
Cross : Positive := 1970;
Line : Positive := 1;
Col : Positive := 200;
function System (Cmd : String) return Integer;
Errno : Integer;
pragma Import (C, System, "system");
task Day_Name is
entry Arrêt;
end Day_Name;
task body Day_Name is
begin
loop
select
accept Arrêt;
exit;
or
delay 1.0;
Date_Cur := Clock+43200.0;
--Errno := System ("clear" & Character'Val(0));
Put(Position(Line, Col) & Formatting.Image(Clock));
Line := Line + 1;
Arithmetic.Difference(Date_Cur, Start_Date, Day_Num, Sec, Leaps);
Put(Position(Line, Col) & "Day count : " & Integer'Image(Integer(Day_Num)) & " : " & Step_Enum'Image(step_Enum'Val(Integer(Day_Num) mod 5)));
Line := Line + 1;
Put(Position(Line, Col) & "Day : " & Week_Enum'Image(Week_Enum'Val(((Integer(Day_Num)) mod 7)+1)));
Line := Line + 1;
Put(Position(Line, Col) & "Jour : " & Sem_Enum'Image(Sem_Enum'Val(((Integer(Day_Num)) mod 7)+1)));
Line := Line + 1;
Put(Position(Line, Col) & "Dio : " & Romain_Enum'Image(Romain_Enum'Val(((Integer(Day_Num)) mod 7)+1)));
Line := Line + 1;
Put(Position(Line, Col) & Name_Enum'Image(Name_Enum'Val(Cross mod 6)));
if Day(Clock) = (Day(Birthday) - 1) and Month(Clock) = Month(Birthday) then
Put(Position(Line, Col+7) & " ; Happy birthday!");
Line := Line + 1;
elsif Day(Clock) = (Day(Birthday)) and Month(Clock) = Month(Birthday) then
Put(Position(Line, Col+7) & " ; It's happy day!");
Line := Line + 1;
else
Put(Position(Line, Col+7) & " ; Have a nice day!");
Line := Line + 1;
end if;
Put(Position(Line, Col) & "Commande : ");
Put(Cmd_Enum'Image(Cmd_Enum'Val(Day(Clock) mod 5)));
Put(Position(23, 20));
Line := 1;
end select;
end loop;
end Day_Name;
Char : Character;
begin
loop
Get_Immediate(Char);
Day_Name.Arrêt;
exit;
end loop;
end Day_Count;