таблица выпадения дня рождения на дни недели
|
|
leo | Дата: Воскресенье, 08.06.2008, 19:58 | Сообщение # 1 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| вводишь дату своего рождения и получаешь таблицу в которой показано сколько раз и на какой день недели выпадали дни твоего рождения Добавлено (08.06.2008, 12:58) --------------------------------------------- уже сколько времени бьюсь над этой задачей и ни как Помогите ! Заранее спасибо!
|
|
| |
Alexander | Дата: Воскресенье, 08.06.2008, 20:58 | Сообщение # 2 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Создать массив из семи элементов(дни недели), затем определять дни недели, в которые были дни рождения и увеличивать счётчик данного дня на единицу. Про вычисление дня недели по дате смотри тут. Если всё равно что-то не получается, то пишите, что конкретно.
Скажем дружно- нафиг нужно!
|
|
| |
leo | Дата: Понедельник, 09.06.2008, 02:33 | Сообщение # 3 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| это из Фаронова, правильно? Не получается связать это и подсчет на какие дни недели выпадали дни рождения.
|
|
| |
Alexander | Дата: Понедельник, 09.06.2008, 04:30 | Сообщение # 4 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Ну программа будет выглядить примерно так: Code while y<>now do begin Inc(Days[GetDay(m,d,y,c)]); Inc(y); If y=100 then begin Inc(c); y:=0; end; end; Здесь Days-это массив типа byte из семи элементов, а GetDay- функция, которая по дате возвращает день недели.
Скажем дружно- нафиг нужно!
|
|
| |
leo | Дата: Понедельник, 09.06.2008, 05:07 | Сообщение # 5 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| спасибо ! Добавлено (08.06.2008, 22:07) --------------------------------------------- последняя просьба:если не трудно напишите программу полностью связанную , а то у меня с этим проблемы
|
|
| |
Alexander | Дата: Понедельник, 09.06.2008, 05:12 | Сообщение # 6 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Покажите свой вариант, доведём его до ума.
Скажем дружно- нафиг нужно!
|
|
| |
leo | Дата: Понедельник, 09.06.2008, 06:22 | Сообщение # 7 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| var isCorrectDate:boolean; d,m,y:integer; Procedure inputDate(var d,m,y :integer; var correctly:boolean); begin write('Vvedite datu v formate DD MM YYYY: '); readln(d,m,y); correctly:=(d>=1) and (d<=31) and (m>=1) and (m<=12) and (y>=1900) and (y<=2008) end; Procedure WriteDay(d,m,y:integer); const Days_of_week:array [0..6] of string [11] = ('voskresenie','ponedelnik','vtornik', 'sreda','chetverg','pyatniza','subbota'); var c,w:integer; begin if m<3 then begin m:=m+10; y:=y+1 end else m:=m-2; c:=y div 100; y:=y mod 100; w:=abs(trunc(2.6*m-0.2)+d+y div 4+y+c div 4-2*c) mod 7; end; begin repeat inputdate(d,m,y,iscorrectdate); if iscorrectdate then writeday(d,m,y) until not iscorrectdate end. как у Фаронова,но связать не могу.
|
|
| |
Alexander | Дата: Понедельник, 09.06.2008, 22:31 | Сообщение # 8 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Quote как у Фаронова,но связать не могу. Понятия не имею, кто такой Фаронов. Пользуйтесь тегами [cоde], а то читать невозможно. Quote Procedure inputDate(var d,m,y :integer; var correctly:boolean); Кто вас этому научил? Очевидно, что проще и быстрее сделать функцию, а за такое вешать надо. Quote until not iscorrectdate Почему not??? цикл прервётся, как только значение станет истинным, т.е. в вашем случае только после ввода неверных данных! Вашу процедуру WriteDay мне так и не удалось понять. Это должна быть функция, плюс перевод у вас какой-то странный я бы делал так: Code function WriteDay(d,m:byte;y:word):byte; var c:byte; begin m:=(m+10) mod 12; if m=0 then m:=12; if m>=11 then Dec(y); c:=y div 100; y:=y mod 100; WriteDay:=abs(trunc(2.6*m-0.2)+d+y div 4+y+c div 4-2*c) mod 7; end; А затем в цикле использовал: Code while y<>2008 do begin Inc(x[writeday(d,m,y)]); Inc(y); end; А ваш стринговый массив точно не нужен, нужен массив типа byte.
Скажем дружно- нафиг нужно!
|
|
| |
leo | Дата: Вторник, 10.06.2008, 00:04 | Сообщение # 9 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| если не трудно выложите программу полностью. препод у нас любитель самостоятельного изучения , а времени и подходящей литературы под рукой мало. и вдобавок экзаменационная неделя пошла . заранее Спасибо!
|
|
| |
Alexander | Дата: Вторник, 10.06.2008, 00:28 | Сообщение # 10 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Code uses crt; {============================================================================} function inputDate(var d,m:byte;var y :word):boolean; begin write('Vvedite datu v formate DD MM YYYY: '); readln(d,m,y); inputDate:=(d>=1) and (d<=31) and (m>=1) and (m<=12) and (y>=1900) and (y<=2008) end; {============================================================================} function WriteDay(d,m:byte;y:word):byte; var c:byte; begin m:=(m+10) mod 12; if m=0 then m:=12; if m>=11 then Dec(y); c:=y div 100; y:=y mod 100; WriteDay:=abs(trunc(2.6*m-0.2)+d+y div 4+y+c div 4-2*c) mod 7; end; var d,m:byte; y:word; x:array[0..6] of byte; begin ClrScr; for d:=0 to 6 do x[d]:=0; repeat until inputdate(d,m,y); while y<>2008 do begin Inc(x[writeday(d,m,y)]); Inc(y); end; for d:=0 to 6 do Write(x[d]:4); ReadKey; end.
Скажем дружно- нафиг нужно!
|
|
| |
leo | Дата: Вторник, 10.06.2008, 03:24 | Сообщение # 11 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| прога работает , но кажется сама дата рождения выпадает не на тот день по календарю проверялнесколько раз : не сходится
|
|
| |
Alexander | Дата: Вторник, 10.06.2008, 03:35 | Сообщение # 12 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Например? С моим днём рождения работает вполне корректно.
Скажем дружно- нафиг нужно!
|
|
| |