Міністерство освіти Російської Федерації
МІНІСТЕРСТВО ОСВІТИ УНІВЕРСИТЕТ СИСТЕМ УПРАВЛІННЯ ТА РАДІОЕЛЕКТРОНІКИ p>
(ТУСУР) p>
Кафедра автоматизованих систем управління (АСУ) p>
Програмування
Курсова робота p>
Дата виконання роботи «15» вересня p>
2001 p>
Дата перевірки «___»______________ 2001 p>
Оцінка _________________________________ p>
І. Б. Прізвище викладача p>
________________________________________ p>
Підпис викладача p>
________________________________________ p> < p> г.Чіта 2001 p>
ЗМІСТ p>
1. ВСТУП 3 p>
2. ПРИЗНАЧЕННЯ РОБОТИ ТА ОБЛАСТЬ ЇЇ ЗАСТОСУВАННЯ. Постановка задачі 4 p>
3. ВИКОРИСТОВУЮТЬСЯ МЕТОДИ, опис алгоритмів ПРОГРАМИ З ОПИСОМ p>
ФУНКЦІЙ Складовою частиною і ЗВ'ЯЗКУ МІЖ НИМИ 5 p>
4. ОПИС ВХІДНИХ І ВИХІДНИХ ДАНИХ 7 p>
5. КЕРІВНИЦТВО КОРИСТУВАЧА 7 p>
6. ВИСНОВОК 7 p>
7. СПИСОК ЛІТЕРАТУРИ 9 p>
8. ДОДАТОК 1. Лістинг ПРОГРАМИ 10 p>
9. ДОДАТОК 2. РЕЗУЛЬТАТИ РОБОТИ 17 p>
ВСТУП p>
Мова програмування Pascal створений в 1973 році швейцарський учений p>
Ніколасом Віртом і був названий на честь видатного французького фізика, математика і філософа Блеза Паскаля (1623-1662), який був автором першого в світі обчислювальної (підсумовується) машини (1641). Мова спочатку створювався з метою навчання програмуванню взагалі. P>
За словами автора мови «... розробка мови Паскаль базувалася на двох принципових концепціях. Перша полягала в тому, щоб винайти мову, пристосований до навчання програмуванню як систематичній дисципліні, що базується на деяких фундаментальних положеннях, ясно і природно відображених у мові. Друга передбачала розробку конкретних уявлень цієї мови, які були б надійні і ефективні на сучасних ЕОМ. »[1] На думку Вірта,« мова, на якому студент вчиться висловлювати свої ідеї, істотно впливає на його спосіб мислення і винахідливість ... безлад, супутній існуючим мовам, безпосередньо впливає на стиль програмування студентів. »[2] Зараз з упевненістю можна говорити про те, що Вірт досяг поставленої перед собою мети. Мова Паскаль є не тільки найкращим мовою навчання програмуванню, дає можливість здійснити просту реалізацію його на сучасних ПЕОМ, використовувати її як мову системного програмування, але і є базою для створення більш потужних мов. P>
ПРИЗНАЧЕННЯ РОБОТИ ТА ОБЛАСТЬ ЇЇ ЗАСТОСУВАННЯ . p>
Постановка завдання p>
Давно відомо, що творча і фізична активність людини незалишається постійною, а циклічно змінюється, причому періодичність їїзміни приблизно узгоджується з періодом обертання Місяця навколо Землі.
Існує теорія, згідно якої фізична, емоційна іінтелектуальна активність людини підпорядковується відповідним біоритмів.
Кожен біоритм являє собою синусоїду зі строго постійним періодом,причому для кожного біоритму існує свій період. В окремі дні всі трибіоритми людини можуть досягти свого максимуму і тоді людинавідчуває підйом творчих і фізичних сил, у такі дні у нього всейде на лад, від легко вирішує проблеми, які в інший час йому вирішитинабагато складніше. Так само існують і «чорні» дні, відповідніспаду всіх трьох біоритмів. p>
У програмі запитується дата народження людини і дата, для якоїпотрібно оцінити його стан. У процесі роботи здійснюється розрахунок івидача на екран найближчих до зазначеної дати днів піку і спаду біоритмів. p>
ВИКОРИСТОВУЮТЬСЯ МЕТОДИ, опис алгоритмів ПРОГРАМИ З ОПИСОМ ФУНКЦІЙ p>
Складовою частиною і ЗВ'ЯЗКУ МІЖ НИМИ p>
Алгоритм програми можна укрупнено записати наступним чином:
| Ввести дату народження і поточну дату |
| Проконтролювати їх правильність і несуперечність |
| Обчислити кількість днів між двома датами, щоб визначити фазу синусоїд |
| для поточної дати |
| Обчислити кількість днів від поточної дати до дати найближчого піку біоритмів і |
| дати найближчого спаду |
| Визначити та надрукувати обидві дати | p>
застосовують методику спадного програмування. P>
Для спрощення підрахунку кількості днів, що розділяють дату народження і поточну дату використовую масив Size_of_month - довжина місяця і роблю його глобальним для того , щоб використовувати його ж і для визначення дати критичних днів і перевірки правильності вводяться дат. Таким чином вищезгаданий масив буде використовуватися в трьох процедурах. P>
При розрахунку кількості днів, які поділяють обидві дати (народження і поточної), крім контролю несуперечності введених дат (мінімально і максимально можливі правильні дати 1900 і 2100 роки), слід враховувати наступні обставини: p>
. Місячний немовля (коли рік і місяць обох дат однаковий) - тоді кількість днів перебуває простим вирахуванням двох чисел; p>
. Однорічний немовля (коли рік обох дат співпадає) - тоді кількість днів = (залишок днів у місяці народження) + p>
(кількість днів у поточному місяці) + (кількість днів у місяці, які поділяють обидві дати); p>
. Загальний варіант (відрізняються року) - тоді кількість днів = p>
(кількість днів від дати народження до кінця року) + (кількість днів у поділяють дати роках) + (кількість днів від початку поточного року до поточної дати). p>
Всі ці варіанти враховуються у процедурі Get_numbers_of_days. p>
Процедури Variant2 і Variant3 - допоміжні. Вони використовуються для зв'язку з основною програмою через глобальні змінні. P>
У процедурі Findmaxmin здійснюється пошук критичних днів, тобто найближчих до поточної дати днів, для яких всі три біоритми досягають свого максимуму і мінімуму. Приймаю, що біоритми змінюються по синусоїдальним залежностей від кількості прожитих днів з періодами TF, TE і TI відповідно для фізичної, емоційної та інтелектуальної активності людини, які є усередненими для чоловіків і жінок. Періоди приймаю наступні (у днях): p>
TF = 23.6884 - період фізичної активності p>
TE = 28.4261 - період емоційної активності p>
TI = 33.1638 - період інтелектуальної активності p>
Пошук критичних днів визначається для поточного дня і для кожного з наступних днів до першого піку максимуму або мінімуму в заздалегідь визначеному інтервалі - в даному випадку 30 днів. p>
За допомогою процедури WRITEDATES виводяться на екран результати роботи програми. Так як розрахунок проводиться двічі - для дати піку і дати спаду біоритмів, то доцільно винести його в окрему процедуру WRITEDATE. P>
ОПИС ВХІДНИХ І ВИХІДНИХ ДАНИХ p>
Введення вихідних даних (дати народження людини і поточної дати) здійснюється у форматі ДД ММ ГГГГ з клавіатури по запиту (тип змінних, які відповідають цим значенням, Integer). p>
Для реалізації виведення на екран розрахункових даних для дат піку і спаду біоритмів - найбільш і найменш сприятливих днів використовую тип Integer. p>
Для виведення даних про тривалість життя в годинах хвилинах і секундах використовую Longint ( «довгий» цілий), тому що для типу Integer діапазон можливих значень даних від -32768 до 32767. Якщо врахувати, що середня тривалість життя людини близько 70 років, тобто 25550 днів, і відповідно 36792000 годин, то прийнятний тільки тип даних Longint з діапазоном значень від -2147483648 до 2147483647. P>
Програмне та апаратне забезпечення для нормальної роботи програми стандартне - Turbo Pascal 7.0 - за відсутності здійснимих файлу. p>
Операційна система MS-DOS 6.0 або Windows95 і вище з режимом емуляції p>
MS-DOS. p> < p> КЕРІВНИЦТВО КОРИСТУВАЧА p>
Введення вихідних даних здійснюється з клавіатури за запитом програми. p>
Дані необхідно вводити суворо дотримуючись зазначеного формату: p>
ДД ММ РРРР - по два символи на день і місяць і чотири символи на введення року, розділяти значення дня, місяця й року необхідно пробілом. p>
Закінчення введення рядка даних підтвердити стандартно за допомогою клавіші p>
ENTER. p>
ВИСНОВОК p>
Програма служить для визначення днів максимуму і мінімуму сумарних психо-фізичних параметрів людського організму. Може бути використана в повсякденному житті для планування найбільш важливих для людини заходів, наприклад: визначення днів посилених тренувань для займаються активним спортом, проведення інтерв'ю, публічних виступів для політиків, укладання важливих угод і ведення переговорів для бізнесменів і так далі. P> < p> СПИСОК ЛІТЕРАТУРИ p>
1. Абрамов В.Г., Трифонов Н.П. Введення в мову Паскаль. - М.: Наука, p>
1988.-320 с. P>
2. Абрамов С.А., Зима Е.В. Почала програмування мовою Паскаль. - P>
М.: Наука, 1987. - 112 с. P>
3. Бутоми І.Д., Самочадін А.В., Усанова Д.В. Програмування на алгоритмічній мові Паскаль. - Л.: Видавництво Ленінградського університету, 1985. - 216 с. P>
4. Грехем Р. Практичний курс мови Паскаль. - М.: Радіо і зв'язок. 1986 - p>
200 с. P>
5. Йенсен К., Вірт Н. Керівництво для користувача й опис мови. - P>
М., 1982. 151 с. P>
6. Пильщиків В.Н. Збірник вправ з мови Паскаль. - М.: Наука, 1989. P>
- 160 с. P>
ДОДАТОК 1. Лістинг ПРОГРАМИ p>
Program bioritm;
(Програма для визначення фізичної, емоційної таінтелектуальної активності людини. Вводиться дата народження іпоточна дата.
Програма обчислює і виводить на екран загальна кількість днівгодин, хвилин і секунд, які поділяють обидві дати, а також прогнозуєна місяць вперед дати, відповідні максимуму і мінімуму біоритмів)
CONST
SIZE_OF_MONTH: ARRAY [1 .. 12] OF BYTE = p>
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);var d0, d, (Дні народження і місяці) m0, m, (Місяці народження та поточний) y0, y, (Роки народження і поточний) dmin, (Найменш сприятливий день) dmax, (Найбільш сприятливий день) days: integer; ( Кількість днів від народження)
{----------------------------------------- -------}< br> PROCEDURE InputDates (var d0, m0, y0, d, m, y: integer);
(Введення дати народження та поточної дати.
Контроль правильності дат і їх несуперечності
(поточна дата повинна бути пізніше дати народження)) var correctly: boolean; (Ознака правильності введення) p>
{------------------- ----------------------------}< br> PROCEDURE InpDate (text: string; var d, m, y: integer);
(Виводить запрошення TEXT, вводить дату у форматі p>
ДД ММ ГГГГ і перевіряє її правильність) const p>
YMIN = 1900; (Мінімальний правильний рік) p >
YMAX = 2100; (Максимальний правильний рік) p>
BEGIN (InpDate) repeat write (text); readln (d, m, y); correctly: = (y> = YMIN) and ( y = 1) and (m0); if correctly then if (m = 2) and (d = 29) and (y mod 4 = 0) then p>
(нічого не робити: це 29 лютого високосного року ) else correctly: = dy0; (Перевірити несуперечність дат:) if not correctly and (y = y0) then begin correctly: = m> m0; if not correctly and (m = m0) then correctly: = d> d0; end; until correctly; p>
END; (InputDates) p>
{--------------------------- -------------------------}< br> PROCEDURE Get_numbers_of_days (d0, m0, y0, d, m, y: integer; var days: integer ); p>
(Визначення повного кількості днів, що пройшли від однієї дати до іншої)
{------------------------------------------------- ---} p>
PROCEDURE Variant2; p>
(Підрахунок кількості днів у місяці, які поділяють обидві дати) var mm: integer; p>
BEGIN (Variant2) mm: = m0; while mm p>