Смекни!
smekni.com

Розробка програм мовою С++ (стр. 4 из 5)


Написати прототип, визначення і приклад виклику функції для видалення зі списку k останніх елементів із звільненням зайнятої ними пам’яті. В окркмому випадку, перед викликом цієї функції лінійний список може бути порожній або може містити будь-яку кількість елементів.

Усі вихідні дані (покажчик на корінь лінійного списку, кількість що видаляються елементів) і результати виконання функції (покажчик на початок лінійного списку) повинні передаватися через список параметрів.

2.4.2 Програма та програмна реалізація

Дане завдання реалізоване у модулі TASK4.CPP (TASK4.EXE)

Опишемо алгоритм роботи даної програми:

Створено список (Node *pLink;),у якому оголошено наступні функції:

void func(Node *Start); // Відповідає за видалення

елементів зі списку

void vvid(); // Вводимо елементи списку

(кінцевий елемент - 0)

void vuvid(Node *Start); // Виводить результат, без останніх

k- елементів

void clear(Node *Start); // Звільняє займану ними пам’ять

Розглянемо програму:

// Task4.cpp

#include <iostream.h>

#include <conio.h>

struct Node

{

Node *pLink;

float Info;

} *Start, *Cur, *New, *Prev;

int n=0;

void func(Node *Start);

void vvid();

void vuvid(Node *Start);

void clear(Node *Start);

char Empty;

void TASK4()

{

clrscr();

vvid();

vuvid(Start);

func(Start);

vuvid(Start);

clear(Start);

getch();

}

void vvid()

{

cout << "Vvedit elementu spusky (kintsevuj element - 0):&bsol;n";

Cur = new Node;

Start = Cur;

do

{

Prev = Cur;

cin >> Cur->Info;

Cur->pLink = new Node;

Cur = Cur->pLink;

n++;

} while(Prev->Info != 0);

Prev->pLink = NULL;

delete Cur;

n--;

Cur = Start;

while(Cur->pLink != NULL)

{

Prev=Cur;

Cur=Cur->pLink;

}

if(Start==Cur) Start = NULL;

else

{

Prev->pLink=NULL;

delete Cur;

}

}

void vuvid(Node *Start)

{

if(Start != NULL)

{

cout << "&bsol;n&bsol;nVvedenuj spusok:&bsol;n";

Cur = Start;

while(Cur != NULL)

{

cout << Cur->Info << " ";

Cur = Cur->pLink;

}

cout << "&bsol;n&bsol;n";

}

Else {

cout << "&bsol;nVu ne vvelu spusok";

Empty ='y'; }

}

void func(Node *Start) {

if(Start != NULL)

{ int k;

Cur=Start;

cout << "Vvedit kilkist elementiv do vudalennja: ";

cin >> k;

if(k<n) {

for(int i=0; i<(n-k); i++)

{ Prev=Cur;

Cur=Cur->pLink;

}

Prev->pLink=NULL;

while(Cur!=NULL)

{

Prev=Cur;

Cur=Cur->pLink;

delete Prev;

}

}

else

cout << "Vu vvelu kilkist bilshy abo rivny kilkosti elementiv y Zpusky"; }

}

void clear(Node *Start) {

if(Start != NULL) {

Cur = Start;

while(Cur != NULL) {

Prev = Cur;

Cur = Cur->pLink;

delete Prev; }

delete Cur; }

}

2.4.3 Тестування завдання

При запуску програми з’являється повідомлення з проханням ввести елементи списку (кінцевий елемент списку - 0). Вводимо елементи списку. Натискаємо клавышу enter і появляється перелік всіх введених елементів списку. Після цього слід ввести кількість k - останніх елементів для видалення з кінця списку із звільненням займаної ними пам’яті. Кінцевим результатом є вивід на екран списку без k останніх елементів і звільнення займаної ними пам’яті(рис. 3.41).

Рис. 3.41 Приклад видалення k останніх елементів зі списку із звільненням пам’яті

2.5 Програма-монітор

2.5.1 Постановка завдання

Написати програму-монітор,яка б об’єднувала всі модулі, додати інформацію про автора і протестувати роботу проекту

2.5.2 Програма та програмна реалізація

Дане завдання реалізоване у модулі MAIN.CPP (MAIN.EXE)

Даний проект складається з 6 модулів та основного модуля, в якому міститься головна функція main() проекту. Додаткові модулі не зв’язані один з одним, а лише з головним модулем.

Загальна схема проекту із способами взаємодії між модулями наведена на рисунку 2.521


Рис. 2.521 Схема проекту

Розбиття програми на різні процедури визначається логічною структурою програми. Використання додаткових модулів дозволило спростити реалізацію проекту та більш наочно показати взаємодію одних частин проекту з іншими та значно зменшити час на відлагодження та компіляцію цілого проекту.

MAIN.CPP (додаток 1) – основний файл проекту, в ньому знаходиться послідовність дій програми, тобто в даному модулі програма викликає інші підмодулі які виконуюсь певну функцію. Програма спочатку запускає електронну титульну сторінку курсової роботи і для продовження просить натиснути будь яку клавішу, після цього виводить головне меню, в якому запитує виконання наступної дії. Після кожної виконаної дії програма виводить головне меню.

