IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с записями, Вывод даты
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


хм,у меня проблемка есть.странно, но я написал код для проги которая считает количество дней после введённой даты а чтоб было до, не могу только месяцы правельно считает а дни и год нет.помогите исправить чтоб считала до а не после.
вот код проги кот считает после введённой даты:


Код
Program L;
Uses crt;
Type god=record
     mes:1..12;
     den:1..31;
     god1:integer;
end;
Var vek:array[1..255] of god;
i,m,j,c,g:integer;
Begin repeat
ClrScr; c:=0;
with vek[1] do begin
 repeat write('месяц '); c:=c+1; readln(mes); until mes<13;
 repeat write('день '); c:=c+1; readln(den); until den<32;
 write('год'); readln(god1); c:=c+1;
end;
repeat write ('‚введите число'); c:=c+1; readln(m); until m<256;
m:=m+1;
for i:=2 to m do
 with vek[i] do begin
  god1:=vek[i-1].god1;
  mes:=vek[i-1].mes;
  den:=vek[i-1].den+1;
  g:=god1 mod 4;
  case mes of
   1,3,5,7,8,10,12:if den>31 then begin
                    den:=den-31; mes:=mes+1; end;
   2:if g=0 then begin
      if den>29 then begin
       den:=den-29; mes:=mes+1; end;
      end
      else
       if den>28 then begin
        den:=den-28; mes:=mes+1; end;
   4,6,9,11:if den>30 then begin
             den:=den-30; mes:=mes+1; end;
  end;
  if mes>12 then begin
   mes:=mes-12; god1:=god1+1;
  end;
 end;
writeln('************************************');
c:=c+1;
write('*  ');
write(vek[m].den,'.');
case vek[m].mes of
 1:write('января.');   2:write('февраля.');
 3:write('марта.');    4:write('апреля.');
 5:write('мая.');      6:write('июня.');
 7:write('июля.');     8:write('августа.');
 9:write('сентебря.'); 10:write('октебря.');
 11:write('ноября.');  12:write('декабря.');
end;
writeln(vek[m].god1);
gotoxy(36,c+1); writeln('*');
writeln('************************************');
write('Exit(1..9) '); readln(i);
until i<>0;
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(shyrik @ 7.02.05 21:32)
помогите исправить чтоб считала до а не после.

blink.gif Это что значит?

А вообще-то вот тут есть прекрасный модуль для работы с датами. Посмотри, что непонятно - спрашивай...
Модуль для работы с датами
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Цитата
Это что значит?

это значит чтоб программа выдаёт дату которая будет через н количество дней,а надо наоборот чтоб выводила до. особенно это касается дней, а то у меня при изменений ниже приведённого кода она выдаёт неправильную дату да ещё с минусом,месяцы же считает нормально,а год ваще не считает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






По ссылке ходил?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






shyrik
Я поменял логику работы программы...
{ Функция проверки, високосный ли год}
function bsYear(n: Word): Boolean;
begin
bsYear := ((n mod 4) = 0) and
not (((n mod 100) = 0) and ((n mod 400) <> 0))
end;

const
monthes: array[1 .. 12] of integer =
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
month_name: array[1 .. 12] of string[3] =
('jan', 'feb', 'mar', 'apr', 'may', 'jun',
'jul', 'aug', 'sep', 'oct', 'nov', 'dec');

type
TData =
record
day: 1 .. 31;
month: 1 .. 12;
year: word;
end;

var
current: TData;
from_start_year: longint;
to_sub: integer;

m_ix: integer;
begin
{ Ввод даты }
with current do
begin
repeat write('месяц: '); readln(month) until month <= 12;
repeat write('день: '); readln(day); until day <= monthes[month];
write('год: '); readln(year)
end;

write('сколько дней отнять (до 256): '); readln(to_sub);

from_start_year := 0;
for m_ix := 1 to pred(current.month) do
begin
inc(from_start_year, monthes[m_ix]);
if (m_ix = 2) and bsYear(current.year) then
inc(from_start_year);
end;
inc(from_start_year, current.day);
{ Сейчас в переменной from_start_year хранится
число дней от начала года до введенной даты... }

dec(from_start_year, to_sub);
if from_start_year < 0 then
begin
dec(current.year);
inc( from_start_year, 365 + byte(bsYear(current.year)) )
end;

m_ix := 1;
while from_start_year > monthes[m_ix] do
begin
dec(from_start_year, monthes[m_ix]);
if (m_ix = 2) and bsYear(current.year) then
dec(from_start_year);
inc(m_ix)
end;
current.month := m_ix;
current.day := from_start_year;

with current do
writeln( day, ':', month_name[month], ':', year);

end.

Должно работать... Я ее протестировал на 3-4 значениях (и в одном году, и с переходом в предыдущий). Но мало ли что... Найдешь баги - говори, исправим :yes:
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.05.2024 15:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name