Розробка програми для роботи з лінійним двозв'язним списком

Основні властивості динамічних структур даних, сфера їх застосування, приклади використання. Розробка алгоритму для обробки двозв'язного списку, що реалізовує операції додавання та видалення елементу, сортування, розділення та роздрукування списку.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 04.05.2014
Размер файла 669,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ЗМІСТ

Вступ

1. Теоретичні відомості

1.1 Динамічні структури даних

1.2 Зв'язні списки

1.3 Представлення зв'язних списків у пам'яті

2. Основний розділ (розробка)

2.1 Постановка задачі

2.2 Опис обраної структури даних

2.3 Опис алгоритму і програми

2.4 Контрольні приклади

2.5 Керівництво користувача

Висновки

Список літератури

Додаток А. Код програми на С++

ВСТУП

Сучасні алгоритми працюють з великим обсягом інформації, і тому час пошуку у таких алгоритмах є критичним. Таким чином, актуальним є розроблення структур даних для ефективного зберігання та обробки інформації.

Однією з таких структур є бінарне дерево. Це динамічна структура даних, розмір якої обмежується тільки розміром віртуальної пам'яті комп'ютера. Бінарні дерева забезпечують пошук конкретного значення, максимуму, мінімуму, попереднього, наступного, операції вставки та видалення елемента.

Пошук у збалансованому дереві виконується за час O(log2n), але звичайні бінарні дерева можуть вироджуватись у список, при цьому пошук вже триватиме O(n) часу.

У повсякденному житті ми дуже часто зустрічаємо приклади дерев. Наприклад, люди часто використовують генеалогічне дерево для зображення структури свого роду; як ми побачимо, багато термінів, пов'язаних з деревами, узято саме звідси.

Другий приклад - це структура великої організації; використання деревоподібної структури для представлення її "ієрархічної структури" нині широко використовується в багатьох комп'ютерних завданнях.

Третій приклад - це граматичне дерево; спочатку воно служило для граматичного аналізу комп'ютерних програм, а нині широко використовується і для граматичного аналізу літературної мови.

1. ТЕОРЕТИЧНІ ВІДОМОСТІ

1.1 Динамічні структури даних

Динамічні структури за визначенням характеризуються відсутністю фізичної суміжності елементів структури в пам'яті непостійністю і непередбачуваністю розміру (числа елементів) структури в процесі її обробки [1-2]. У цьому розділі розглянуті особливості динамічних структур, визначувані їх першою характерною властивістю. Особливості, пов'язані з другою властивістю розглядаються в останньому розділі даного розділу.

Оскільки елементи динамічної структури розташовуються по непередбачуваних адресах пам'яті, адреса елементу такої структури не може бути обчислений з адреси початкового або попереднього елементу. Для встановлення зв'язку між елементами динамічної структури використовуються покажчики, через які встановлюються явні зв'язки між елементами. Таке представлення даних в пам'яті називається зв'язним. Елемент динамічної структури складається з двох полів:

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

поле зв'язок, в якому містяться один або декілька покажчиків, що пов'язує даний елемент з іншими елементами структури;

Коли зв'язне представлення даних використовується для вирішення прикладного завдання, для кінцевого користувача "видимим" робиться тільки вміст інформаційного поля, а поле зв'язок використовується тільки програмістом-розробником.

Достоїнства зв'язного представлення даних - в можливості забезпечення значної мінливості структур;

розмір структури обмежується тільки доступним об'ємом машинної пам'яті;

при зміні логічній послідовності елементів структури потрібне не переміщення даних в пам'яті, а тільки корекція покажчиків.

Разом з тим зв'язне уявлення не позбавлене і недоліків, основні з яких:

робота з покажчиками вимагає, як правило, вищої кваліфікації від програміста;

на поля зв'язок витрачається додаткова пам'ять;

доступ до елементів зв'язної структури може бути менш ефективним за часом.

