Росен Красимиров Стойков



Дата28.02.2022
Размер184.79 Kb.
#113501
ТипЗадача
Курсова задача по САА
Свързани:
Алфер Адлер, Аристотел, Зенон, Инструкция за деловодната дейност и документооборота в ЦУ на НСИ

Курсова задача по САА


На
Росен Красимиров Стойков
203003
С преподавател: гл. ас. д-р Емилия Големанова
Дата:18.12.2021 г.


  1. Задание номер 13:




  1. Описание на решението:

  • Графично изображение на динамичния списък




  • Описание на алгоритмите, съответстващи на подточките от заданието

  • Функция за създаване на списъка:

Функцията за създаване на списъка е с името Create.
Декларирам указател P и Last. Задавам, че Last=NULL. Декларирам char ch. Извеждам съобщение на екрана с въпроса ще се добавя ли нов адрес и задавам,че ще се въвежда в ch. Навлизаме в while цикъл с условието,че ако за ch бъде въвведено „Y” или “y”,ще се премине през цикъла и той ще се изпълни.В тялото на цикъла започваме с декларация за създаването на нов списък (P= new obsht), извежда се съобщение за въвеждане на адрес и с оператора за въвеждане този адрес се въвежда в променливата adr. След това се извежда съобщение за въвеждане броя жители на въведения адрес и въведените жители се записват във променливата broi. След това имаме условие(if) което гласи ако “Head=NULL” или не съществува глава на списъка, то указателя P ще сочи към главата (Head). След условието имаме else през който се минава само ако условието в началото на while цикъла(ch == 'Y' || ch == 'y') не е изпълнено. В тялото на else имаме : „ Last->next = P“ т.е Last сочи към указателя P с което приключва else. В края на while цикъла имаме: Last = P т.е. Last и P сочат на едно и също място, след което извеждам съобщение с въпроса дали ще се добавя нов адрес и ако условието в началото е изпълнено, while цикъла се повтаря. Излизаме от цикъла когато условието не е изпълнено.

  • Функция за изтриване на жител на общината, живеещ на даден адрес:

Функцията за изтриване на жител е с името (delPersonOnAdress). Декларирам указател (P) и нов низ който се явява локална променлива (string adres). Слагам оператор за извеждане на съобщение на екрана(cout), както и такъв за въвеждане (cin), който дава възможност да въведа данни за променливата “adres”. След това навлизаме в while цикъл, с условие докато указателят P не сочи никъде, той да бъде преместен на следващия елемент, но ако(if) сочи към първата променлива за адрес(adr) то му се присвоява и новата променлива (adres). Извежда се съобщение на екрана казващо, че жителят е изтрит и се намалят жителите с 1 със оператора „P->broi—” което излизаме от цикъла и от функцията.

  • Функция за извеждане на информацията в списъка:

Функцията за извеждане е с името PrintList. При навлизането във функцията се започва с условие (if), което гласи: ако „P==NULL“ т.е. списъкът е празен се извежда съобщение, че няма адреси за показване, но ако има такива навлизаме в while цикъл гласящ: ако „P!=NULL” т.е. списъкът не е празен се извеждат наличните адреси в списъка, с което излизаме от цикъла и от функцията.

  1. Описание на използваните функции:

=============================
Вид на функцията: void Create (point &Head)
Действие: Създаване на едносвързан списък
Параметри: Head - указател
Използвани глобални променливи: няма
Извиквани функции:няма
=============================
Вид на функцията: void PrintList (point P)
Действие: Извеждане на елементите в едносвързан списък.
Параметри: P - указател
Използвани глобални променливи: няма
Извиквани функции: няма
=============================
Вид на функцията: void delPersonOnAdress(point P)
Действие: Изтриване на елемент в едносвързан списък.
Параметри: P - указател
Използвани глобални променливи: няма
Извиквани функции: няма
=============================
Вид на функцията: int main()
Действие: Извикване на всички функции.
Параметри: няма
Използвани глобални променливи: няма
Извиквани функции: Create(Head) – създаване на списък,
PrintList(Head) – извеждане на елементите в списъка
delPersonOnAdress(Head) – изтриване на елемент от списъка


  1. Тестови примери, доказващи верността на основните функции:





  1. Разпечатка на кода с коментари:

#include


#include
using namespace std;
struct obsht { //декларация на списък
int broi;
string adr;
obsht* next;
};
typedef obsht* point;
void Create(point& Head) { //създаване на списък
point P, Last;
Last = NULL;
char ch;
cout << "Ще добавите ли нов адрес? (Y/N): ";
cin >> ch;
while (ch == 'Y' || ch == 'y')
{
P = new obsht;
cout << "�'ъведете адрес: ";
cin >> P->adr;
cout << "�'ъведете броя жители живущи на този адрес: ";
cin >> P->broi;
P->next = NULL;
if (Head == NULL)
{
Head = P;
}
else
{
Last->next = P;
}
Last = P;
cout << "Ще добавите ли нов адрес? (Y/N): ";
cin >> ch;
}
}
void PrintList(point P) // �звеждане елементите на списъка
{
if (P == NULL) cout << "Няма адреси за показване" << endl;
else {
while (P != NULL)
{
cout << " Адрес: " << P->adr <<" �'рой жители живущи на адреса: " << P->broi << endl;
P = P->next;
}
}
}
void delPersonOnAdress(point P) //�зтриване на елемент от списъка
{
string adres;
cout << "�'ъведете адрес от който желаете да триете жител: ";
cin >> adres;
while (P)
{
if (P->adr == adres)
{
cout << "Жителят на посочения адрес е изтрит" << endl;
P->broi--;
}
P = P->next;
}
}
int main() // �звикване на всички функции
{
system ("chcp 1251");
point Head;
Head = NULL;
Create(Head);
PrintList(Head);
if (Head)
{
delPersonOnAdress(Head);
cout << "Актуализирания списък: " << endl;
PrintList(Head);
}
}


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница