Помогите пожалуйста решить задачу на объектное ориентированное програмирование! Короче у меня дана задача объект время!
Раньше я её делал в turbo pascale и вот как она выглядела:
Код | Uses crt; type Data=object Chislo:1..31; mes:1..12 ; god:word; procedure Enter; procedure vivod; function VisokosnyGod : boolean; function Check: boolean; function DaysFromZero: longint; PROcedure Next; procedure add; end; (*--- Процедура вывода даты---*) procedure data.vivod; begin Write(chislo,'. ',mes,'. ',god); end; (*---Функция проверяе год---*) function data.VisokosnyGod: boolean; begin if (((god mod 400)=0) or (((god mod 4)=0) and ((god mod 100) <> 0))) then VisokosnyGod := TRUE else VisokosnyGod := FALSE; end; (*---Функция проверяет, правильно ли задан день в зависимости от месяца и года---*) function data.Check: boolean; begin if ((chislo>30)and(mes in [2,4,6,9,11])) or ((chislo>29)and(mes=2)) or ((chislo>28)and(mes=2)and( not data.VisokosnyGod)) then Check:=false else Check:=true; end;
(*--- Процедура ввода даты с защито ---*) procedure data.Enter; var dayOk: boolean; begin write('Год: '); readln(god); repeat write('Месяц (1..12): '); readln(mes); if (mes<1)or(mes>12) then writeln('Ошибка! Номер месяца должен находиться в диапазоне 1..12'); until (mes>0)and(mes<13);
repeat dayOk:=true; write('День (1..31): '); readln(chislo); if (chislo<1)or(chislo>31)or(not data.Check) then begin writeln('Ошибка! День не может иметь такое значение для выбранных '+ 'года и месяца. Выберите другой день'); dayOk:=false; end; until dayOk; end;
(*--- Функция возвращает количество дней от начала эры до указанной даты ---*) function data.DaysFromZero: longint; begin if mes>2 then mes := mes+1 else begin mes := mes+13; god := god-1; end; DaysFromZero:= trunc(36525*god/100+306*mes/10+chislo); end;
PROcedure data.Next; var i:integer; M:ARRAY [1..12]of integer; label q; begin m[1]:=31; m[2]:=28; m[3]:=31; m[4]:=30; m[5]:=31; m[6]:=30; m[7]:=31; m[8]:=31; m[9]:=30; m[10]:=31;m[11]:= 30; m[12]:= 31; chislo:=chislo+1; if chislo<=m[mes] then goto q; if (mes=2)and (chislo=29) and(god mod 4=0) then goto q; chislo:=1; mes:=mes+1; if mes<>13 then goto q; mes:=1; god:=god+1; q: end; procedure data.add; var n:integer; begin Writeln('Введите количество дней'); Readln(n); while n<>0 do begin data.Next; n:=n-1; end; end;
var k,r,n:integer; d,f,a:data; c,t:longint; begin clrscr; repeat gotoxy(30,10); writeln('menu'); gotoxy(30,11); writeln('1. Ввод'); gotoxy(30,12); writeln('2. Высок ли год '); gotoxy(30,13); writeln('3. Сколько дней от сегоднешней до до указ даты '); gotoxy(30,14); writeln('4. Вывод '); gotoxy(30,15); writeln('5. Следующая дата '); gotoxy(30,16); writeln('6. Дата +число'); gotoxy(30,17); writeln('7. Выход'); readln (k); case k of 1: begin clrscr; a.Enter; end; 2: begin clrscr; if a.VisokosnyGod=true then Writeln ('da') else Writeln ('net') ; end; 3: begin clrscr; writeln('Введите сегоднещнюю дату'); f.Enter; writeln('Введите интересующую вас дату'); d. Enter; writeln( 'сегоднещняя дата:'); f.vivod; writeln; writeln(' интересующая вас дата:'); d.vivod; writeln; c:= f.DaysFromZero ; t:= d.DaysFromZero ; r:= abs(c-t); writeln('Количество дней между этими датами = ',r); readln; end; 4: begin clrscr; a.Vivod; end; 5: begin clrscr; a.enter; a.Next; a.vivod; end; 6: begin clrscr ; a.Enter; a.add; a.vivod; end; 7: exit; end; until k=8 end. |
Теперь мне её надо сделать в С++, а я вообще без понятия как её делать! Очень срочно надо! Помогите кто сможет!
Модератор: не забываем пользоваться кнопочкой код |