Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 16:02   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
задача определить следующий день
ну тогда огорчу Вас.
Вышеприведённый код эту задачу не решает!

введите, например,
28.01.2011
получите, что завтра 29.02.2011
введите 30.12.2011 получите, что завтра 1.13.2011


впрочем, я так понимаю, что Вас работа программы вполне устраивает )))
А остальное уже не суть важно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.07.2011, 18:23   #12
ZoomHz
Пользователь
 
Аватар для ZoomHz
 
Регистрация: 25.06.2011
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну тогда огорчу Вас.
Вышеприведённый код эту задачу не решает!

введите, например,
28.01.2011
получите, что завтра 29.02.2011
введите 30.12.2011 получите, что завтра 1.13.2011


впрочем, я так понимаю, что Вас работа программы вполне устраивает )))
А остальное уже не суть важно...
дак я не весь код выложил + доделал прогу
Код:
#include <iostream>

using namespace std;

int main()
{
   int y;
   int day,month,year;
   cout<<"day, month, year \n";
   cin>>day>>month>>year;
   switch (month)
   {
         case 4:
         case 6:
         case 9:
         case 11:
              if (day == 30)
              {
              month++;
              day = 1;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }         
              if( day > 30)
              {
              cout<< endl;
              cout<<"Error \n";
              break;
              }
              if (day < 30 || day > 0)
              {
              day++;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }
         case 2:
         if (day == 28)
              {
              month++;
              day = 1;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }         
              if( day > 28)
              {
              cout<< endl;
              cout<<"Error \n";
              break;
              }
              if (day < 28 || day > 0)
              {
              day++;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }  
         case 1:  
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
            if (day == 31)
              {
              month++;
              day = 1;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }         
              if( day > 31)
              {
              cout<< endl;
              cout<<"Error \n";
              break;
              }
              if (day < 31 || day > 0)
              {
              day++;
              cout<< endl;
              cout<<"tomorrow ";
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }
              
         case 12:
              if (day == 31)
              {
              year++;
              day = 1;
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              cout<<"tomorrow " << year <<" year \n";
              break;
              }         
              if( day > 31)
              {
              cout<< endl;
              cout<<"Error \n";
              break;
              }
              if (day < 31 || day > 0)
              {
              day++;
              cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
              cout<< endl;
              break;
              }
              }
   system("PAUSE");
   }
ZoomHz вне форума Ответить с цитированием
Старый 14.07.2011, 19:14   #13
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

А високосные года?
Непорядок!
EUGY вне форума Ответить с цитированием
Старый 14.07.2011, 21:06   #14
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

ZoomHz, простите, конечно, но ... ваш код очень...так сказать...индусский.
_-Re@l-_ вне форума Ответить с цитированием
Старый 14.07.2011, 21:13   #15
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Почитайте Вот это - "Вечный календарь".
А код действительно, мммм, не очень...
Кому лень по ссылку, вот алгоритм из этой статьи:
Цитата:
Стандартный алгоритм

Январь — это 1, Декабрь — 12 месяц. Для определения сдвига используется следующая формула: a=(14-месяц) div 12 (a — вспомогательная величина). Затем определяются год и месяц с учётом поправки: y=год-a; (год — увеличиваем на 1 от исходного). m=месяц+12·a-2.

После вспомогательных операций вычисляется сам день недели:

