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

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

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

> Расчет биоритмов, Требуется помощь
Farfalla
сообщение 15.12.2007 19:33
Сообщение #1


Новичок
*

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

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


Составить программу отражения биоритмов человека на заданный интервал времени. Известно, что физическое, эмоциональное и умственное состояния изменяются со дня рождения циклически с периодом 23, 28, 33 дня соответственно. Состояние для Д-го дня со дня рождения определятся по формуле: y=sin(x1),
где x1=(Д/Р - [Д/Р])*2П при P=23,28,33.

[Д/Р] - целая часть от деления

C биоритмами ранее сталкивать не приходилось. Пыталась разобраться, но всё тщетно.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Farfalla
сообщение 17.12.2007 17:02
Сообщение #2


Новичок
*

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

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


Дальше совсем не получается. Помогите с графиками, пожалуйста.


program bio ;
uses crt;
const
Size_of_Month: array [1..12] of byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
d0, d, dd1, dd2, { День рождения, день текущий. }
m0, m, dm1, dm2, { Depeche Mode.. ;) }
y0, y, dy1, dy2,
days, dmin, dmax: integer;
tstr: string[1];
Label L1 ;

procedure SplashScreen;
var
tmp: string[1];
begin
textbackground (White) ;
textColor (Red);
ClrScr;
gotoxy (20,1) ;
Writeln('Вашему вниманию представляется программа, ');
gotoxy (18,2) ;
Writeln('которая рассчитывает биоритмы человека' );
gotoxy (20,3) ;
Writeln('на заданный интервал времени');
gotoxy (40,12) ;
writeln('Программу составила студентка');
gotoxy (40,13) ;
writeln('');
gotoxy (49,14) ;
writeln('');
gotoxy (40,15) ;
writeln('') ;
gotoxy (20,24);
writeln('Нажмите любую клавишу для продолжения');
read(tmp);
ClrScr;
end;

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);


END.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 18.12.2007 8:25
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Farfalla @ 17.12.2007 17:02) *

Помогите с графиками, пожалуйста.

Правильно я понял, что ты хочешь графики рисовать в текстовой моде? Типа как когда-то эти биоритмы распечатывали на АЦПУ? smile.gif
Или ты просто хочешь распечатывать значения синусов? Если второе, то это просто - нужно только поставить WriteLn в конце цикла в процедуре ParseGraph.
Если же первое, то придется поизвращаться с печатью пробелов.. Если нужно - я помогу.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Farfalla
сообщение 20.12.2007 2:26
Сообщение #4


Новичок
*

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

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


Цитата(Lapp @ 18.12.2007 8:25) *

Правильно я понял, что ты хочешь графики рисовать в текстовой моде? Типа как когда-то эти биоритмы распечатывали на АЦПУ? smile.gif
Если же первое, то придется поизвращаться с печатью пробелов.. Если нужно - я помогу.

Очень нужно))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Farfalla   Расчет биоритмов   15.12.2007 19:33
compiler   у Фаранова была такая задача(решение из его пример...   15.12.2007 20:04
Farfalla   Дальше совсем не получается. Помогите с графиками,...   17.12.2007 17:02
Lapp   Помогите с графиками, пожалуйста. Правильно я п...   18.12.2007 8:25
Farfalla   Правильно я понял, что ты хочешь графики рисовать...   20.12.2007 2:26
Гость   Нужен именно первый вариант. Было бы здорово, если...   19.12.2007 23:06
Lapp   Все изменения касаются только процедуры ParseGraph...   20.12.2007 6:22
Farfalla   Всё работает, большое спасибо, но сегодня мне ска...   20.12.2007 15:00
Lapp   график по идее должен представлять собой три сину...   20.12.2007 22:40
Farfalla   :blink: А тут и есть три синусоиды в одной коорд...   22.12.2007 1:04
Lapp   График должен быть не в виде текста..( Ну, дружо...   22.12.2007 4:56
Farfalla   Ну, дружочек... Я спросил тебя - тебе нужен граф...   22.12.2007 19:14
Farfalla   А с блок-схемой тут кстати как? Хотя бы этот вар...   24.12.2007 0:48
Lapp   А с блок-схемой тут кстати как? С блок-схемой че...   24.12.2007 14:32
Farfalla   С блок-схемой чего? программы? Так ты сама ее д...   25.12.2007 0:09


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



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