Помощь - Поиск - Пользователи - Календарь
Полная версия: Дни недели
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
murphy
Такая задача:

дана дата dd.month.yyyy и день недели
определить дату и день недели через опр. кол-во дней

дату я определил а с днем ничего в голову не лезет а завтра здавать

Код

program vp7_cale;
uses crt, strings;
const mname : array [1..12] of string [9] =('January', 'February',
                                           'March', 'April', 'May',
                                           'June', 'July', 'August',
                                           'September','October', 'November',
                                            'December');
     dname : array [1..7] of string [9] =('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');


type md = array [1..12] of byte;

procedure SetNumberOfDaysInMonth(y: word; var ar: md);
 var i:byte;
 begin
    for i:= 1 to 12 do
       case i of
         1, 3, 5, 7, 8, 10, 12: ar[i]:=31;
         2: if y mod 4 = 0 then
               ar[i]:= 29
            else
               ar[i]:=28;
         4, 6, 9, 11: ar[i]:= 30;
       end;
 end;

Function GetDayNum(d:string):byte;
  var i:byte;
    begin
      i:=0;
      repeat
        inc(i)
      until ( copy(d, 1, 3) = copy(dname[i], 1, 3) ) or (i>=7);
      GetDayNum:=i;
    end;

Function GetMonthNum(m:string):byte;
  var i:byte;
    begin
      i:=0;
      repeat
        inc(i)
      until ( copy(m, 1, 3) = copy(mname[i], 1, 3) ) or (i>=12);
      GetMonthNum:=i;
    end;


var kold: md;
   dd, dd1, mm, mm1, dday, dday1, i: byte;
   yyyy, yyyy1,nnmove, nmove: word;
   month, day: string[9];
   tmp: string;
begin
   ClrScr;

      textcolor(red); writeln('            -=  TIME MACHINE by murphy=-');
       textcolor(lightgreen);
       writeln('Please enter the today date:');
       write('   day of month:  ');  textcolor(lightgray); readln(dd);
       textcolor(lightgreen);
       write('   month:  '); textcolor(lightgray); readln(tmp); month:=tmp;
       textcolor(lightgreen);
       write('   year:   '); textcolor(lightgray); readln(yyyy);
       textcolor(lightgreen);
       write('   day of week:  '); textcolor(lightgray); readln(day);

       SetNumberOfDaysInMonth(yyyy, kold);

   writeln;
   dday:=GetDayNum(day);
   mm:=GetMonthNum(month);
   textcolor(green);
   writeln('You have chosen:');
   writeln(dd,'.', mm,'.', yyyy);
   textcolor(lightgreen);
   writeln;
   write('Enter number of days you want to move on:  ');
   textcolor(lightgray);
   readln(nmove);
   nnmove:=nmove;

   if nmove + dd <= kold[mm] then
      begin  dd1:=nmove + dd; mm1:=mm; yyyy1:=yyyy; end
   else
      begin
        dd1:=dd; mm1:=mm; yyyy1:=yyyy;
        nmove:= nmove - (kold[mm1]-dd);
        inc(mm1);
        if mm1=13 then
            begin
              mm1:=1; inc(yyyy1);
              SetNumberOfDaysInMonth(yyyy, kold);
            end;
        while nmove>=kold[mm1] do
         begin
           dec(nmove, kold[mm1]);
           inc(mm1);
           if mm1=13 then
              begin
                mm1:=1; inc(yyyy1);
                SetNumberOfDaysInMonth(yyyy, kold);
              end;
         end;
         dd1:=nmove+1;
      end;

      nnmove:=7-dday+1;
      dday1:=nnmove mod 7;

   write(dday1, '  ');
   writeln(dd1,'.', mm1,'.', yyyy1);
   readln;
end.


З.Ы. может еще посоветуете как лучше дату определить
klem4
Задача сто процентов решелась такаяже, ищи.
volvo
Частный случай этой задачи рассматривался здесь: http://forum.pascal.net.ru/index.php?showt...indpost&p=28882 Частный - потому что начальная и конечная дата должны быть в одном и том же году...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.