Всі ці дії безпосередньо виконуються лише запуском відповідних функцій з додаткових модулів. Крім того, функція GRAPH() ініціалізує графічний режим, підключаючи BGI драйвер EGAVGA.BGI.

Програма-монітор побудована згідно алгоритму(додатку 5).

Опишу словесно алгоритм роботи основного модулю проекту.

Цей модуль є основним меню програми, в якому надається змога вибрати любе завдання. Він містить наступні функції:

void TYTUL() – виводить титульну сторінку проекту,

void GRAPH() – ініціалізує графічний режим, підключаючи BGI драйвер EGAVGA.BGI,

void TASK1() – запускає перше завдання на виконання,

void TASK2() – запускає друге завдання на виконання,

void TASK3() – запускає третє завдання на виконання,

void TASK4() – запускає четверте завдання на виконання,

void AVTOR() – виводить повідомлення про автора проекту.

До нього підключаються усі інші модулі програми і саме з нього вони починають своє виконання. При запуску програми цей модуль починає виконання TYTUL, тобто він ініціалізовує графічний режим і виводить титульну сторінку на екран. Після цього необхідно натиснути будь-яку клавішу, щоб повернутися в головне меню. Кожному пункту меню відповідає відповідна цифра, після вводу якої запускаються інші функції (наприклад підкючення графічного режиму за допомогою функції GRAPH() і виконання підпрогами виводу повідомлення про автора - AVTOR(), це ввід цифри 6).

Підпрограма AVTOR(додаток 3). Спочатку встановлюється колір фону, після цього встановлюється колір тексту, що містить іформацію про автора. Після цього виконується затримка цього зображення на екрані монітора за допомогою функції getch() і після натискання будь-якої клавіші виконується очистка екрану за допомогою функції clrscr() і пвернення до основного меню.

Підпрограма TYTUL(додаток 2) містить лише іншу текстову інформацію. Після натискання клавіші enter підпрограма повертається у головне меню функції main().

2.5.3 Тестування завдання

Для запуску програми потрібно запустити на виконання файл MAIN.EXE. Для вірної роботи програми у тій же папці має бути файл-драйвер EGAVGA.bgi.

Дана програма може працювати під управлінням операційної системи сімейства Windows, починаючи від версії 95 та під управлінням ОС MS-DOS.

Мінімальні системні вимоги для коректної роботи програми:

- операційна система Windows 95, Windows 98 або MS-DOS;

- процесор – не менше 80386;

- оперативної пам’яті – 512 Кб;

- відеокарта – 16 біт;

- вільного місця на жорсткому диску – 1Мб.

Після запуску програми спочатку бачимо зображення електронної титульної сторінки (рис. 2.531).


Рисунок 2.531 - Зображення електронної титульної сторінки

Програма чекає, поки буде натиснута довільна клавiша.

Після натискання з’являється меню програми, з варіантами виконуваних операцій (рисунок 2.532)


Рис. 2.532 – Меню програми з варіантами дій

Для того щоб запустити перший модуль необхідно ввести 2 і натиснути клавішу вводу. Після цього ми побачимо зображення подібне до рисунка 2.533 (зображення залежить від вхідних даних).

Рис.2.533 – Завдання 1


Програма зберігає вихідні дані у файл TASK.OUT і чекає поки ми натиснемо будь-яку клавішу і потрапимо у головне меню.

Якщо вводимо 3 і натискаєм клавішу вводу, то запуститься підпрограма знаходження значення величини і номеру першого негативного і останнього позитивноо елементів у масиві( рис. 2.534).

Рис.2.534 – Завдання 2

Якщо введемо 4 і натискаєм клавішу вводу, то запуститься підпрограма знаходження кількості локальних мінімумів (рис. 2.535).

Рис.2.535 – Завдання 3


Якщо введемо 5 і натискаємо клавішу вводу, то запуститься підпрограма видалення зі списку k останніх елементів із звільненням зайнятої ними памяті (рис. 2.536)

Рис. 2.536 – Завдання 4

Якщо 6 і натискаємо клавішу вводу, появитьяс інформація про автора проекту(рис. 2.537).

Рис.2.537 – Вивід повідомлення про автора програми


Після натискання будь-якої клавіші ми потрапляєм у головне меню програми. Після вводу 7 і натисканні клавіші вводу, ми можем побачити, що програма припиняє своє виконання.


ВИСНОВКИ

Під час виконання даної курсової роботи я удосконалив свої знання в мові програмування С++ та навчився писати програми в середовищі Borland C++.

Під час виконання даної роботи були опрацьовані всі розділи мови програмування С++. Детальніше зосереджена була увага на таких розділах як масиви (їх оголошення та ініціалізація), стрічки, функції, файли (а саме зчитування даних з файлу, виведення даних у файл), структури та їх оголошення, вказівники. Створення титульної сторнки та головного меню спонукало до більш детальнішого опрацювання графічного режиму та функцій для графічних побудов.


ПЕРЕЛІК ПОСИЛАНЬ

1. Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. Навч. посібн. 3-тє вид. – Львів: СПД Глинський, 2006. – 192с.