Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

таблица выпадения дня рождения на дни недели
leoДата: Воскресенье, 08.06.2008, 19:58 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 9
Репутация: 0
Замечания: 0%
Статус: Offline
вводишь дату своего рождения и получаешь таблицу в которой показано сколько раз и на какой день недели выпадали дни твоего рождения

Добавлено (08.06.2008, 12:58)
---------------------------------------------
уже сколько времени бьюсь над этой задачей и ни как
Помогите ! Заранее спасибо!

 
AlexanderДата: Воскресенье, 08.06.2008, 20:58 | Сообщение # 2
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Создать массив из семи элементов(дни недели), затем определять дни недели, в которые были дни рождения и увеличивать счётчик данного дня на единицу. Про вычисление дня недели по дате смотри тут. Если всё равно что-то не получается, то пишите, что конкретно.

Скажем дружно- нафиг нужно!
 
leoДата: Понедельник, 09.06.2008, 02:33 | Сообщение # 3
Новичок
Группа: Пользователи
Сообщений: 9
Репутация: 0
Замечания: 0%
Статус: Offline
это из Фаронова, правильно? Не получается связать это и подсчет на какие дни недели выпадали дни рождения.
 
AlexanderДата: Понедельник, 09.06.2008, 04:30 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: 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
Репутация: 0
Замечания: 0%
Статус: Offline
спасибо !

Добавлено (08.06.2008, 22:07)
---------------------------------------------
последняя просьба:если не трудно напишите программу полностью связанную , а то у меня с этим проблемы

 
AlexanderДата: Понедельник, 09.06.2008, 05:12 | Сообщение # 6
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Покажите свой вариант, доведём его до ума.

Скажем дружно- нафиг нужно!
 
leoДата: Понедельник, 09.06.2008, 06:22 | Сообщение # 7
Новичок
Группа: Пользователи
Сообщений: 9
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 16
Замечания: 0%
Статус: 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
Репутация: 0
Замечания: 0%
Статус: Offline
если не трудно выложите программу полностью.
препод у нас любитель самостоятельного изучения ,
а времени и подходящей литературы под рукой мало.
и вдобавок экзаменационная неделя пошла .
заранее Спасибо!
 
AlexanderДата: Вторник, 10.06.2008, 00:28 | Сообщение # 10
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: 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
Репутация: 0
Замечания: 0%
Статус: Offline
прога работает , но кажется сама дата рождения выпадает не на тот день
по календарю проверялнесколько раз : не сходится
 
AlexanderДата: Вторник, 10.06.2008, 03:35 | Сообщение # 12
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Например? С моим днём рождения работает вполне корректно.

Скажем дружно- нафиг нужно!
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;