Псевдокод для определения функции даты

0

Псевдокод, который я получил:

Date& operator++(){
    //add 1 to d  //tomorrow, unless we were at the end of the month
    //if is_date is false
    //            //need to change to first of next month
    //  set d to 1
    //  if m is December
    //            //need to change to next year too      
    //    set m to January
    //    increment y
    //  else
    //    increment m
    return *this;

}

Моя интерпретация:

Date& Date::operator++(){ 
    if (is_date==false){ 
        m=m+1; 
        d=1; 
    } 
    if (m==dec && d==29){ 
        m=jan; 
        y=y+1; 
    } 
    else{ 
        m=m+1; 
    } 
    d=d+1; 
}

Это выглядит нормально? Я делаю назначение hw, основанное на книге Stroustrups. Просто нужна была проверка

Теги:
c++11

1 ответ

1

Пусть increment 2010-03-10:

    if (is_date==false){ 
        m=m+1; 
        d=1; 
    } 

Мы предполагаем, что is_date истинно, поэтому никаких действий не происходит.

    if (m==dec && d==29){ 
        m=jan; 
        y=y+1; 
    } 

m не dec и d не равно 29, поэтому никаких действий не происходит.

    else{ 
        m=m+1; 
    } 

Подождите! m увеличивается.

    d=d+1;

Так будет d.

У нас есть 2010-04-11 сейчас - не то, что мы хотели.

Посмотрите еще раз на псевдокод - первое, что происходит, это добавление дня. Все остальное происходит только тогда, когда is_date является ложным. Но is_date не следует интерпретировать как какое-то статическое значение, но вместо этого должно быть реализовано как проверка, если дата действительна (например, у нас есть 32-й день после инкремента). Только если новая дата недействительна, месяц и/или год увеличиваются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню