ADA, 2000 buggfix.
procedure Birthday is
Datum : String(1..10); --Dagens datum
Birthday: String(1..10); --Personnummer
Ar:Integer; --Antel år du fyller
Da:Integer; --Årtalet i datumet
Bir:integer; --Årtalet i personnummret
package Print_Integer is new Integer_Io(Integer);
use Print_Integer;
package Print_Float is new Float_Io(Float);
use Print_Float;
package Math is new generic_Elementary_Functions(Float);
use Math;
begin
Put("Ange dagens datum (åååå-mm-dd):");
Get(Datum); --Tar emot dagens datum
Put("Ange ditt personnummer (ååmmddxxxx):");
Get(Birthday); --Tar emot ditt personnummer
if Datum(6..7)=Birthday(3..4) and Datum(9..10)=Birthday(5..6) then --Om månaden i datumet är samma i personnummret och dagen i datumer är samma som i personnummret så:
Da:=((Character'Pos(Datum(3)) - 48)*10)+(Character'pos(datum(4)) - 48); --Sparar datumets årtal i integern Da
Bir:=((Character'Pos(Birthday(1)) - 48)*10)+(Character'Pos(Birthday(2)) - 48); --Sparar personnummrets årtal i integern Bir
if Da<10 then --Fixar med 2000-buggen
Da:=Da+100;
end if;
if Bir mod 10 =0 then --Fixar med 2000-buggen
Bir:=Bir+100;
end if;
Ar:=Da-Bir; --Räknar ut hur många år du är!
Put("Grattis! Du fyller "); --Skriver den ut grattis
Put(Ar,Width=>0);
Put(" år!");
else --Annars om du inte fyller år:
Put("Du fyller inte år idag!"); -- Skriver den att du inte fyller år!
end if; -- If-satsen tar slut
end Birthday; --Programmet tar slut
Programmet är från en kompis som jag inte kan få tag på. Jag tog det till hjälp när jag skulle lämna in en skoluppgift. Det jag inte fattar är hur han fixar 2000 buggen. Vad betyder t.ex. mod i if satsen? Vad menar han med 10=0 then?