• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Найдите, пожалуйста, ошибку

  • Автор темы Автор темы N@tali
  • Дата начала Дата начала

N@tali

Новые
Регистрация
2 Янв 2011
Сообщения
18
Реакции
0
Баллы
0
Найдите, пожалуйста, ошибку

Дано 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.
 
Ошибка в том, что переменной d Вы присваиваете значение типа "диапазон" 1..31, а в запросе воскресенью соответствует недопустимое значение "0".
 
подскажите пожалуйста, а где именно лучше исправить.... и правильно ли я оформила задачу...неуверенна че то громоздко у меня для такой задачи...есть ли вариант ее как то упростить
 
Последнее редактирование:
Да уж... что есть, то есть. Ладно, сейчас попробую прикинуть.
 
Спасибо вам огромное.... вы гений... а я ток учусь... маленько то начала во все вникать....там вроде я перемудрила надо цикл задать до марта токо а я вроде до ноября поставила... в общем запуталась уже
 
Я бы вообще ограничился чем-нибудь простеньким, вроде вот такого:
Код:
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.
 
Супер. Спасиб огромное.... жаль не могу вам еще плюсик...не дают
 
Назад
Сверху