Мазмұны
1.Кiрiспе...................................................3
2.Жұмыстың тағайындалуы және
оның қолдану аумағы.Есептiң
шарты....................................................4
3.Қолданылған әдістер,
алгоритмын сипаттамасы
программаның құрама бөліктері
мен өз ара байланыстарың
сипаттамасы..........................................5
4.Кiрiс және шығыс мәлiметтердiң
сипаттамасы..........................................7
5.Қолданушыға арналған нұсқау.........10
6.Шешiм.................................................11
7.Әдебиеттiң тiзiмi................................12
8.Қосымша 1. Программа тізбесі.........13
9.Қосымша 2. Жұмыс нәтижесі...........21
Кiрiспе
Pascal программалау тiлiн Швейцария ғалымы Николас Вирт 1973 жылы жасаған және атақты француз физигі, математигі және әлемдегі бiрiншi (1641 ) (қосатын ) есептеуiш машинаның авторы болып табылған философ Блез Паскальдің (1623-1662 ) атымен атады. Тiл басында программалауға үйренудiң мақсаттары үшiн жасалды. Тiлдiң авторының сөздерi бойынша «... Паскаль тiлiнiң өңдеуi екi маңызды тұжырымдамаларға негiзделдi. Бiрiншiсi бұл табиғи тiл жүйелi түрде пәнге ашық, үйренуге ыңғайлы программалау тiлін ойлап шығаруда болды. Екiншiсі iргелi жағдайларға негiзделетiн қазiргi ЭЕМ-дерде қолдануға сенiмдi және тиiмдi болар едi. Блез Паскаль бұл тiлдiң нақты ұсыныстарының өңдеуiн ойлады. Вирттың пікірінше « студенттің оқитын тілі оның ойлау қабілетіне, ойлау әдiсiне және тапқырлыққа айтарлықтай ықпал етедi. қазiргi тiлдерде орын алған тәртiпсiздiк студенттердiң программалау стиліне тiкелей ықпал етедi.» Қазiргі уақытта Вирт өзінің алдына қойған мақсаттарына жетті деп сенiмдiлiкпен айтуға болады.
Паскаль тiлі программалауға үйренуде ең жақсы тiл болумен қатар, ол қазiргi ЖЭСМ-дерiне оңай iске асырылатын, жүйелiк программалауда қарапайым тiлiн қолдану ғана емес, қуатты тiлдердi жасауға арналған базасы болып табылады.
2.Жұмыстың тағайындалуы және оның қолдану аумағы.
Есептiң шарты.
Адамның творчестволық және физикалық белсендiлiгi бұрыннан белгілі болғандай
тұрақты болып тұрмай, циклдап өзгередi, және де оның өзгерiсiнiң мерзiмдiлiгi айдың жерді айналу кезеңiне шамамен сәйкес келеді.Адамның физикалық, эмоционалдық және интеллектуалдық белсендiлiгі биоритмдарға бағынатындығы туралы теория бар. Әрбiр биоритм қатал тұрақты мерзiмi бар синусоида түрінде болады және де әрбiр биоритмға сәйкес өз мерзiмi болады. Жеке алған күндерде адамның барлық үш биоритмы өз максимумына жете алады, сол уақытта адам творчестволық және физикалық күштерінің артуын сезеді, осындай күндері адам басқа уақыттарда күрделiрек болатын мәселелерді оңай шешеді.Сонымен қатар барлық үш биоритмдарға тиісті төмен құлдырайтын « қара» күндер болады.
Бұл программада адамның туу күнімен қатар оның күйiн бағалауға керек болатын датаны да сұрайды. Жұмыс кезеңінде көрсетілген уақытқа жақын кезеңдегі болатын биоритмнің өсуі мен төмендеуін есептеп экранға көрсетеді
3. Қолданылған әдістер,
алгоритмын сипаттамасы программаның құрама бөліктері мен өз ара байланыстарың сипаттамасы.
Программаның алгоритмін төмендегiше ірiлендiрiліп жазып алуға болады:
Туу датасы және ағымдағы датаны енгiзу.
|
Олардың дұрыстығын және қайшылық еместiгін тексеру.
|
Ағымдағы датаға арналған синусоидалардың фазасын анықтау үшiн екi даталардың арасындағы күндердiң саны есептеу.
|
Ағымдағы датаға жақын уақыттағы биоритмнің өсуі мен кемуі арасындағы күндерді есептеу.
|
Екі датаны анықтап ,басып шығару.
|
Бәсеңдейтiн программалауды әдiстеменi қолданамын.
Туу датасы және ағымдағы датаның арасындағы күндерді есептеуiн жеңiлдетулерi үшiн. Size_of_month айдың ұзындығы массивын қолданамын және кризистiк күндер датасын анықтап оның дұрыстығын тексеру үшін үшін глобальді жасаймын. Сонымен жоғарыда айтылған массив үш процедураларда қолданылады.
Күндердің санын есептеу кезенінде екi датаны айырғыш күндерде (туу мен кәзіргі ағымдағы) сандары есептеуде, даталардың арасында қайшылық еместiктiң бақылауынан басқа енгiзiлген (минималды және максимальдық дұрыс даталар1900 және 2100 жылдар болуы мүмкiндігі)төмендегі жағдайлар есепке алынуы керек:
-
Бір айлық бөбек (жылы мен айы бірдей болғанда )-күндер саны екі сан айырмасымен табылады.
-
Жылдық бөбек ( екі датаның жылдары бірдей болғанда) сонда күндер саны –( туған айдағы қалған күндер)+(ағымдағы айдағы күндер саны )+(екі датаны бөлетін айлар арасындағы күндер );
-
Ортақ вариант ( айырмасы жылдарда)-онда күндер саны –( туу күнінен бастап жылдың аяғына дейінгі күндер саны )+ (жылдар айырмасындағы күндер саны +(ағымдағы жылдын басынан бері күндер саны).
Бұл варианттардың барлықтары GET_NUMBERS_OF_DAYS процедураларында есепке алынады.
VARIANT2 және VARIANT3 - қосалқы процедуралар. Олар арқылы негiзгi программамен глобалдi айнымалы арқылы байланысу үшін қолданылады.
FINDMAXMIN процедурасында кризистiк күндердiң iздестiреді, демек барлық үш биоритм өз максимумы және минимумдарға жететiн ағымдағы датаға ең жақын кундерді іздейді.Биоритмдар синусоидаль тәуелдiлiктерiне өмiр сүрiлген күндердiң саны бойынша өзгеретіндіктерін ескере , TF, TE және TI мерзiмдерiнде адамның физикалық, эмоциональдық және интелектуальдық белсендiлiгiнiң сәйкестігі ер-әйелдер үшiн ортақ шамалы болып табылатындығын қабылдаймын.
Келесi мерзiмдерді қабылдаймын (күндердегi)
TF 23.6884 физикалық белсендiлiктiң
мерзiмi
TE 28.4261 эмоционалдық белсендiлiктiң мерзiмi
TI 33.1638 интелектуалдық белсендiлiктiң мерзiмi
Ағымдағы осы күнге және одан кейінгі күндерге кризистік күндердiң iздестiруi бірінші максимумның немесе минимумға алдын ала интервалда анықталады, осы жағдайда 30 күн.
WRITEDATES 2~ процедурасы арқылы программаның жұмысының нәтижелерi экранда шығарылады. Өйткені, есептеу екi рет жүргiзiледi, биоритмнің өсу датасы мен кему датасына, сондықтан WRITEDATE жеке процедурасына көтерiп шығару орынды.
4. Кiрiс және шығыс мәлiметтердiң сипаттамасы.
Бастапқы деректерді енгізу (адамның туу датасы және ағымдағы дата ) сурау бойынша ДД ММ ГГГГ форматында жазылады (айнымалы түрi, бұл мәндер тиiстi Integer ).
Экранға биоритмның өсу датасы мен кему датасын шығару үшін ең қолайлы күндер немесе ең қолайсыз күндерде Integer- типін қолданамын. Өмiрдi ұзақтығы туралы мәліметтерді сағат, минут және секунд түрінде шығару үшін Longintтi («ұзын» бүтін) қолданамын, өйткені Integer диапазонның түрiне мәлiметтердiң мәндерi -32768 ден +32767ге дейін болуы мүмкiн.
Егер адамның орташа өмiрi 70 жыл деп есептесек жанында ұзақтық ескерсе, демек 25550 күн демегi, және сәйкесiнше 36792000 сағат,онда тек кана Longint типті мәлімттер – 2147483648 дан +2147483647 мәндер аралығында керек.
Программалық және аппараттық жұмысын дұрыс қамтамасыз етуi үшін Turbo Pascal 7.0 программасы керек, орындалатын файлдың жоқ болғанында MS-DOS 6.0 немесе Windows 95- тен жоғары MS-DOSтың эмуляциясы бар басқару жүйесi керек .
5. Қолданушыға арналған нұсқау
Бастапқы деректердiң енгiзуi программаның сұрау салуы бойынша клавиатурадан iске асырылады. Мәлiметтер көрcетiлген қалыпты ұстап уұра қатал енгізу керек : ДД ММ ГГГГ күнге екі символ айға екі символ және жылға төрт символ енгізу керек, күн, ай, жыл мәндерін бос орын арқылы бөлу керек. Мәлiметтер жолын енгiзуiн аяқтағанын ENTER арқылы растаймыз.
6. Шешiм
Адам организмінің психо-физикалық параметрлерiнің максимум және минимум күндерiн анықтауына қызмет көрсетедi. Адамдардың күнделікті өмірінде аса маңызды шараларды жоспарлауға қолдануға болады, мысалы : белсендi спортпен шұғылданатындарға белсенді жаттығу күндерін анықтау үшін, сұхбат беру үшін, саясатшыларға арналған ашық сөз сөйлеулер үшін, кәсiпкерлерге арналған аса маңызды келiссөздердiң жүргiзу үшін, әрі сол сияқты.
7. Әдебиеттiң тiзiмi
1. Паскаль тiлге В.Г.Абрамов, Трифонов Н.П.кiрiспе. Жыл :Ғылым, 1988.-320. 2. С.А.Абрамов, Қыс Паскаль тiлдегi программалау Е.В.бастады. Жыл : Ғылым, 1987. 112-шi Г. 3. И.Д.Бутомо, А.В.Самочадин, Паскаль алгоритм тiлiндегi Усанов Д.В.программалау. Жыл : Ленинград университеттiң баспаханасы, 1985. 216-шы Г. 4. Паскальнiң тiлiнiң Р.жаттығу курсi грэхем. Жыл : Радио және байланыс . 1986 Г200-шi Г.
5. ЙенсенҚолданушы және тiлдiң сипаттамасы үшiн Вирт Н.басқару. Жыл, 1982.151. 6. Паскаль тiл бойынша жаттығулардың арашы В.Н.жинақтары. Жыл : Ғылым,
8. 1-шi қосымша. Программаның листингi Program bioritm {Анықтауға программа физикалық, қызу және адамның зияткерлiк белсендiлiктерi. Туу датасы жүргiзiледi және ағымдағы дата. Программаны күндердiң жалпы саны пердеге шығар да есептейдi сағат, минуттар және екi дата айырғыш секундтер сонымен бiрге болжайды алға дата, тиiстi максимумдар және биоритмдардың минимумына бiр айлық CONST
9. 2-шi қосымша. Жұмыстың нәтижелерi ------------------------------------------------------------- Қолайлы күндердiң есептеуiнiң программасы Мәндердi енгiзу кемшiлiк арқылы жүзеге асырыңыз Мәндердi енгiзудi аяқтау ENTERның 2~ клавишы арқылысын растаңыз -------------------------------------------------------------- Ггггтiң ммiнiң Ддiнiң қалыптағы туу датасы енгiзiңiз : 22021922 Ггггтiң ммiнiң Ддi қалыптағы ағымдағы датаны енгiзiңiз : 12092001 Өттi : 29057 күндер, 697368 сағат, 41842080 минуттар,
Ең аз қолайлы күн :
Program bioritm;
{Адамнын физикалык,эмоционалдық және интеллектуалдық қалып-күйін анықтауға арналған программа .
Туу датасы мен ағымдағы дата енгізіледі.
Программа екі датаны бөліп турған жалпы кундерді, сағат,минут,секундты есептеп, экранға шығарады және биоритмның максимум және минимуммын бір ай алдыға күндерді жоромалдайды.
CONST
SIZE_OF_MONTH: ARRAY [1..12] OF BYTE=
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
d0,d, {туған күндер мен айлар}
m0,m, {туған ай мен ағымдағы айлар}
y0,y, {Туған жыл мен ағымдағы жылдар}
dmin, {Ең аз қолайлы күн }
dmax, { Ең қолайлы күн }
days: integer; {Туғаннан бергі күндер}
{------------------------------------------------}
PROCEDURE InputDates (var d0,m0,y0,d,m,y: integer);
{Туған күн мен ағымдағы кунді енгізу.
Даталардын дурыстығы мен дурыс еместігін қадағалау.(Ағымдағы дата туған датадан кейін болуы керек . )).
var
correctly: boolean; {Енгізудің дұрыстық белгісі }
{-----------------------------------------------}
PROCEDURE InpDate (text: string;
var d,m,y: integer);
{ TEXT шақыруын шығарады , ДД ММ ГГГГ форматында датаны енгізініз және дұрыстығын тексерініз.}
const
YMIN=1900; {Минималды дұрыс енгізілетін жыл}
YMAX=2100; {Максималды дұрыс енгізілетін жыл }
BEGIN {InpDate}
repeat
write (text);
readln(d,m,y);
correctly:=(y>=YMIN) and (y<=YMAX) and (m>=1)
and (m<=12) and (d>0);
if correctly then
if (m=2) and (d=29) and (y mod 4=0) then
{ештене істеме : бұл ақпан айының 29 күні} високосный
else
correctly:=d<=Size_of_Month[m];
if not correctly then
writeln('ВНИМАНИЕ! Ошибка в дате!');
until correctly
end; {InpDate}
{--------------------------------}
BEGIN {InputDates}
repeat
InpDate(' Введите дату рождения в формате ДД ММ ГГГГ: ',
d0,m0,y0);
InpDate(' Введите текущую дату в формате ДД ММ ГГГГ: ',
d,m,y);
correctly:=y>y0; {Даталардың қайшылас еместігін тексеру :}
if not correctly and (y=y0) then
begin
correctly:=m>m0;
if not correctly and (m=m0) then
correctly:=d>d0;
end;
until correctly;
END; {InputDates}
{----------------------------------------------------}
PROCEDURE Get_numbers_of_days (d0,m0,y0,d,m,y: integer;
var days: integer);
{Бір датадан екінші датаға дейінгі өткен күндерді толық анықтау }
{----------------------------------------------------}
PROCEDURE Variant2;
{Екі дата аралығындағы айларды анықтау }
var
mm: integer;
BEGIN {Variant2}
mm:=m0;
while mm
begin
days:=days+Size_of_Month[mm];
if (mm=2) and (m0 mod 4=0) then inc(days);
inc(mm);
end;
END; {Variant2}
{---------------------------------------------------}
PROCEDURE Variant3;
{ Екі дата аралығындағы айларды анықтау }
var mm,yy: integer;
BEGIN {Variant3}
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
begin
days:=days+365;
if yy mod 4=0 then inc(days);
inc(yy);
end;
mm:=1;
while mmbegin
days:=days+Size_of_Month[mm];
if (y mod 4=0) and (mm=2) then inc(days);
inc(mm);
end;
END; {Variant3}
{-----------------------------------------------------}
BEGIN {Get_numbers_of_days}
if (y=y0) and (m=m0) then {Даталар күндермен ғана ерекшеленеді: }
days:=d-d0;
{Даталар күндермен ғана ерекшеленбейді : }
begin
days:=d+Size_of_Month[m0]-d0;
{ағымдағы күндер саның есептеу және туған айының аяғына дейінгі күндерді есептеу }
if (y0 mod 4=0) and (m0=2) then inc(days);
{Учесть високосный год }
if y=y0 then Variant2;
{бір жыл ішіндегі аилардың айырмашылығы }
Variant3;
{Даталар жылдарының айырмашылығы болады}
end;
END; {Get_numbers_of_days}
{-------------------------------------------------}
PROCEDURE FindMaxMin (var dmin,dmax: integer;
days: integer);
{ Кризистiк күндердiң iздестiруi }
const
TF=2*3.1416/23.6884; { Физикалық белсендiлiктiң мерзiмi }
TE=2*3.1416/28.4261; {эмоционалдық белсенділіктін мерзімі }
TI=2*3.1416/33.1638; {интелектуалдық белсенділіктін мерзімі }
INTERVAL=30; { Болжамның интервалы }
var
min,max,x:real;
i:integer;
BEGIN {FindMaxMin}
max:=sin(days*TF)+sin(days*TE)+sin(days*TI);
min:=max;
dmin:=days;
dmax:=days;
for i:=0 to INTERVAL do
begin
x:=sin((days+i)*TF)+sin((days+i)*TE)+sin((days+i)*TI);
if x>max then
begin
max:=x;
dmax:=days+i;
end;
if xbegin
min:=x;
dmin:=days+i;
end;
end;
END; {FindMaxMin}
{--------------------------------------------}
PROCEDURE WriteDates(dmin,dmax,days:integer);
{кризистік күндерді анықтап шығару .
Өмір сүрген күндер, саға, минут, сикунд туралы қосымша мәліметтерді шығару }
{---------------------------------------------}
PROCEDURE WriteDate(text:string;
dd:integer);
{ Туған күннен бастап DD күндерін анықтау .
Глобалдi айнымалыда d,m және y ағымдағы датаны білдіреді,
Айнымалыдағы DAYS – туғаннаң бері өмір сүрген күндер .
TEXT анықтамасы шығарылады және табылған дата
ДД-ММ-ГГГГ форматында.}
const
Names_of_Monthes:array[1..12] of string[5]=
('янв ','февр','март','апр ','май ',
'июнь','июль','авг ','сент','окт ',
'нояб','дек ');
var
d0,m0,y0,ddd:integer;
BEGIN {WriteDate};
d0:=d;
m0:=m;
y0:=y;
ddd:=days;
while ddd<>dd do
begin
inc(d0); {күндер косу}
if (y0 mod 4<>0) and (d0>Size_of_Month[m0]) or
(y0 mod 4=0) and (d0=30) then
begin {айды түзету }
d0:=1;
inc(m0);
if m0=13 then {жылды түзету}
begin
m0:=1;
inc(y0);
end;
end;
inc(ddd);
end;
writeln(text,d0,'-',Names_of_Monthes[m0],'-',y0);
END; {WriteDate}
{-----------------------------------------------}
var
longdays: longint; {"Ұзақ" тұтас айнымалы
сағат, минут, секунд үшін }
BEGIN {WriteDates}
longdays:=days;
writeln('Прошло: ',longdays,' дней, ',longdays*24,
' часов, ',longdays*24*60,' минут, ',
longdays*24*360,' секунд.');
WriteDate('Наименее благоприятный день: ',dmin);
WriteDate('Наиболее благоприятный день: ',dmax);
END; {WriteDates}
{---------------------------------------------------}
BEGIN {БАС ПРОГРАММА }
Writeln('______________________________');
Writeln(' Программа расчета благоприятных дней ');
Writeln(' Ввод данных осуществляйте через пробел ');
Writeln('Окончание ввода данных подтвердите с помощью клавиши ENTER');
InputDates(d0,m0,y0,d,m,y);
Writeln('-----------------------------------------');
Get_numbers_of_days(d0,m0,y0,d,m,y,days);
FindMaxMin(dmin,dmax,days);
WriteDates(dmin,dmax,days);
END.
9.Қосымша 2. Жұмыс нәтижесі
-------------------------------------------------------------
Қолайлы күндерді есептеу программасы
Мәліметтер бос орын арқылы енгізіледі
Мәліметтер енгізудін соның ENTER арқылы растаныз
--------------------------------------------------------------
Туу датасын мына форматта енгізініз ДД ММ ГГГГ: 22 02 1922
Ағымдағы датаны мына форматта енгізініз ДД ММ ГГГГ: 12 09 2001
отті: 29057 күн, 697368 сағат, 41842080 минут, 251052480 секунд.
---------------------------------------------------------------
Ен колайлы күн: 3-окт -2001
Ен аз колайлы күн : 12-сент-2001
Достарыңызбен бөлісу: |