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

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

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

 
 Ответить  Открыть новую тему 
> Определение даты (записи)
Amro
сообщение 3.01.2004 20:31
Сообщение #1


Пионер
**

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

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


smile.gif Люди подкиньте идейку!!!!
Вот условие программы:

Цитата
Определить дату, которая наступит через m дней.


Таким образом из условия видно, что программа должна запрашивать месяц и дату, а также само число m... Но я не могу найти сам алгоритм решения этой задачи... а именно каким образом программа будет искать это число и месяц...

Саму прогу необходимо написать при помощи записи...


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 3.01.2004 21:00
Сообщение #2


Четыре квадратика
****

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

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


вот без записей... куда их вставить, непонятно.
Дату берет сегодняшнюю

Код

uses DOS;
const days: array[1..12] of byte=(31,29,31,30,31,30,31,31,30,31,30,31);
var plus, Year, Month, Day,week_nr : word;

begin
   GetDate(Year, Month, Day, week_nr);
   ReadLn(plus);
   while plus>days[month] do begin
       dec(plus, days[month]);
       inc(year,month+1 div 12);
       month:=(month+1) mod 12;
   end;

   inc(day, plus);
   if day > days[month] then begin
       day:=day mod days[month];
       inc(month)
   end;

   writeLn('Будет ',day,'.',month)
end.

Разве что вместо переменных year, month, day использовать запись date с теми же полями


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Amro
сообщение 3.01.2004 21:20
Сообщение #3


Пионер
**

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

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


Неплохо!!! Спасибо!!! Но дело в том что дату должен вводить сам я, необязательно чтоб она была сегодняшняя(год не надо вводить, только число и месяц)!!! В принципе до такой программки я и сам бы додумался, но как действовать с записями, куда их совать я  не догадываюсь...В результате действия программы она должна выводить на экран месяц и число, чтож в записи можно засунуть только месяца и ничего болеее.........Блин... не понимаю я... Но всё равно за идейку спасибо, попробую её усовершенствовать, авось что-нить и получится......


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
KRUTOY
сообщение 4.01.2004 6:52
Сообщение #4


Пионер
**

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

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


Код
record =
january:array [1..31] of integer;
...
december:array [1..31] of integer;
end;


можно конечно и попроще...вообще без записей.
а вместо GETDATA попробуй SETDATA--хотя я не пробывал;
в паскале есть специальный тип-запись--DATATIME--может это тебе поможет! ;)


--------------------
Главное - чтобы воля была, к победе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Amro
сообщение 4.01.2004 17:46
Сообщение #5


Пионер
**

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

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


Всё!!! Вот окончательный вариант решения: (может кому пригодится!!)
Код

program lab7;
uses crt,dos;
type aa=array[1..12]of integer;
var q:char;
   a:aa;
   data:record
   month:string[7];
   day,year,months:word;
   end;
j:integer;
week:word;
m:integer;
begin
repeat
clrscr;
a[1]:=31;
a[2]:=29;
a[3]:=31;
a[4]:=30;
a[5]:=31;
a[6]:=30;
a[7]:=31;
a[8]:=31;
a[9]:=30;
a[10]:=31;
a[11]:=30;
a[12]:=31;
getdate(data.year,data.months,data.day,week);
writeln('Введите число М через, которое вы хотите узнать дату:');
read(m);
j:=m;
while j<>0 do begin
           if j>a[data.months]-data.day then begin
                                   inc(data.months);
                                   data.day:=1;
                                   j:=j-a[data.months]+data.day
                                   end

else begin data.day:=data.day+j; break;end;
           end;
writeln('Дата дня: ',data.day,' месяц  ',data.months);
end.

Спасибо всем помогающим!!!


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlaRic
сообщение 4.01.2004 19:48
Сообщение #6


...
*****

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

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


Сайту пригодится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 4.01.2004 23:42
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


високосный год ещё никто не отменял вроде
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 5.01.2004 11:28
Сообщение #8


Четыре квадратика
****

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

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


А тут год вообще не рассматривается, год считается текущим (високосным). Хотя если надо, это недолго...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Amro
сообщение 6.01.2004 14:52
Сообщение #9


Пионер
**

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

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


Млин........Ошибку в собственной программе нашёл!!!
(начиная с февраля все даты путаются!!!)

Код
while j<>0 do begin
 if j>a[data.months]-data.day then begin
   inc(data.months);
   data.day:=1;
   j:=j-a[data.months]+data.day { <--- }
 end

 else begin
   data.day:=data.day+j; break;
 end;
end;


Эту самую главную часть я написал неправильно!!!! (а вернее алгоритм не правильный мне посоветовали)
Правильно надо вот так:
Код
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;


В общем вот программа полностью, со всеми доработками, думаю кому-нибудь пригодится, ведь ВУЗах одни и те же лабы пишем!!! Сайту тоже пригодится!!
Код
program Lab8_02_2;
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.


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 2.10.2024 7:56
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"