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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2008, 20:30   #1
JiLiYa
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 16
Счастье Отредактируйте,пожалуйста,задачу на записи, вычисляющую дату через m дней.

Доброго время суток!
Задача: 18. Написать программу, определяющую дату, которая наступит через m дней.
Как сделать так,чтобы корректно выдавались даты?Не могу понять,что не так...программа не хочет перескакивать на следующий месяц, а выдает даты типа 55 декабря и тому подобное.

Вот такой код.....
Заранее благодарю


Код:
Program DataM;
Type
   mounth = (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
   day = 1..31;
   year = 1900..2000;
Var
   d : day;
   mon : mounth;
   g : year;
   num : 1..12;
   m:integer;
Begin
   Write('vvedite chislo, nomer mesyaca i god');
   Readln(d,num,g); 
   Write('vvedite chislo dnei');
   Readln(m);
   Case num of
       1 : mon:= jan;
       2 : mon:= feb;
       3 : mon:= mar;
       4 : mon:= apr;
       5 : mon:= may;
       6 : mon:= jun;
       7 : mon:= jul;
       8 : mon:= aug;
       9 : mon:= sep;
       10 : mon:= oct;
       11 : mon:= nov;
       12: mon:= dec;
   End;
   Case mon of       
   jan, mar, may, jul, aug, oct : If d = 31 then
                                  begin
                                       d := 1; mon := succ(mon)
                                  end
                                  else d := d + m;
   apr, jun, sep, nov    : If d = 30 then
                              begin
                                  d := 1; mon := succ(mon)
                              end
                              else d := d + m;
   dec                     : If d = 31 then
                              begin
                                  d := 1; mon := jan; g := g + 1
                              end
                              else d := d + m;
   feb                    : If (( d = 28) and ((g mod 4 <> 0) or (g mod 100 = 0))
                              and (g mod 400 <> 0)) or (d=29) then
                              begin
                                                                     
                            d := 1; mon := succ(mon);
                         end
                         else d := d + m
    end; { case }
    

    Write('iskomaya data: ', d : 2);
    Case mon of
       jan: write(' january ');
       feb: write(' february ');
       mar: write(' march ');
       apr: write(' april ');
       may: write(' may ');
       jun: write(' june ');
       jul: write(' july ');
       aug: write(' august ');
       sep: write(' september ');
       oct: write(' october ');
       nov: write(' november ');
       dec: write(' december ')
    end; { case }

    Writeln(g : 5,' year ')
    ;Readln;
End.
JiLiYa вне форума Ответить с цитированием
Старый 25.12.2008, 20:58   #2
pomoshnic
Форумчанин
 
Аватар для pomoshnic
 
Регистрация: 16.11.2008
Сообщений: 192
По умолчанию

Вот исправленный код:
Код:
Program DataM;
Type
   mounth = (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
   day = 1..31;
   year = 1900..2500;
Var
   d : day;
   mon : mounth;
   g : year;
   num : 1..12;
   m:integer;
Begin
   Write('vvedite chislo, nomer mesyaca i god');
   Readln(d,num,g);
   Write('vvedite chislo dnei');
   Readln(m);
   Case num of
       1 : mon:= jan;
       2 : mon:= feb;
       3 : mon:= mar;
       4 : mon:= apr;
       5 : mon:= may;
       6 : mon:= jun;
       7 : mon:= jul;
       8 : mon:= aug;
       9 : mon:= sep;
       10 : mon:= oct;
       11 : mon:= nov;
       12: mon:= dec;
   End;
   while m<>0 do
   begin
   Case mon of
   jan, mar, may, jul, aug, oct : If d = 31 then
                                  begin
                                       d := 1; mon := succ(mon)
                                  end
                                  else d := d + 1;
   apr, jun, sep, nov    : If d = 30 then
                              begin
                                  d := 1; mon := succ(mon)
                              end
                              else d := d + 1;
   dec                     : If d = 31 then
                              begin
                                  d := 1; mon := jan; g := g + 1;
                              end
                              else d := d + 1;
   feb                    : If (( d = 28) and ((g mod 4 <> 0) or (g mod 100 = 0))
                              and (g mod 400 <> 0)) or (d=29) then
                              begin

                            d := 1; mon := succ(mon);
                         end
                         else d := d + 1;
    end; { case }
    m:=m-1;;
    end;

    Write('iskomaya data: ', d : 2);
    Case mon of
       jan: write(' january ');
       feb: write(' february ');
       mar: write(' march ');
       apr: write(' april ');
       may: write(' may ');
       jun: write(' june ');
       jul: write(' july ');
       aug: write(' august ');
       sep: write(' september ');
       oct: write(' october ');
       nov: write(' november ');
       dec: write(' december ')
    end; { case }

    Writeln(g : 5,' year ');
    Readln
End.
pomoshnic вне форума Ответить с цитированием
Старый 26.12.2008, 09:29   #3
JiLiYa
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 16
По умолчанию

Большое спасибо
JiLiYa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос. Найти текущую дату в колонке через Find Leanna Microsoft Office Excel 5 19.12.2008 17:06
Помогите решить задачу на записи (Паскаль) mpegable Помощь студентам 1 16.06.2008 23:55
Добавление кол-во дней в дату D@rk M@k Общие вопросы Delphi 1 19.04.2008 10:19
Помогите, пожалуйста, решить задачу на Turbo Pascal. Тема: записи. Morrigan13 Помощь студентам 1 28.03.2008 21:09