result=(7000+(день+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7

Для юлианского календаря формула выглядит так:

result=(6998+(день+y+y div 4+(31*m) div 12)) mod 7

Результат — число от 0 до 6, где 0 — суббота, 1 — воскресенье, 2 — понедельник, 3 — вторник, 4 — среда, 5 — четверг, 6 — пятница.
Или вот это.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 14.07.2011 в 21:18.
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.07.2011, 21:30   #16
ZoomHz
Пользователь
 
Аватар для ZoomHz
 
Регистрация: 25.06.2011
Сообщений: 37
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
А високосные года?
Непорядок!
не вижу смысла ограничивать год

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
ZoomHz, простите, конечно, но ... ваш код очень...так сказать...индусский.
Что в нем не так? обоснуйте пожалуйста

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Почитайте Вот это - "Вечный календарь".
А код действительно, мммм, не очень...
Кому лень по ссылку, вот алгоритм из этой статьи:

Или вот это.
Не стал читать все эти формулы, я хотел сделать обычную программу которая показывает следующий день, этот гемор с формулами не к чему
ZoomHz вне форума Ответить с цитированием
Старый 15.07.2011, 18:13   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Не стал читать все эти формулы, я хотел сделать обычную программу которая показывает следующий день, этот гемор с формулами не к чему
ну я бы написал примерно так (это с проверкой дату на валидность + учитываются високосные года):
Код:
#include <iostream.h>

int IsLeapYear(int cYear)
{
    return ((cYear % 4) == 0) &&
                   ((cYear % 100 != 0) || (cYear % 400 == 0));
}

int main()
{
   int DaysInMonths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

   int day,month,year;
   cout << "day, month, year \n";
   cin>>day>>month>>year;

   // если введённый год високосный, подправим число дней в феврале
   if (IsLeapYear(year)==1) DaysInMonths[1]++;

   //проверим введённую дату на правильность 
   //  (проверяем только месяц и день - год не проверяем...

   if (!((month>=1) && (month<=12)))
   {
     cout << "\nError! Wrong month number! Bye!\n";
     system("PAUSE");
     return 0;
   }

   if (!((day>=1) && (day<=DaysInMonths[month-1])))
   {
     cout << "\nError! Wrong days number! Bye!\n";
     system("PAUSE");
     return 0;
   }

   day++;
   if (day>DaysInMonths[1]++)
   {
     day=1;
     month++;

     if (month>12) 
     {
       month = 1;
       year++;
     }
   }

   cout << "\ntomorrow ";
   cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
   cout<< endl;


   system("PAUSE");
   return 0;
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.07.2011, 18:54   #18
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

ZoomHz
Индусский код
_-Re@l-_ вне форума Ответить с цитированием
Старый 15.07.2011, 21:16   #19
ZoomHz
Пользователь
 
Аватар для ZoomHz
 
Регистрация: 25.06.2011
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну я бы написал примерно так (это с проверкой дату на валидность + учитываются високосные года):
Код:
#include <iostream.h>

int IsLeapYear(int cYear)
{
    return ((cYear % 4) == 0) &&
                   ((cYear % 100 != 0) || (cYear % 400 == 0));
}

int main()
{
   int DaysInMonths[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

   int day,month,year;
   cout << "day, month, year \n";
   cin>>day>>month>>year;

   // если введённый год високосный, подправим число дней в феврале
   if (IsLeapYear(year)==1) DaysInMonths[1]++;

   //проверим введённую дату на правильность 
   //  (проверяем только месяц и день - год не проверяем...

   if (!((month>=1) && (month<=12)))
   {
     cout << "\nError! Wrong month number! Bye!\n";
     system("PAUSE");
     return 0;
   }

   if (!((day>=1) && (day<=DaysInMonths[month-1])))
   {
     cout << "\nError! Wrong days number! Bye!\n";
     system("PAUSE");
     return 0;
   }

   day++;
   if (day>DaysInMonths[1]++)
   {
     day=1;
     month++;

     if (month>12) 
     {
       month = 1;
       year++;
     }
   }

   cout << "\ntomorrow ";
   cout<<day<< "."; cout<<month<< "."; cout<<year<< ".";
   cout<< endl;


   system("PAUSE");
   return 0;
}
у вас в коде используются массивы я до них в книге еще не дошел
ZoomHz вне форума Ответить с цитированием
Старый 15.07.2011, 21:20   #20
ZoomHz
Пользователь
 
Аватар для ZoomHz
 
Регистрация: 25.06.2011
Сообщений: 37
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
хм, если учесть что я занимаюсь программированием 20 дней для мну Индусский код обычное дело, да ?
ZoomHz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56