type Tmon = (jnr, fbr, mar, apr, may, jun, jly, aug, sep, oct, nov, dec);
Tday = (mon, twu, wen, thr, fry, sat, sun);
var
d:1..31;
m:Tmon;
wd1,wd:Tday;
[Pascal] Определить день недели по числу и месяцу
Данные:
Код:
Вот написал фунуцию
Код:
{выбор количества дней в месяце}
function D_In_M (m : TMon) : integer;
var i:integer;
begin
case m of
fbr : i:=29;
apr, jun, sep, nov : i:=30;
else
i := 31;
end;
result:=i;
end;
function D_In_M (m : TMon) : integer;
var i:integer;
begin
case m of
fbr : i:=29;
apr, jun, sep, nov : i:=30;
else
i := 31;
end;
result:=i;
end;
Как определить день недели?
______________
Мозгов у нас предостаточно, но они в основном набекрень
Итак, посчитайте количество дней с начала года до заданного дня (просуммируйте в цикле количество дней во всех месяцах от января до m-1, прибавьте d). Полученный результат разделите на 7 и найдите остаток от деления (остаток:=дней_с_начала_года mod 7). Если первый день года - понедельник, номер дня недели будет равен остатку (считая, что понедельник имеет номер 1). Если первый день - не понедельник, то считайте остаток как (дней_с_начала_года+смещение) mod 7. (например, если первый день - вторник, то смещение=1). Если остаток от деления равен 0, то это воскресенье.
Что нужно изменить? Помогите, объясните...
Задача: У Васи Пупкина неожиданно сломался компьютер. Из-за отсутствия нужных материалов на ремонт понадобится N дней. Определите дату окончания ремонта, если известно, что компьютер сломался в текущем году, и ремонт должен закончиться тоже в этом году...
Код:
program Lab8_02_2; {by Volvo}
uses crt,dos;
var
q:char;
data:record
day,year,months:word;
end;
j:integer;
week:word;
m:integer;
g:word;
const
month:array[1..12] of string[7] =
('января','февраля','марта','апреля','мая','июня','июля',
'августа','сентябя','октября','ноября','декабря');
a:array[1..12] of integer =
(31,29,31,30,31,30,31,31,30,31,30,31);
begin
repeat
clrscr;
getdate(data.year,data.months,data.day,week);
g:=data.months;
writeln('Сегодняшняя дата: ',data.day,' ',month[g]);
writeln('введите число m через которое вы хотите узнать дату:');
read(m);
j:=m;
while j<>0 do begin
if j>a[data.months]-data.day then begin
j:=j-(a[data.months]-data.day);
inc(data.months);
data.day:=0;
end
else begin
data.day:=data.day+j; break;
end;
end;
g:=data.months;
writeln('Дата дня и месяц: ',data.day,' ',month[g] );
write('Вычислить еще ?(Y/N)');
q:=ReadKey;
until not (q in ['Y','y']);
end.
uses crt,dos;
var
q:char;
data:record
day,year,months:word;
end;
j:integer;
week:word;
m:integer;
g:word;
const
month:array[1..12] of string[7] =
('января','февраля','марта','апреля','мая','июня','июля',
'августа','сентябя','октября','ноября','декабря');
a:array[1..12] of integer =
(31,29,31,30,31,30,31,31,30,31,30,31);
begin
repeat
clrscr;
getdate(data.year,data.months,data.day,week);
g:=data.months;
writeln('Сегодняшняя дата: ',data.day,' ',month[g]);
writeln('введите число m через которое вы хотите узнать дату:');
read(m);
j:=m;
while j<>0 do begin
if j>a[data.months]-data.day then begin
j:=j-(a[data.months]-data.day);
inc(data.months);
data.day:=0;
end
else begin
data.day:=data.day+j; break;
end;
end;
g:=data.months;
writeln('Дата дня и месяц: ',data.day,' ',month[g] );
write('Вычислить еще ?(Y/N)');
q:=ReadKey;
until not (q in ['Y','y']);
end.
Основная переделка будет связана с тем, что значения нужно вводить и выводить не в режиме командной строки, а с/на форму через визуальные компоненты.
1. Считывание данных:
в режиме командной строки - read(m);
с формы: поместите на форму компонент Edit. По умолчанию он будет иметь имя Edit1. Считать его значение и привести к формату int можно так: m := StrToInt(Edit1.Text);
2. Вывод данных:
в режиме командной строки: writeln('Сегодняшняя дата: ',data.day,' ',month[g]);
на форму: поместите на форму компонент Label. Тогда значение выводится так: Label1.Caption := "Сегодн.дата: "+data.day+" "+month[g];
Можно выводить в Edit: Edit1.Text:=...
3. Расчет производится по нажатию кнопки. Поэтому repeat...until not (q in ['Y','y']); становится не нужен, а вся процедура расчета переносится в обработчик кнопки Button.
4. Текущую дату в delphi можно узнать с помощью функции GetLocalTime. Применение смотрите в интернете.
а не проще перевести в Console Application? тогда надо будет заменить только GetDate, т.е. скажем взять предложенную тобой GetLocalTime. ну еще поставить в uses Windows вместо crt и dos, и убрать строчку clrscr.
Цитата: kosfiz
а не проще перевести в Console Application?
Конечно проще. Но нужно же когда-то и к GUI-приложениям переходить...
Если использовать getlocaltime вместо getdate, то какие изменения нужно произвести (какие параметры), всё-таки задача такая (см сообщ 1)
Hrew уже писал GetLocalTime только надо в uses модуль windows поставить. и посмотри справку по этой функции.