Останній недолік є найбільш серйозним і саме їм обмежується застосовність зв'язного представлення даних. Якщо в суміжному представленні даних для обчислення адреси будь-якого елементу нам у всіх випадках достатньо було номери елементу і інформації, що міститься в дескрипторі структури, то для зв'язного уявлення адреса елементу не може бути обчислений з початкових даних. Дескриптор зв'язної структури містить один або декілька покажчиків, що дозволяють увійти до структури, далі пошук необхідного елементу виконується проходженням по ланцюжку покажчиків від елементу до елементу. Тому зв'язне уявлення практично ніколи не застосовується в завданнях, де логічна структура даних має вид вектора або масиву - з доступом по номеру елементу, але часто застосовується в завданнях, де логічна структура вимагає іншої початкової інформації доступу (таблиці, списки, дерева і так далі).

1.2 Зв`язні списки

Списком називається впорядкована множина, що складається із змінного числа елементів, до яких застосовні операції включення, виключення. Список, що відображає відносини сусідства між елементами, називається лінійним. Якщо обмеження на довжину списку не допускаються, то список представляється в пам'яті у вигляді зв'язної структури. Лінійні зв'язні списки є простими динамічними структурами даних.

Графічно зв'язку в списках зручно зображати за допомогою стрілок. Якщо компонента не пов'язана ні з якою іншою, то в полі покажчика записують значення, не вказуюче ні на який елемент. Таке посилання позначається спеціальним ім'ям - null.

1.3 Представлення зв`язних списків у пам`яті

У пам'яті списком є сукупність дескриптора і однакових за розміром і форматом записів, розміщених довільно в деякій області пам'яті і зв'язаних один з одним в лінійно впорядкований ланцюжок за допомогою покажчиків. Запис містить інформаційні поля і поля покажчиків на сусідні елементи списку, причому деякими полями інформаційної частини можуть бути покажчики на блоки пам'яті з додатковою інформацією, що відноситься до елементу списку. Дескриптор списку реалізується у вигляді особливого запису і містить таку інформацію про список, як адреса початку списку, код структури, ім'я списку, поточне число елементів в списку, опис елементу і так далі, і тому подібне Дескриптор може знаходитися в тій же області пам'яті, в якій розташовуються елементи списку, або для нього виділяється яке-небудь інше місце.

2. ОСНОВНИЙ РОЗДІЛ (РОЗРОБКА)

2.1 Постановка задачі

Завдання до курсової роботи за 11 варіантом сформоване наступним чином:

Реалізувати лінійний двозв'язний список для зберігання і операцій з даними виду:

Прізвище

Рів вступу

Середній бал

Забезпечити виконання операцій:

додавання елементу в неврегульований список;

сортування списку по полю "Прізвище";

додавання елементу у впорядкований список;

видалення елементу із списку;

роздрукування списку;

розділення списку на два по значенню поля "Середній бал".

2.2 Опис обраної структури даних

Так як в завданні вимагається реалізувати двозв`язний список для зберігання інформації про студентів, то в стурктурі даних буде міститись два посилання: перше посилання -- на наступний елемент списку, а друге -- на попередній елемент. Стуктура даних в пам'яті комп'ютера буде роташовуватись наступним чином (двозв'язний список. Слід зауважити, що в даному випадку покажчики Next і Prev вказують на наступний та попередній елементи списку відповідно. Покажчик Prev першого запису у списку дорівнює нульовому значенню null, що вказує саме на те, що елемент є першим (поперед нього нічого немає). За тим же принципом в останньому запису - покажчик Next має нульове значення (після нього нічого немає). Якщо ми опишемо стуктуру списку на мові програмування С++, то отримаємо програмний код наступного вигляду:

struct list

{char surname[30]; // фамилия

int yearOfEntrance; // год поступления

float averageBall; // средний балл

list* next; // указатель на следующий элемент списка

list* prev; //указатель на предыдущий элемент списка};

//завершение описания структуры данных

Поля char Surname[30], int yearOfEntrance, float averageBall - це інформаційні поля, які несуть корисне навантаження і містять у собі дані про студентів, а саме: Прізвище, рік вступу, середній бал студента.

2.3 Опис алгоритму і програми

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

· void AddElementToList()

· void PrintList()

· void SortAscBySurname()

· void SortAscByAvgBall()

· bool DeleteElementBySurname(char surname [])

· void SplitByAverageBall(float avgBall)

· void menu()

Функція void AddElementToList() виконує додавання елемента у вже існуючий список. Причому додавання нових елементів відбуватиметься почергово у кінець списку. Фрагмент програмного коду:

//заполняем введенными данными элементы списка

strcpy(newRecord->surname, bufferSurname);

newRecord->yearOfEntrance = bufferYear;

newRecord->averageBall = bufferBall;

//проверка:если элементов нет, то голова и конец - это первый элемент

if(head == NULL)

{head = newRecord;

tail = newRecord;

head->prev = NULL;}

else

{//если в списке есть элементы, то добавляем в конец

tail->next = newRecord;

newRecord->prev = tail;

tail = tail->next;}

itemsInList++;

tail->next = NULL;

двозв'язний список програма алгоритм

Функція void PrintList() виконує друк списку на екран монітора. Завдяки цій функції користувач може побачити вміст струтури даних. Вивід організований завдяки стандартній функції друку cout, а саме:

if(head==NULL)

{ CharToOemA("ОШИБКА: Список пуст!\n", buf);

cout<<buf;

return;} //если список пуст вывести это и закончить функцию

list* Temp=head; // создаем временный указатель и указываем на голову списка

while(Temp!=NULL)

{//пока не дойдем до конца списка

//вывод информации

CharToOemA("\nФамилия: ", buf);

cout<<buf;

cout<<Temp->surname;

CharToOemA("\nГод поступления: ", buf);

cout<<buf;

cout<<Temp->yearOfEntrance;

CharToOemA("\nСредний балл: ", buf);

cout<<buf;

cout<<Temp->averageBall<<"\n";

Temp=Temp->next;//указатель двигаем на след элемент списка}

Для того, щоб в консольному вікні ми могли бачити російські букви, ми використаємо функцію CharToOem - яка перетворює рядок у певний OEM набір символів. Також, якщо список буде пустим, то з'явиться відповідне повідомлення.

Функція void SortAscBySurname() виконує сортування списку в алфавітному порядку за значенням поля «Прізвище». Фрагмент коду:

//временные переменные для обмена местами элементов списка

char buffer[255];

int bufferYear;

float bufferAvBall;

//указываем на 1 элемент в списке

list *tempElement = head;

//цикл сдвигает один элемент в конец, меняет местами данные в элементах

while(tempElement->next)

if(strcmp(tempElement->next->surname, tempElement->surname) < 0)

{strcpy(buffer, tempElement->next->surname);

strcpy(tempElement->next->surname, tempElement->surname);

strcpy(tempElement->surname, buffer);

bufferYear = tempElement->next->yearOfEntrance;

tempElement->next->yearOfEntrance = tempElement- >yearOfEntrance;

tempElement->yearOfEntrance = bufferYear;

bufferAvBall= tempElement->next->averageBall;

tempElement->next->averageBall = tempElement->averageBall;

tempElement->averageBall = bufferAvBall;}

tempElement = tempElement->next;}

Якщо список не пустий, і складається більше ніж з одного елементу, то буде виконане сортування. Ми створюємо тимчасові змінні для обміну місцями елементів списку. В даному циклі використаємо функцію strcmp - яка порівнює в лексикографічному порядку два рядки і повертає ціле значення, залежне наступним чином від результату порівняння:

· якщо менше 0 - то перший рядок менше другого

· якщо 0 - то рядки рівні

· якщо більше 0 - то перший рядок більше другого

Функція void SortAscByAvgBall() аналогічна попередній функції. Ми використаємо її для сортування середнього балу при розділенні списку на два, щоб список студентів їх балами виводився по зростанню. В програмі це буде представлено так:

//временные переменные для обмена местами элементов списка

char buffer[255];

int bufferYear;

float bufferAvBall;

//указываем на 1 элемент в списке

list *tempElement = head;

//цикл сдвигает один элемент в конец, меняет местами данные в элементах

while(tempElement->next)

{if(tempElement->next->averageBall < tempElement->averageBall)

{strcpy(buffer, tempElement->next->surname);

strcpy(tempElement->next->surname, tempElement->surname);

strcpy(tempElement->surname, buffer);

bufferYear = tempElement->next->yearOfEntrance;

tempElement->next->yearOfEntrance = tempElement->yearOfEntrance;

tempElement->yearOfEntrance = bufferYear;

bufferAvBall= tempElement->next->averageBall;

tempElement->next->averageBall = tempElement->averageBall;

tempElement->averageBall = bufferAvBall;}

tempElement = tempElement->next;}

Також для сортування використаємо функцію strcpy, в результаті якої бали студентів відсортуються в порядку зростання.

Функція bool DeleteElementBySurname(char surname []) виконує видалення елементу з введеним прізвищем. Це організовано наступним чином:

{bool isDeleted = false;//переменная для контроля того, удалился ли элемент

list *tempElement = head;

while(tempElement)//пока элемент не будет NULL

{if(!(strcmp(surname, tempElement->surname)))

{if(tempElement == head)

{head = head->next;

if(head)

{head->prev = NULL;}

else

{tail = NULL;}

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

if(tempElement == tail)

{tail = tail->prev;

tail->next = NULL;

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

tempElement->prev->next = tempElement->next;

tempElement->next->prev = tempElement->prev;

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

tempElement = tempElement->next}

return isDeleted;}

Спочатку ми вводимо прізвище, потім за допомогою функції strcmp зрівнюємо його з прізвищами студентів у списку, поки не найдемо потрібне, після чого ми видаляємо весь елемент. В разі, якщо прізвище не було найдене, з'явиться повідомлення про помилку, для цього ми використовуємо функцію bool isDeleted, яка видає значення true або false.

Функція void SplitByAverageBall(float avgBall) виконує розділення списку на два, по значенню поля «Середній бал». Це видно на фрагменту з програми:

bool isStudentLower = false;

bool isStudentHigher = false;

CharToOemA("\nСтуденты, у которых средний балл < ", buf);

cout<<buf;

cout<<avgBall<<":\n";

list *tempElement = head;

while(tempElement)

{if(tempElement->averageBall < avgBall)

{isStudentLower = true;

cout<<tempElement->surname<<" "<<tempElement->averageBall<<"\n";}

tempElement = tempElement->next;}

if(!isStudentLower)

{CharToOemA("нет студентов\n", buf);

cout<<buf;}

Після введення балу для розділення списку, функція зрівнює цей бал з кожним балом студентів у списку. В разі виконання умови (бал < введеного), студент виводиться на екран, після того як функція провірить всі елементи списку, буде провірятись виконання умови (бал ? введеного) по такому ж алгоритму. Якщо список буде пустим, або не буде знайдено студентів з такою кількістю балів, то користувача буде про це повідомлено.

2.4 Контрольні приклади

Головне меню програми має наступний вигляд:

При виконанні функції «Додавання елементу в невпорядкований список (1)», будуть відображені наступні поля для вводу інформації (Середній бал вводиться через символ « . »):

Добавимо ще кілька студентів в список.

Якщо тепер скористатись кнопкою «Виведення списку на екран (2)», ми побачимо наступну інформацію:

Тепер спробуємо видалити студента з прізвищем «Петров». Для цього потрібно скористатись пунктом меню #3 «Видалити елемент з вказаним прізвищем (3)». На екрані ми побачимо наступне:

Якщо ми введемо невірне прізвище (наприклад «Коваль»), програма видасть помилку:

Після того, як ми видалили прізвище «Петров», виведемо список студентів, які залишились (2):

Тепер добавимо ще кілька студентів, щоб ми могли відсортувати весь список по полю «Прізвище».

Скористаємось функцією «Сортувати список по прізвищам (4)», після чого нам буде виведено новий список студентів:

Виконаємо добавлення нового студента в уже відсортований список за допомогою пункту №5 «Добавити елемент в відсортований список (5)», тобто список буде відсортований знову разом з цим студентом, і виведемо новий список на екран:

Якщо ж ми хочемо добавити нового студента в відсортований список, але в кінець, то ми можемо скористатись пунктом меню №1 «Добавлення елемента в список (1)», про який ми вже говорили.

Тепер нам тільки залишилось розділити весь список на два по значенню поля «Середній бал». Скористаємось цим пунктом, який знаходить в меню під номером 6 «Розділити список на два по середньому балу (6)». Для прикладу розділимо список на два по середньому балу 84, на екран буде виведено наступне:

А для завершення роботи програми, потрібно нажати цифру 7, яка в меню підписана як «Вихід (7)».

2.5 Керівництво користувача

При запуску програми, перед користувачем з'являється вибір:

Очікування вибору пункту меню триває до тих пір, доки не буде введена цифра, присутня серед номерів пунктів. При введенні цифри не потрібно нажимати кнопку Enter. Після завершення кожної операції заново надрукується меню і програма буде чекати вибору наступного пункту.

У меню працюють тільки ці 7 кнопок, але якщо користувач натисне іншу кнопку, програма просто обновить меню знову.

ВИСНОВКИ

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

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

Розглянуті основні властивості динамічних структур даних, сфера їх застосування, а також приведені приклади їх використання

Додаток А.

Код програми на С++

#include "stdafx.h"

#include <iostream> //директива для ввода вывода

#include <conio.h> //для функции getch()

#include <windows.h> //для вывода русского текста

using namespace std;

///структура///

struct list

{char surname[30]; // фамилия

int yearOfEntrance; // год поступления

float averageBall; // средний балл

list* next; // указатель на следующий элемент списка

list* prev; //указатель на предыдущий элемент списка};

list* head; //указатель на начало списка

list* tail; //указатель на конец списка

int itemsInList = 0; //глобальная переменная-счётчик элементов списка

char buf[256];

///функция добавления в нерегулированный список///

void AddElementToList()

{//временные переменные для ввода фамилии, года поступления, среднего балла

char bufferSurname[30];

int bufferYear;

float bufferBall;

//создаем новый элемент списка

list *newRecord = new list;

//ввод данных

CharToOemA("Фамилия: ", buf);

cout<<buf;

cin>>bufferSurname;

CharToOemA("Год поступления: ", buf);

cout<<buf;

cin>>bufferYear;

CharToOemA("Средний балл: ", buf);

cout<<buf;

cin>>bufferBall;;

//заполняем введенными данными элементы списка

strcpy(newRecord->surname, bufferSurname);

newRecord->yearOfEntrance = bufferYear;

newRecord->averageBall = bufferBall;

//проверка:если элементов нет, то голова и конец - это первый элемент

if(head == NULL)

{head = newRecord;

tail = newRecord;

head->prev = NULL;}

else

{//если в списке есть элементы, то добавляем в конец

tail->next = newRecord;

newRecord->prev = tail;

tail = tail->next;}

itemsInList++;

tail->next = NULL}

void PrintList(){

if(head==NULL)

{ CharToOemA("ОШИБКА: Список пуст!\n", buf);

cout<<buf;

return;} //если список пуст вывести это и закончить функцию

list* Temp=head; // создаем временный указатель и указываем на голову списка

while(Temp!=NULL)

{//пока не дойдем до конца списка

//вывод информации

CharToOemA("\nФамилия: ", buf);

cout<<buf;

cout<<Temp->surname;

CharToOemA("\nГод поступления: ", buf);

cout<<buf;

cout<<Temp->yearOfEntrance;

CharToOemA("\nСредний балл: ", buf);

cout<<buf;

cout<<Temp->averageBall<<"\n";

Temp=Temp->next;//указатель двигаем на след элемент списка}

cout<<"\n"}

void SortAscBySurname()

{if(head==NULL)

{return;}

if(head->next == NULL)

{return;}

//временные переменные для обмена местами элементов списка

char buffer[255];

int bufferYear;

float bufferAvBall;

//указываем на 1 элемент в списке

list *tempElement = head;

//цикл сдвигает один элемент в конец, меняет местами данные в элементах

while(tempElement->next)

{if(strcmp(tempElement->next->surname, tempElement->surname) < 0)

{strcpy(buffer, tempElement->next->surname);

strcpy(tempElement->next->surname, tempElement->surname);

strcpy(tempElement->surname, buffer);

bufferYear = tempElement->next->yearOfEntrance;

tempElement->next->yearOfEntrance = tempElement->yearOfEntrance;

tempElement->yearOfEntrance = bufferYear;

bufferAvBall= tempElement->next->averageBall;

tempElement->next->averageBall = tempElement->averageBall;

tempElement->averageBall = bufferAvBall;}

tempElement = tempElement->next;}}

void SortAscByAvgBall()

{if(head==NULL)

{return;}

if(head->next == NULL)

{return;}

char buffer[255];

int bufferYear;

float bufferAvBall;

list *tempElement = head;

while(tempElement->next)

{if(tempElement->next->averageBall < tempElement->averageBall)

{strcpy(buffer, tempElement->next->surname);

strcpy(tempElement->next->surname, tempElement->surname);

strcpy(tempElement->surname, buffer);

bufferYear = tempElement->next->yearOfEntrance;

tempElement->next->yearOfEntrance = tempElement->yearOfEntrance;

tempElement->yearOfEntrance = bufferYear;

bufferAvBall= tempElement->next->averageBall;

tempElement->next->averageBall = tempElement->averageBall;

tempElement->averageBall = bufferAvBall;}

tempElement = tempElement->next;}}

bool DeleteElementBySurname(char surname [])

{bool isDeleted = false;//переменная для контроля того, удалился ли элемент

list *tempElement = head;

while(tempElement)//пока элемент не будет NULL

{if(!(strcmp(surname, tempElement->surname)))

{if(tempElement == head)

{head = head->next;

if(head)

{head->prev = NULL;}

else

{tail = NULL;}

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

if(tempElement == tail)

{tail = tail->prev;

tail->next = NULL;

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

tempElement->prev->next = tempElement->next;

tempElement->next->prev = tempElement->prev;

delete tempElement;

isDeleted = true;

itemsInList--;

break;}

tempElement = tempElement->next}

return isDeleted;}

void SplitByAverageBall(float avgBall)

{bool isStudentLower = false;

bool isStudentHigher = false;

CharToOemA("\nСтуденты, у которых средний балл < ", buf);

cout<<buf;

cout<<avgBall<<":\n";

list *tempElement = head;

while(tempElement)

{if(tempElement->averageBall < avgBall)

{isStudentLower = true;

cout<<tempElement->surname<<" "<<tempElement->averageBall<<"\n";}

tempElement = tempElement->next;}

if(!isStudentLower)

{CharToOemA("нет студентов\n", buf);

cout<<buf;}

cout<<"-------------------------------------\n";

CharToOemA("Студенты, у которых средний балл > ", buf);

cout<<buf;

cout<<avgBall<<":\n";

tempElement = head;

while(tempElement)

{if((tempElement->averageBall > avgBall)||(tempElement->averageBall == avgBall))

{isStudentHigher = true;

cout<<tempElement->surname<<" "<<tempElement->averageBall<<"\n";}

tempElement = tempElement->next;}

if(!isStudentHigher)

{CharToOemA("нет студентов\n", buf);

cout<<buf;}

cout<<"\n\n"}

void menu() //меню

{char bufferSurname[50];

int key;

float bufferAvgBall;

cout<<" ---------------------------------------------------------------\n";

CharToOemA("| 1.Добавить элемент в нерегулированный список |\n", buf);

cout<<buf;

CharToOemA("| 2.Вывести список на экран |\n", buf);

cout<<buf;

CharToOemA("| 3.Удалить элемент с указанной фамилией |\n", buf);

cout<<buf;

CharToOemA("| 4.Отсортировать список по фамилии |\n", buf);

cout<<buf;

CharToOemA("| 5.Добавить элемент в отсортированный список |\n", buf);

cout<<buf;

CharToOemA("| 6.Разделить список на два по значению поля \"Средний балл\" |\n", buf);

cout<<buf;

CharToOemA("| 7.Выйти |\n", buf);

cout<<buf;

cout<<" ---------------------------------------------------------------\n";

key=getch(); //принять значение нажатой клавиши

switch(key)

{case 49:

AddElementToList();

break;

case 50:

PrintList();

system("pause");

break;

case 51:

if(head == NULL)

{CharToOemA("ОШИБКА: Список пуст!\n", buf);

cout<<buf;

system("pause");

system("cls");

break;}

CharToOemA("Введите фамилию для удаления: ", buf);

cout<<buf;

cin>>bufferSurname;

if(!DeleteElementBySurname(bufferSurname))

{CharToOemA("ОШИБКА: Нет студента с фамилией \"", buf);

cout<<buf;

cout<<bufferSurname<<"\"!\n";}

else

{CharToOemA("ОК: Удален студент \"", buf);

cout<<buf;

cout<<bufferSurname<<"\"!\n";}

system("pause");

break;

case 52:

for(int i = 0; i < itemsInList; i++)

{SortAscBySurname();}

PrintList();

system("pause");

break;

case 53:

AddElementToList();

for(int i = 0; i < itemsInList; i++)

{SortAscBySurname();}

break;

case 54:

if(head==NULL)

{CharToOemA("ОШИБКА: Список пуст!\n", buf);

cout<<buf;

system("pause");

return;}

for(int i = 0; i < itemsInList; i++)

{SortAscByAvgBall();}

CharToOemA("Введите средний балл для разделения: ", buf);

cout<<buf;

cin>>bufferAvgBall;

SplitByAverageBall(bufferAvgBall);

system("pause");

break;

case 55:

exit(0);

break;}}

int main()

{while(true)

{system("cls");

menu();}

return 0}

Размещено на Allbest.ru

...

Подобные документы

  • Створення динамічних структур та списку шляхом додавання елементів в кінець списку, шляхом вставляння елемента в середину списку. Відмінності стека від списку, основні операції із стеком. Формування та основні операції над кільцем, обхід кільця.

    реферат [170,8 K], добавлен 07.09.2011

  • Розробка структури, алгоритму роботи програми, яка забезпечує можливість покупки товарів. Створення списку користувачів та списку продуктів. Розробка структур даних та основних процедур програми. Алгоритм створення платформи під назвою "Сlaude Monet".

    курсовая работа [121,3 K], добавлен 14.05.2019

  • Поняття черги в програмуванні, основні операції з чергою і їх реалізація. Опис алгоритму й специфікація програми. Розробка додатку з використанням задачі Ларсона по опису зв'язного неорієнтованого графа. Алгоритм розв’язку і результати виконання програми.

    курсовая работа [1,1 M], добавлен 14.09.2012

  • Організація двозв’язного списку об’єктів в динамічній пам’яті. Функція Power як авторська реалізація функції піднесення в квадрат. Реалізація зв’язку між елементами і їх координатами у файл. Відображення результату в полі Crossed класу TTriangle.

    курсовая работа [27,3 K], добавлен 14.03.2013

  • Розробка алгоритму роботи програми, її загальна характеристика та функціональні особливості, умови ефективного використання. Способи виклику та адреса завантаження, відомості про використання оперативної пам'яті. Посібник системного програміста.

    курсовая работа [182,6 K], добавлен 07.06.2016

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Алгоритм покриття за методом "мінімальній стовпець - максимальний рядок". Підпрограми основного алгоритму. Розробка програми сортування методом простих включень (бульбашковим методом). Словесний опис алгоритму, його контрольний приклад та ефективність.

    курсовая работа [36,4 K], добавлен 06.03.2013

  • Розробка структури бази даних. ER-моделі предметної області. Проектування нормалізованих відношень. Розробка форм, запитів, звітів бази даних "Автосалон". Тестування роботи бази даних. Демонстрація коректної роботи форми "Додавання даних про покупців".

    курсовая работа [4,0 M], добавлен 02.12.2014

  • Мінімізація функції за методом карт Карно; розробка програм на мові асемблеру для Intel 8051: сортування масиву однобайтних даних у зовнішній пам’яті; формування послідовності прямокутних імпульсів; підрахунок кількості натискань на клавішу переривання.

    курсовая работа [196,2 K], добавлен 14.04.2012

  • Основні операції над стеком. Бінарне дерево пошуку. Абстрактний тип даних "Черга". Динаміка вмісту списку при внесенні до нього елемента. Написання програми синтаксичного аналізу відповідностей відкриваючих і закриваючих дужок в арифметичному виразі.

    курсовая работа [2,9 M], добавлен 14.05.2015

  • MS-DOS - перша операційна система. Створення в операційній системі MS-DOS резидентної програми захисту файлів від видалення, її використання в випадках захисту файлів від випадкового видалення. Структура вхідних та вихідних даних, алгоритм рішення задачі.

    курсовая работа [35,5 K], добавлен 16.11.2012

  • Характеристика та відмінні ознаки динамічних структур даних, особливості та умови їх застосування. Переваги роботи з даними такого типу. Опис структури даних "двохзв’язний список", етапи її розробки, функціональні особливості, інструкція з використання.

    контрольная работа [28,3 K], добавлен 24.09.2010

  • Система транслітерування українських текстів з кирилиці на латиницю,її призначення та властивості. Розробка спеціальної програми для здійснення операції з транслітерування, реалізація розробленого алгоритму. Контрольні приклади та аналіз їх реалізації.

    курсовая работа [194,0 K], добавлен 25.03.2011

  • Аналіз предметної області і постановка задачі на розробку програми для автоматизації роботи автопідприємства. Перелік та опис використаних компонентів та основних процедур програми. Опис структур та методів обробки даних. Інструкція для користувача.

    курсовая работа [2,3 M], добавлен 15.02.2012

  • Проектування програми з метою автоматизації обліку продажу квитків на автостанції та отримання потрібної інформації. Розробка структур та вибір методів обробки даних. Алгоритми функціонування програмних модулів, забезпечення якісних показників їх роботи.

    курсовая работа [1,2 M], добавлен 07.01.2012

  • Призначення драйверів та порядок роботи з драйверами в MS-DOS. Розробка драйверів консолі. Структура драйвера та призначення компонентів. Розробка структури алгоритму, програми налагодження драйвера. Опис змінних програми та роботи модулів програми.

    курсовая работа [1,0 M], добавлен 22.06.2012

  • Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.

    дипломная работа [3,3 M], добавлен 10.10.2013

  • Пристрої базової конфігурації персонального комп’ютера. Порядок роботи зі списками даних в текстовому редакторі: створення нумерованого або маркірованого списку, використання багаторівневих списків, перетворення їх в звичайний текст, додавання позицій.

    реферат [1,0 M], добавлен 27.09.2011

  • Основні підходи до проектування баз даних. Опис сайту Інтернет-магазину, характеристика його підсистем для обробки анкет і запитів користувачів. Розробка концептуальної, інфологічної, даталогічної, фізичної моделей даних. Побудова ER-моделі в CASE-засоби.

    курсовая работа [2,3 M], добавлен 01.02.2013

  • Розробка програмного забезпечення для перевірки матричних критеріїв керованості та спостережуваності лінійних динамічних систем з застосуванням програмного середовища MATLAB – модуль Control System ToolBox. Розробка алгоритму підготовки вихідних даних.

    дипломная работа [2,4 M], добавлен 20.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.