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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 22:33   #1
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию Задачка на дату

Помогите пожалуйста с задачей:
Составьте программу которая по номеру дня в году выводит число и месяц в общепринятой форме (например: 33 день - 2 февраля)

Здесь по идеи можно case использовать... но что то не вышло...
Заранее спасибо.
Если помог - Весы слева
KREGI вне форума Ответить с цитированием
Старый 02.06.2009, 23:25   #2
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Код:
program ameba;
var
  n: 1..365;
begin
  ReadLn(n);
  case n of
  '1'..'31': WriteLn('Янваааарь!'); 
  {И так далее}
  end;
end.

Последний раз редактировалось Манжосов Денис :); 02.06.2009 в 23:26. Причина: НЕдочёт
Манжосов Денис :) вне форума Ответить с цитированием
Старый 02.06.2009, 23:33   #3
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию

в институте писал её, вроде типа того(на делфи) не пахала, но там я с типами начудил.
какой тип n?

Манжосов Денис спасибо, вот ниже код мой рабочий. сделал.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 n:1..365;
begin
n:=strtoint(edit1.text);
   case n of
  1..31: showmessage((inttostr(n))+' день года/'+'Январь/ '+(inttostr(n))+' Января/');
  32..60: showmessage((inttostr(n))+' день года/'+'Февраль/ '+(inttostr(n-31))+' февраля/');
  61..91: showmessage((inttostr(n))+' день года/'+'Март/ '+(inttostr(n-60))+' Марта/');
  92..121: showmessage((inttostr(n))+' день года/'+'Апрель/ '+(inttostr(n-91))+' Апреля/');
  122..152: showmessage((inttostr(n))+' день года/'+'Май/ '+(inttostr(n-121))+' Май/');
  153..182: showmessage((inttostr(n))+' день года/'+'Июнь/ '+(inttostr(n-152))+' Июня/');
  183..213: showmessage((inttostr(n))+' день года/'+'Июль/ '+(inttostr(n-182))+' Июля/');
  214..243: showmessage((inttostr(n))+' день года/'+'Август/ '+(inttostr(n-213))+' Августа/');
  244..274: showmessage((inttostr(n))+' день года/'+'Сентябрь/ '+(inttostr(n-243))+' Сентября/');
  275..304: showmessage((inttostr(n))+' день года/'+'Октябрь/ '+(inttostr(n-274))+' Октября/');
  305..335: showmessage((inttostr(n))+' день года/'+'Ноябрь/ '+(inttostr(n-304))+' Ноября/');
  336..365: showmessage((inttostr(n))+' день года/'+'Декабрь/ '+(inttostr(n-335))+' Декабря/');
  end;
end;
Если помог - Весы слева

Последний раз редактировалось Stilet; 03.06.2009 в 08:30.
KREGI вне форума Ответить с цитированием
Старый 03.06.2009, 06:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я уже тут на форуме писал решение этой задачи.
могу продублировать решение тут:

Код:
const
  MonthName : array[1..12] of string =
('Января','Февраля','Марта','Апреля','Мая','Июня','Июля',
'Августа','Сентября','Октября','Ноября','Декабря');  


{*                    OPDATE.PAS 1.21                    *}
{*     Copyright (c) TurboPower Software 1988, 1992.     *}

  function IsLeapYear(Year : Integer) : Boolean;
    {-Return True if Year is a leap year}
  begin
    IsLeapYear := (Year mod 4 = 0) 
          and (Year mod 4000 <> 0) and
            ((Year mod 100 <> 0) or (Year mod 400 = 0));
  end;


  function DaysInMonth(Month, Year : Integer) : Integer;
    {-Return the number of days in the specified month of a given year}
  begin
    case Month of
      1, 3, 5, 7, 8, 10, 12 :
        DaysInMonth := 31;
      4, 6, 9, 11 :
        DaysInMonth := 30;
      2 :
        DaysInMonth := 28+Ord(IsLeapYear(Year));
    else
      DaysInMonth := 0;
    end;
  end;
  
var
  God, NomDay, TempNomDay, CurMonth : integer;

begin
  WriteLn('Введите год (>1900): ');
  Readln(God);
  if God<1900 then begin
    WriteLn('#ошибка: год слишком мал... Bye...');
    Halt;    
  end;
  WriteLn('Введите номер дня в году (>0 и <367): ');
  Readln(NomDay);
  if (NomDay<1) or (NomDay>(365+Ord(IsLeapYear(God)))) then begin
    WriteLn('#ошибка: неверный номер дня в ',God:1,' году! Bye...');
    Halt;    
  end;
  CurMonth := 1;
  TempNomDay := NomDay;
  while TempNomDay>DaysInMonth(CurMonth,God) do
  begin
    TempNomDay := TempNomDay - DaysInMonth(CurMonth,God);
{    if TempNomDay>DaysInMonth(CurMonth+1,God) then}
    Inc(CurMonth);
  end;
  
  WriteLn(NomDay:1,'-й день - это ',
     TempNomDay:1,' ',MonthName[CurMonth],' ',God:1,' года.');
  Readln;
end.
p.s. високосный/невисокосный года учитываются.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прописать текущую дату vostok Microsoft Office Excel 8 06.09.2009 19:39
Преобразовать в дату Iskin Microsoft Office Excel 2 14.04.2009 07:57
Преобразовать в дату Marvel Microsoft Office Excel 21 22.01.2009 06:42
Как вычислить дату? Askat Общие вопросы Delphi 4 21.08.2007 10:27