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

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

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

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


Пионер
**

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

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


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

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


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

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


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


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


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


Пионер
**

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

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


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


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


--------------------
Главное - чтобы воля была, к победе...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


...
*****

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

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


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


Бывалый
***

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

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


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


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

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

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


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


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 




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