Определение даты (записи) |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Определение даты (записи) |
Amro |
3.01.2004 20:31
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 2 |
Люди подкиньте идейку!!!!
Вот условие программы: Цитата Определить дату, которая наступит через m дней. Таким образом из условия видно, что программа должна запрашивать месяц и дату, а также само число m... Но я не могу найти сам алгоритм решения этой задачи... а именно каким образом программа будет искать это число и месяц... Саму прогу необходимо написать при помощи записи... -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
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 с теми же полями -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
Amro |
3.01.2004 21:20
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 2 |
Неплохо!!! Спасибо!!! Но дело в том что дату должен вводить сам я, необязательно чтоб она была сегодняшняя(год не надо вводить, только число и месяц)!!! В принципе до такой программки я и сам бы додумался, но как действовать с записями, куда их совать я не догадываюсь...В результате действия программы она должна выводить на экран месяц и число, чтож в записи можно засунуть только месяца и ничего болеее.........Блин... не понимаю я... Но всё равно за идейку спасибо, попробую её усовершенствовать, авось что-нить и получится......
-------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
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--может это тебе поможет! ;) -------------------- Главное - чтобы воля была, к победе...
|
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. Спасибо всем помогающим!!! -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
AlaRic |
4.01.2004 19:48
Сообщение
#6
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Сайту пригодится!
|
___ALex___ |
4.01.2004 23:42
Сообщение
#7
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
високосный год ещё никто не отменял вроде
|
trminator |
5.01.2004 11:28
Сообщение
#8
|
Четыре квадратика Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: 4 |
А тут год вообще не рассматривается, год считается текущим (високосным). Хотя если надо, это недолго...
-------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
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. -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
Текстовая версия | 2.10.2024 7:56 |