1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Составить программу отражения биоритмов человека на заданный интервал времени. Известно, что физическое, эмоциональное и умственное состояния изменяются со дня рождения циклически с периодом 23, 28, 33 дня соответственно. Состояние для Д-го дня со дня рождения определятся по формуле: y=sin(x1), где x1=(Д/Р - [Д/Р])*2П при P=23,28,33.
[Д/Р] - целая часть от деления
C биоритмами ранее сталкивать не приходилось. Пыталась разобраться, но всё тщетно.
procedure iDates(var d0, m0, y0, d, m, y, dd1, dm1, dy1, dd2, dm2, dy2: integer); var isCorr: boolean;
procedure rDate(wel: string; var d, m, y: integer); const ymin = 1800; ymax = 2200; begin repeat Write('Введите ' + wel + ' в формате ДД ММ ГГГГ: '); ReadLn(d, m, y); isCorr := (y >= ymin) and (Y <= ymax) and (m >= 1) and (m <= 12) and (d > 0);
if isCorr then if (m = 2) and (d = 29) and (y mod 4 = 0) then {foo bar, ибо этого дня не существует..} else isCorr := d <= Size_of_Month[m]; if not isCorr then WriteLn('Ошибка в дате'); until isCorr; end;
begin repeat rDate('дату рождения', d0, m0, y0); rDate('текущую дату', d,m,y); {test for corr. input} isCorr := y > y0; if not isCorr and (y = y0) then begin isCorr := m > m0; if not isCorr and (y = y0) then begin isCorr := m > m0; if not isCorr and (m = m0) then isCorr := d >= d0; end; end; until isCorr; rDate('начальную дату диапазона поиска', dd1, dm1, dy1); rDate('конечную дату диапазона поиска', dd2, dm2, dy2); end;
procedure getDays (d0, m0, y0, d, m, y: integer; var days: integer);
Procedure mLoop; var mm: integer; begin mm := m0; while mm < m do begin days := days + Size_of_Month[mm]; if (mm = 2) and (y0 mod 4 = 0) then inc(days); inc(mm); end; end;
procedure ymLoop; var mm, yy: integer; begin mm := m0 + 1; while mm <= 12 do begin days := days + Size_of_Month[mm]; if (mm = 2) and (y0 mod 4 = 0) then inc(days); inc(mm); end; yy := y0 + 1; while yy < y do begin days := days + 365; if yy mod 4 = 0 then inc(days); inc(yy); end; mm := 1; while mm < m do begin days := days + Size_of_Month[mm]; if (y mod 4 = 0) and (mm = 2) then inc(days); inc(mm); end; end;
begin if (y = y0) and (m = m0) then
days := d - d0 else begin days := d + Size_of_Month[m0] - d0; if (y0 mod 4 = 0) and (m0 = 2) then inc(days); if y = y0 then mLoop else ymLoop; end;
end;
procedure parseGraph(d0, m0, y0, dmin, dmax: integer); const pPhisics = 2*3.1416/23.6884; pEmo = 2*3.1416/28.4261; pIntellect = 2*3.1416/33.1638; var dall, dcurr, i: integer; rP, rE, rI: real; begin dall := dmax - dmin; if dall < 0 then begin WriteLn('Ошибка: Начальная точка периода привышает конечную.'); end; for i := 0 to dall do begin dcurr := dmin + dall; rP := sin(dcurr * pPhisics); rE := sin(dcurr * pEmo); rI := sin(dcurr * pIntellect); write(' ['); write(rP); write(' | '); write(rE); write(' | '); write(rI); write('] '); end end;
BEGIN { main proc. } SplashScreen; iDates(d0, m0, y0, d, m, y, dd1, dm1, dy1, dd2, dm2, dy2); getDays(d0, m0, y0, d, m, y, days); getDays(d0, m0, y0, dd1, dm1, dy1, dmin); getDays(d0, m0, y0, dd2, dm2, dy2, dmax); parseGraph(d0, m0, y0, dmin, dmax); read(tstr);