Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переписать программа с Pascal на C++, объектное ориентирование 
:(
    Опции темы
nidi
  Дата 2.6.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Помогите пожалуйста решить задачу на объектное ориентированное програмирование!
Короче у меня дана задача объект время!

Раньше я её делал в 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.


Теперь мне её надо сделать в С++, а я вообще без понятия  как её делать! Очень срочно надо! Помогите кто сможет!


Модератор: не забываем пользоваться кнопочкой код

Это сообщение отредактировал(а) bsa - 10.11.2009, 12:16
PM MAIL   Вверх
gosn1ck
Дата 2.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.4.2009

Репутация: 1
Всего: 1



как давно я делал класс дата smile

Код

class date {
    int day;
    int month;
    int year;
public:
  date(int, int, int);
  date();
  void set(int, int, int);
  int date::get_year();
  int date::get_day();
  int date::get_month();
  void next();
  void print_shablon();
  void print_neshablon();
};

date::date(int d, int m, int y)
{
  if ((d >= 1 && d <= 31) && (m >= 1 && m <= 12) && (y >= 1 && y <= 4000)) {
    day = d;
    month = m;
    year = y;
  }
  else {
    cout << "\nVi vveli ne vernuyu datu! data ustonovlena na 1.1.2000\n";
      day = 1;
      month = 1;
      year = 2000;
  }
}

date::date()
{
  day = 1;
  month = 1;
  year = 2000;
}

void date::set(int d, int m, int y)
{
  if ((d >= 1 && d <= 31) && (m >= 1 && m <= 12) && (y >= 1 && y <= 4000)) {
    day = d;
    month = m;
    year = y;
  }
  else {
    cout << "\nVi vveli ne vernuyu datu! data ustonovlena na 1.1.2000\n";
      day = 1;
      month = 1;
      year = 2000;
  }


}

void date::print_neshablon()
{
    cout << day << "." << month << "." << year << endl;
}

int date::get_day(){ return day;}

int date::get_month(){return month;}

int date::get_year(){return year;}

void date::print_shablon()
{
    cout << day << " ";
    switch (month) {
    case 1: cout << "yanvarya "; break;
    case 2: cout << "fevralya "; break;
    case 3: cout << "marta "; break;
    case 4: cout << "aprelya "; break;
    case 5: cout << "maya "; break;
    case 6: cout << "iyunya "; break;
    case 7: cout << "iyulya "; break;
    case 8: cout << "avgusta "; break;
    case 9: cout << "sentyabrya "; break;
    case 10: cout << "oktyabrya "; break;
    case 11: cout << "noyabrya "; break;
    case 12: cout << "dekabrya "; break;

    }
    cout << year << " goda" << endl;
}

void date::next()
{
   if (day < 31) ++day;
     else if (month < 12) {++month; day = 1;}
       else  { day = 1; month = 1; ++year;}
}

int main()
{
  date today;
  today.print_neshablon();
  date tod(31, 12, 2002);
  tod.print_neshablon();
  tod.next();
  tod.print_shablon();

  int x,y,i;
  cin >> x >> y >> i;
  tod.set(x,y,i);

  tod.print_shablon();

    return 0;
}



может тебе поможет

Это сообщение отредактировал(а) gosn1ck - 2.6.2009, 13:48
PM MAIL ICQ   Вверх
nidi
  Дата 3.6.2009, 11:44 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.6.2009

Репутация: нет
Всего: нет



Спасибо! Попробую запустить!

Но эта задача на объект дата! Нельзя было бы её переделать??????????????????

Это сообщение отредактировал(а) nidi - 4.6.2009, 16:05
PM MAIL   Вверх
gosn1ck
Дата 11.6.2009, 12:49 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 18.4.2009

Репутация: 1
Всего: 1



можно, переделай smile
PM MAIL ICQ   Вверх
andrew_121
Дата 11.6.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(nidi @  3.6.2009,  11:44 Найти цитируемый пост)
Но эта задача на объект дата! Нельзя было бы её переделать??????????????????

Чёто я не понял smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0718 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.