|
2
![]() |
||
![]() |
УКООПСПІЛКА
Івано-Франківський фінансово-комерційний
кооперативний коледж ім. С. Граната
Дисципліна Програмування
Спеціальність5.05010201 “Обслуговування комп’ютерних систем і
мереж”
Курс
2 Група
ОК-202Семестр 4
Завдання
на курсовий проект студентки
Комкова Олександра Васильовича
/ прізвище, ім’я, по-батькові /
1. Тема Програма „Решето Ератосфена”
![]() |
2. Початкові дані у відповідності з умовою задачі
![]() |
3.
Зміст пояснювальної записки Вступ;
постановка
задачі на розробку програмного забезпечення;
архітектура
програми;
опис
алгоритму функціонування програмного забезпечення;
висновок;
список використаної літератури;
додатки
![]() |
4. Дата видачі завдання 23.02.2015
![]() |
5. Термін пред’явлення завершеної роботи на рецензію 18.05.2015
Календарний план
№ п/п |
Етапи і зміст роботи |
Документація |
Термін виконання (тиждень) |
1 |
Одержання завдання на курсове проектування, вибір літератури, ознайомлення з літературою |
1 |
|
2 2.1 2.2 2.3 2.4 |
Постановка задачі Визначення вимог до програми Визначення складу вхідних та вихідних даних Попередній вибір методів розв"язання задачі Запис постановки задачі |
Розділ пояснювальної записки |
2 |
3 |
Розробка та затвердження технічного завдання |
Технічне завдання |
3 |
4 4.1 4.2 4.3 4.4 |
Технічне проектування Уточнення методів розв"язання задачі Визначення структури програми, її модулів та їх взаємозв’язку Розробка основного алгоритму функціонування програми Складання специфікацій модулів |
Розділи пояснювальної записки |
4 |
5 5.1 5.2 5.3 5.4 5.5 |
Робоче проектування Уточнення структури та визначення способу організації вхідних та вихідних даних Розробка алгоритмів роботи модулів Написання текстів програм Тестування та налагодження програм Написання пояснювальної записки |
Текст програм Набір тестів Пояснювальна записка |
4-5 6 7-8 8-10 10-11 |
6 |
Захист проекту |
12 |
Студент _______________________ / Комков О. В. /
(підпис)
Керівник курсового проекту _____________________ / Нагірна К. Т. /
(підпис)
ЗМІСТ Вступ ........................................................4 1. Постановка задачі на розробку програмного забезпечення ......8 2. Архітектура програми ........................................9 3. Опис алгоритму функціонування програмного забезпечення .....10 4. Висновок ...................................................11 Список використаної літератури ..............................12 Додаток А. Технічне завдання ................................13 Додаток Б. Структурна модель програмного виробу..............14 Додаток В. Блок-схема алгоритму розв’язання задачі...........15 Додаток Г. Тексти програм та модулів......................... Додаток Д. Контрольний приклад............................... Додаток Е. Екранні форми .................................... |
|||||||||||||
5.080405.00.00.ПЗ |
|||||||||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
|||||||||
Розробив |
Комков О. В. |
23.02.15 |
Програма „Решето Ератосфена” |
Літ. |
Лист |
Листів |
|||||||
Перевірив |
Нагірна К. Т. |
20.05.15 |
У |
3 |
|||||||||
ІФФККК ім. С. Граната |
|||||||||||||
Н.контр. |
|||||||||||||
ВСТУП Починаючи з версії 4.0, до складу Турбо Паскаля включена потужна бібліотека графічних підпрограм Graph. Ця бібліотека в загальній кількості містить понад 50 процедур і
функцій, які дозволяють керувати графічним екраном.
|
||||||
Номер залікової книжки |
Лист |
|||||
4 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Ініціювання графіки на Турбо Паскалі має такий вигляд:
|
||||||
Номер залікової книжки |
Лист |
|||||
5 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Причому всі координати – це змінні типу Integer. Program okr;Uses graph, crt;Var x, y, r: integer; { параметры окружности }dx: integer; { шаг перемещения окружности }grdriver, grmode: integer; { графический режим }BeginGrdriver:=detect;Initgraph ( grdriver, grmode, ‘ ‘ );X:=0;Y:=100;R:=20;Dx:=2;
|
||||||
Номер залікової книжки |
Лист |
|||||
6 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
RepeatSetcolor(15);Circle(x,y,r);Delay(100);Setcolor(0);Circle(x,y,r);X:=x+dx;Until keypressed;Readln;Closegraph;End.Таким чином, здійснюється мультиплікація в Паскалі.Умова: Зобразити на екрані монітора
декартову систему координат, початок якої збігається з центром екрана.
|
||||||
Номер залікової книжки |
Лист |
|||||
7 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Підписи на осях можна зробити таким чином: число, що треба написати, переводиться в рядок процедурою str, а потім виводиться на екран процедурою OutTextXy.Зверніть увагу на те, що на від"ємному проміжку вісі до числа ліворуч дописується знак "-" командою S := "-"+S, де S - рядок, що містить підпис під поділкою.Для якісного оформлення малюнку використовується процедура settextjustify(1,1), що забезпечує відцентроване виведення тексту у вказану позицію.Умова: Стовпчаста діаграма - це послідовно зображені прямокутники однакової ширини, що розташовані на одному горизонтальному рівні. Висота прямокутників пропорційна значенням деякої числової послідовності.Побудувати стовпчасту діаграму за даними n цілими значеннями. Для наочності стовпчики зафарбувати різними кольорами.Для побудови діаграми, по-перше, необхідно задати кількість стовпчиків, тобто кількість числових значень, по яких буде будуватися діаграма, а, по-друге, - самі значення.В даному алгоритмі всі ці величини вводяться з клавіатури, хоча можна передбачити і інші методи, наприклад, заповнення генератором випадкових чисел.Після введення числових даних необхідно розрахувати коефіцієнти пропорційності по осях Х та Y, щоб отримати малюнок на весь екран. Врахуємо, що максимальний розмір по осі Х - 640 пікселів, а по осі Y - 480 пікселів. |
||||||
т |
Номер залікової книжки |
Лист |
||||
8 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Тоді очевидно, що коефіцієнт по осі Х можна обчислити за формулою SizeX = 640/N - 5, де SizeX - коефіцієнт пропорційності, N - кількість стовпчиків на діаграмі.Константне значення 5 від дробу віднімається, щоб розділити стовпчики між собою хоча б на 5 пікселів (це значення можна змінити).По осі Y знайти коефіцієнт пропорційності важче, тому що для цього необхідно спочатку визначити максимальне значення, що використовується для побудови діаграми.Для знаходження максимуму використовуємо стандартний алгоритм. Тут можна запропонувати дітям згадати цей алгоритм самостійно.Прогнозована відповідь: беремо у якості еталону будь-який елемент масиву, наприклад, перший, а потім порівнюємо кожний наступний елемент з еталоном і у випадку невідповідності (черговий елемент більший за еталон) замінюємо еталон.Після знаходження максимуму знаходимо коефіцієнт пропорційності по осі Y за очевидною формулою SizeY = 480/Max, де SizeY - шуканий коефіцієнт, Max - максимальне значення з масиву.Обидва шукані коефіцієнти пропорційності округлюємо функцією round, тому що екранні координати не можуть бути дробовими, а після цього нормалізуємо значення масиву множенням на коефіцієнт SizeY.Після підготовки даних можна починати побудову діаграми. |
||||||
т |
Номер залікової книжки |
Лист |
||||
9 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Кожен елемент діаграми будується процедурою Bar, що малює зафарбований прямокутник, колір якого задається процедурою SetFillStyle.Очевидно, що ширина кожного стовпчика буде дорівнювати SizeX - 5, тому початкова координата по осі Х дорівнює (i - 1)*SizeX, а кінцева - i*SizeX - 5, де і - змінна циклу, що рахує номер чергового стовпчика.Початкова координата по осі Y буде максимальною, тобто 480, а кінцева координата дорівнювати різниці між 480 та елементом масиву.Умова: Секторною діаграмою називають круг, площі секторів якого пропорційні відповідним числовим величинам, узятим з деякої послідовності.Для заданої послідовності з n дійсних чисел побудувати секторну діаграму.Для наочності сектори діаграми зафарбувати різними кольорами.Кількість елементів діаграми в цій задачі вводиться так само, як і в попередньому випадку, тобто з клавіатури, а заповнення масиву даними зробимо генератором випадкових чисел.Далі, як і в попередній задачі, необхідно промасштабувати початкові значення для виведення їх на екран у вигляді кругової діаграми. Для цього спочатку знаходимо суму всіх елементів масиву, а потім масштабуємо їх за формулоюAi = Ai*360/Sum,де Sum - загальна сума елементів масиву, 360 - кількість градусів у повному колі.Сама діаграма будується за допомогою процедури PieSlice, що виводить на екран зафарбований сектор круга. |
||||||
т |
Номер залікової книжки |
Лист |
||||
10 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Колір зафарбування задається процедурою SetFillStyle, а початковий та кінцевий кути сектора обчислюються від поточного кута Angle з урахуванням значення елементу масиву.Центр кола, на якому будується кругова діаграма, завжди константний (320; 240). |
||||||
т |
Номер залікової книжки |
Лист |
||||
11 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Список використаної літератури 1. |
||||||
т |
Номер залікової книжки |
Лист |
||||
12 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток А Технічне завдання 1. Найменування та область застосування Найменування – формування списку простих чисел за методом „Решето Ератосфена”. Позначення - Ератосфен. Коротка характеристика - програма знаходження та виведення списку простих чисел за алгоритмом відсіву „Решето Ератосфена”. 2. Підстава для розробки Завдання викладача для виконання курсового проекту. 3. Призначення розробки Ератосфен повинен знаходити всі прості числа включно до деякого найбільшого значення, використовуючи алгоритм відсіву „Решето Ератосфена. 4. Вимоги до програмного забезпечення 4.1. Вимоги до функціональних характеристик 4.1.1. Ератосфен повинен працювати в одновіконному текстовому режимі і підтримувати роботу клавіатури та маніпулятора „миша”. 4.1.2. Користувач, по своєму бажанню, повинен мати можливість припинити або продовжити роботу Ератосфена. 4.1.4. Знайдений список простих чисел повинен демонструватися на екрані у вигляді таблиці. 4.1.5. Користувач повинен мати можливість зберігати інформацію про знайдений список простих чисел у текстовому файлі. 4.1.10. Програма повинна забезпечувати перегляд вихідного результату. 4.2. Вимоги до надійності 4.2.1. Програма повинна обробляти помилкові дії користувача і повідомляти йому про помилки. 4.2.2. Програма повинна контролювати послідовність дій користувача. 4.3.Вимоги до складу і параметрів технічних засобів 4.4.1. Програмне забезпечення розробляється для персональної обчислювальної техніки типу не нижче IBM PC-386 з наступними характеристиками: - обсяг ОЗУ не нижче 1 Mb; - графічний адаптер SVGA; - маніпулятор типу "миша". 4.4.2. ЕОМ повинна працювати під керуванням операційної системи не нижче, ніж
MS-DOS 5.0. |
||||||
т |
Номер залікової книжки |
Лист |
||||
13 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток Б Структурна модель програмного виробу |
||||||
т |
Номер залікової книжки |
Лист |
||||
14 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток В Блок-схема алгоритму розв’язання задачіПрограма eratosfen |
||||||
т |
Номер залікової книжки |
Лист |
||||
15 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток Г Тексти програм та модулів Програма eratosfen.pas PROGRAM ERATOSFEN; USES CRT, mymodul; TYPE type_punkt=(prg, dani, rozr, rez, vuh); arr=ARRAY[1..399] OF WORD; arr1=ARRAY[1..19] OF WORD; vkarr=^arr; vkarr1=^arr1; CONST menu: ARRAY[type_punkt] OF STRING[14]= ("Pro programy ", "Dani ", "Rozrahunok ", "Rezultat ", "Vuhid "); poz=10; VAR x1, y1, x2, y2:BYTE; sim:CHAR; punkt: type_punkt; StartAttr:BYTE; OldMode:INTEGER; prime: vkarr; mult : vkarr1; n, m: WORD; PROCEDURE prc_prg; BEGIN TEXTBACKGROUND(15); TEXTCOLOR(6); CLRSCR; x1:=2; y1:=4; x2:=78; y2:=20; ramka(x1,y1,x2,y2); GOTOXY(15,6); WRITELN("KURSOVUY PROEKT"); GOTOXY(10,WHEREY); WRITELN("tema "Recheto Eratosfena""); GOTOXY(10,WHEREY); WRITELN("studenta ..."); GOTOXY(30,22); WRITELN("PRESS KEY..."); READLN; END; PROCEDURE prc_dani; LABEL mitka; VAR x3, y3:BYTE; pr:BOOLEAN; CurEAttr:BYTE; BEGIN TEXTBACKGROUND(15); TEXTCOLOR(1); CLRSCR; x1:=2; y1:=4; x2:=78; y2:=20; GOTOXY(25,6); WRITELN("Recheto Eratosfena"); GOTOXY(15,WHEREY+3); WRITE("Vkajit kilkist prostux chusel:"); x3:=WHEREX+5; y3:= WHEREY; mitka: GOTOXY(x3,y3); CLREOL; ramka(x1,y1,x2,y2); GOTOXY(x3,y3); cursor_on; {$I-} READLN(n); {$I+} cursor_off; pr:=(IORESULT<>0); pr:=(pr OR (n>20) OR (n<=0)); |
||||||
т |
Номер залікової книжки |
Лист |
||||
9 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
IF pr THEN BEGIN CurEAttr:=TEXTATTR; GOTOXY(25,15); TEXTCOLOR(4); WRITELN("ERROR!!! PRESS KEY..."); READKEY; GOTOXY(25,15); CLREOL; TEXTATTR:=CurEAttr; ramka(x1,y1,x2,y2); GOTO mitka; END; m:=n*n; GOTOXY(30,22); WRITELN("PRESS KEY..."); READLN; END; PROCEDURE prc_rozr; VAR accept:BOOLEAN; p,s,i,j,k:WORD; BEGIN NEW(prime); NEW(mult); prime^[1]:=2; p:=2; k:=1; s:=sqr(prime^[1]); FOR i:=2 TO m-1 DO BEGIN REPEAT inc(p); IF s<=p THEN BEGIN mult^[k]:=s; inc(k); s:=sqr(prime^[k]); END; accept:=TRUE; FOR j:=1 TO k-1 DO BEGIN IF mult^[j]
accept:=(mult^[j]>p); IF NOT accept THEN BREAK END; UNTIL accept; prime^[i]:=p; END; TEXTBACKGROUND(15); TEXTCOLOR(1); CLRSCR; x1:=2; y1:=4; x2:=78; y2:=20; ramka(x1,y1,x2,y2); GOTOXY(25,6); WRITELN("Recheto Eratosfena"); GOTOXY(20,10); TEXTCOLOR(4); WRITE("Rozrahunok uspichno zavercheno!!!"); |
||||||
т |
Номер залікової книжки |
Лист |
||||
10 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
GOTOXY(30,22); TEXTCOLOR(1); WRITELN("PRESS KEY..."); READLN; END; PROCEDURE prc_rez; VAR i:WORD; BEGIN TEXTMODE(CO80+FONT8X8); TEXTBACKGROUND(15); TEXTCOLOR(1); CLRSCR; GOTOXY(25,3); WRITELN("Recheto Eratosfena"); WRITELN; FOR i:=1 TO 10 DO WRITE(i:7); WRITELN; TEXTCOLOR(YELLOW); FOR i:=1 TO m-1 DO BEGIN WRITE(prime^[i]:7); IF i MOD 10=0 THEN WRITELN END; GOTOXY(30,WHEREY+2); TEXTCOLOR(1); WRITELN("PRESS KEY..."); x1:=1; y1:=1; x2:=79; y2:=49; ramka(x1,y1,x2,y2); READLN; TEXTMODE(CO80); END; PROCEDURE prc_vuh; BEGIN TEXTATTR:= StartAttr; TEXTMODE(OldMode); cursor_on; HALT; END; PROCEDURE osn_menu; VAR s: type_punkt; nom: INTEGER; BEGIN WINDOW(1,1,80,25); TEXTBACKGROUND(3); TEXTCOLOR(1); CLRSCR; x1:=25; y1:=8; x2:=55; y2:=16; ramka(x1,y1,x2,y2); FOR s:=prg TO vuh DO IF s=punkt THEN BEGIN nom:=poz+ord(s); TEXTBACKGROUND(7); GOTOXY(x1+8,nom); WRITE(menu[s]); TEXTBACKGROUND(3); |
||||||
т |
Номер залікової книжки |
Лист |
||||
11 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
TEXTCOLOR(1); END ELSE BEGIN nom:=poz+ord(s); GOTOXY(x1+8,nom); WRITE(menu[s]); END; GOTOXY(30,24); WRITE("ENTER-vubir"); END; BEGIN {golovna programa} StartAttr:=TEXTATTR; OldMode:=LASTMODE; TEXTMODE(CO80); cursor_off; punkt:=prg; REPEAT osn_menu; REPEAT sim:=READKEY; IF (sim=#0) AND KEYPRESSED THEN sim:=READKEY; CASE sim OF #80: IF punkt <> vuh THEN punkt:=SUCC(punkt) ELSE punkt:=prg; #72: IF punkt <> prg THEN punkt:=PRED(punkt) ELSE punkt:=vuh; END; UNTIL sim = #13; {Enter} CASE punkt OF prg : prc_prg; dani: prc_dani; rozr: prc_rozr; rez : prc_rez; vuh : prc_vuh; END UNTIL FALSE END. |
||||||
т |
Номер залікової книжки |
Лист |
||||
12 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Модуль mymodul.pas UNIT mymodul; INTERFACE USES crt,dos; PROCEDURE ramka(x1,y1,x2,y2:BYTE); PROCEDURE cursor_off; PROCEDURE cursor_on; IMPLEMENTATION PROCEDURE ramka(x1,y1,x2,y2:BYTE); VAR i: INTEGER; BEGIN GOTOXY(x1,y1); WRITE("╔"); {ALT+CTRL+201} FOR i:=1 TO x2-x1-1 DO WRITE("═"); {ALT+CTRL+205} WRITE("╗"); {ALT+CTRL+187} FOR i:=1 TO y2-y1-1 DO BEGIN GOTOXY(x1,y1+i); WRITE("║"); {ALT+CTRL+186} GOTOXY(x2,y1+i); WRITE("║"); {ALT+CTRL+186} END; GOTOXY(x1,y2); WRITE("╚"); {ALT+CTRL+200} FOR i:=1 TO x2-x1-1 DO WRITE("═"); {ALT+CTRL+205} WRITE("╝"); {ALT+CTRL+188} END; PROCEDURE cursor_off; VAR regs:registers; BEGIN regs.ax:=$0100; regs.cx:=$2607; intr($10,regs); END; PROCEDURE cursor_on; VAR regs:registers; BEGIN regs.ax:=$0100; regs.cx:=$0506; intr($10,regs); END; END. |
||||||
т |
Номер залікової книжки |
Лист |
||||
13 |
||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток Д Контрольний приклад Вхідні повідомлення:
Вихідні повідомлення:
|
||||||||||||
т |
Номер залікової книжки |
Лист |
||||||||||
13 |
||||||||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Додаток Е Екранні форми Головне меню програми
Пункт меню „Про програму”
Пункт меню „Дані”
|
||||||||||||||||
т |
Номер залікової книжки |
Лист |
||||||||||||||
13 |
||||||||||||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |
Пункт меню „Розрахунок”
|
||||||||||||
т |
Номер залікової книжки |
Лист |
||||||||||
13 |
||||||||||||
Зм |
Лист |
№ докум. |
Підп. |
Дата |