Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Найдите, пожалуйста, ошибку (http://www.tehnari.ru/f43/t45683/)

N@tali 16.01.2011 19:49

Найдите, пожалуйста, ошибку
 
Дано 2 числа. D-число, M-месяц, дана дата 20 мая. Указать какой день недели. Условия: год не високосный, 1 января воскресенье.



Код:

uses crt;
type day=1..31;
  month=(jan,fv,mr,ap,mj,jun,jul,av,sn,oc,nb,dc);
  {week=(vs,pn,vt,sr,ch,pt,sb); }
var d:day; 
 m:month; 
 {wdl,wd:week;}
  k:0..12;
  a:array[jan..dc] of day;
 s,os:word;
begin
clrscr;
for m:=jan to nb do
case ord(m) of
0:a[m]:=31;
3,5,8,10:a[m]:=30;
1:a[m]:=28;
else a[m]:=31;
end;
writeln('День недели 01.01 января');
writeln('0-воскресенье 1-понедельник 2-вторник 3-среда 4-четверг 5-пятница 6-суббота');
readln(d);
if d<4 then os:=3-d else os:=10-d; {нужный остаток от деления на 7}
s:=0;k:=0;
for m:=jan to nb do
 begin
  if s mod 7=os then k:=k+1;
  {если количество всех предшествующих дней в остатке от деления на 7 дает нужное число}
  end;
write('День недели будет',k);
readln;
end.


Vladimir_S 16.01.2011 21:38

Ошибка в том, что переменной d Вы присваиваете значение типа "диапазон" 1..31, а в запросе воскресенью соответствует недопустимое значение "0".

N@tali 16.01.2011 21:55

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

Vladimir_S 16.01.2011 22:00

Да уж... что есть, то есть. Ладно, сейчас попробую прикинуть.

N@tali 16.01.2011 22:07

Спасибо вам огромное.... вы гений... а я ток учусь... маленько то начала во все вникать....там вроде я перемудрила надо цикл задать до марта токо а я вроде до ноября поставила... в общем запуталась уже

Vladimir_S 16.01.2011 22:22

Я бы вообще ограничился чем-нибудь простеньким, вроде вот такого:
Код:

Const
 DoM:Array[1..12] of Word=(31,28,31,30,31,30,31,31,30,31,30,31);
Var
 Month,Date,i,m:Byte;
 ND:Word;
BEGIN
 Write('Month (1-12) = ');
 ReadLn(Month);
 Write('Date = ');
 ReadLn(Date);
 ND:=0;
 For i:=1 to Month-1 do
  ND:=ND+DoM[i];
 ND:=ND+Date;
 m:=ND mod 7;
 Case m of
  0:WriteLn('Saturday');
  1:WriteLn('Sunday');
  2:WriteLn('Monday');
  3:WriteLn('Tuesday');
  4:WriteLn('Wednesday');
  5:WriteLn('Thursday');
  6:WriteLn('Friday');
  end;
 ReadLn;
END.


N@tali 16.01.2011 22:28

Супер. Спасиб огромное.... жаль не могу вам еще плюсик...не дают


Часовой пояс GMT +4, время: 07:34.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.