Главная страница

Лабораторная работа по Алгоритмам и структурам данных. Лабораторная работа №1. Отчет по лабораторной работе 1 по дисциплине Алгоритмы и структуры данных Тема Множества Студент гр. 9891 Преподаватель


Скачать 130.71 Kb.
НазваниеОтчет по лабораторной работе 1 по дисциплине Алгоритмы и структуры данных Тема Множества Студент гр. 9891 Преподаватель
АнкорЛабораторная работа по Алгоритмам и структурам данных
Дата08.11.2021
Размер130.71 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа №1.docx
ТипОтчет
#266606
страница2 из 2
1   2


goto inputA;}}

for (int i = 0; i < numA; i++) {

for (int j = 0; j < 33; j++) {

if (setA[i] == setUniversum[j]) {

setArrayBitA[j] = true;}}}

cout << "Введите количество элементов множества B: ";

cin >> numB;

cin.ignore();

char* setB = new char[numB + 1];

inputB:

cout << "Введите элементы множества B: ";

cin.getline(setB, numB + 1, '\n');

for (int i = 0; i < numB; i++) {

if (!isupper((unsigned char)setB[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputB;}}

for (int i = 0; i < numB; i++) {

for (int j = 0; j < 33; j++) {

if (setB[i] == setUniversum[j]) {

setArrayBitB[j] = true;}}}

cout << "Введите количество элементов множества C: ";

cin >> numC;

cin.ignore();

char* setC = new char[numC + 1];

inputC:

cout << "Введите элементы множества C: ";

cin.getline(setC, numC + 1, '\n');

for (int i = 0; i < numC; i++) {

if (!isupper((unsigned char)setC[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputC;}}

for (int i = 0; i < numC; i++) {

for (int j = 0; j < 33; j++) {

if (setC[i] == setUniversum[j]) {

setArrayBitC[j] = true;}}}

cout << "Введите количество элементов множества D: ";

cin >> numD;

cin.ignore();

char* setD = new char[numD + 1];

inputD:

cout << "Введите элементы множества D: ";

cin.getline(setD, numD + 1, '\n');

for (int i = 0; i < numD; i++) {

if (!isupper((unsigned char)setD[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputD;}}

for (int i = 0; i < numD; i++) {

for (int j = 0; j < 33; j++) {

if (setD[i] == setUniversum[j]) {

setArrayBitD[j] = true;}}}

cout << "\nМножество Е (двоичный вид): ";

auto start = chrono::steady_clock::now();

for (int i = 0; i < 33; i++) {

setArrayBitE[i] = (setArrayBitA[i] && (!(setArrayBitB[i] || setArrayBitC[i] || setArrayBitD[i])));}

auto stop = chrono::steady_clock::now();

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

for (int i = 0; i < 33; i++) {

cout << setArrayBitE[i];}

cout << "\nМножество Е (символьный вид): ";

for (int i = 0; i < 33; i++) {

if (setArrayBitE[i] == 1) {

setE[i] = setUniversum[i];

cout << setE[i];}}

cout << "\nВремя работы: " << second.count() << " наносекунд" << endl;}

if (choice == 4) {

long mwordA = 0;

long mwordB = 0;

long mwordC = 0;

long mwordD = 0;

long mwordEbinary = 0;

long mwordEtext = 0;

long tempmword = 0;

cout << "Введите количество элементов множества A: ";

cin >> numA;

cin.ignore();

char* setA = new char[numA + 1];

inputAmword:

cout << "Введите элементы множества A: ";

cin.getline(setA, numA + 1, '\n');

for (int i = 0; i < numA; i++) {

if (!isupper((unsigned char)setA[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputAmword;}}

for (int i = 0; i < numA; i++) {

for (int j = 0; j < 32; j++) {

if (setA[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordA = mwordA | tempmword;}}}

cout << "Введите количество элементов множества B: ";

tempmword = 0;

cin >> numB;

cin.ignore();

char* setB = new char[numB + 1];

inputBmword:

cout << "Введите элементы множества B: ";

cin.getline(setB, numB + 1, '\n');

for (int i = 0; i < numB; i++) {

if (!isupper((unsigned char)setB[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputBmword;}}

for (int i = 0; i < numB; i++) {

for (int j = 0; j < 32; j++) {

if (setB[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordB = mwordB | tempmword;}}}

cout << "Введите количество элементов множества C: ";

tempmword = 0;

cin >> numC;

cin.ignore();

char* setC = new char[numC + 1];

inputCmword:

cout << "Введите элементы множества C: ";

cin.getline(setC, numC + 1, '\n');

for (int i = 0; i < numC; i++) {

if (!isupper((unsigned char)setC[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputCmword;}}

for (int i = 0; i < numC; i++) {

for (int j = 0; j < 32; j++) {

if (setC[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordC = mwordC | tempmword;}}}

cout << "Введите количество элементов множества D: ";

tempmword = 0;

cin >> numD;

cin.ignore();

char* setD = new char[numD + 1];

inputDmword:

cout << "Введите элементы множества D: ";

cin.getline(setD, numD + 1, '\n');

for (int i = 0; i < numD; i++) {

if (!isupper((unsigned char)setD[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

goto inputDmword;}}

for (int i = 0; i < numD; i++) {

for (int j = 0; j < 32; j++) {

if (setD[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordD = mwordD | tempmword;}}}

auto start = chrono::steady_clock::now();

mwordEbinary = mwordB | mwordC | mwordD;

mwordEbinary =

mwordEbinary;

mwordEbinary = mwordA & mwordEbinary;

auto stop = chrono::steady_clock::now();

mwordEtext = mwordEbinary;

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

cout << "\nМножество Е (символьный вид): ";

for (int i = 33; i > 0; i--) {

if (mwordEtext & 0x80000000) {

cout << setUniversum[i - 2];}

mwordEtext = mwordEtext << 1;}

cout << "\nМножество Е (двоичный вид): ";

for (int i = 0; i < 32; i++) {

if (mwordEbinary & 0x80000000) {

cout << "1";}

else {

cout << "0";}

mwordEbinary = mwordEbinary << 1;}

cout << "\nВремя работы: " << second.count() << " наносекунд" << endl;}

if (choice == 5) {

cout << "\nВведите количество элементов множества A: ";

cin >> numA;

cin.ignore();

char* setA = new char[numA + 1];

cout << "\nМножество А: ";

for (int i = 0; i < numA + 1; i++) {

int j = 0;

j = rand() % 33;

setA[i] = setUniversum[j];

cout << setA[i];

setA[i + 1] = NULL;}

cout << "\nВведите количество элементов множества B: ";

cin >> numB;

cin.ignore();

char* setB = new char[numB + 1];

cout << "\nМножество B: ";

for (int i = 0; i < numB + 1; i++) {

int j = 0;

j = rand() % 33;

setB[i] = setUniversum[j];

cout << setB[i];

setB[i + 1] = NULL;}

cout << "\nВведите количество элементов множества C: ";

cin >> numC;

cin.ignore();

char* setC = new char[numC + 1];

cout << "\nМножество C: ";

for (int i = 0; i < numC + 1; i++) {

int j = 0;

j = rand() % 33;

setC[i] = setUniversum[j];

cout << setC[i];

setC[i + 1] = NULL;}

cout << "\nВведите количество элементов множества D: ";

cin >> numD;

cin.ignore();

char* setD = new char[numD + 1];

cout << "\nМножество D: ";

for (int i = 0; i < numD + 1; i++) {

int j = 0;

j = rand() % 33;

setD[i] = setUniversum[j];

cout << setD[i];

setD[i + 1] = NULL;}

auto start = chrono::steady_clock::now();

char* setTemp = new char[numB + numC + numD + 1];

concatenationLetter(setTemp, setB, setC, setD);

char* setE = new char[numA + 2];

compareAndcopyLetter(setA, setTemp, setE);

auto stop = chrono::steady_clock::now();

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

cout << "\nВремя работы: " << second.count() << " наносекунд" << endl;

cout << "Множество Е: " << setE;}

if (choice == 6) {

srand(time(NULL));

ListSet* beginA = NULL;

ListSet* endA = NULL;

ListSet* beginB = NULL;

ListSet* endB = NULL;

ListSet* beginC = NULL;

ListSet* endC = NULL;

ListSet* beginD = NULL;

ListSet* endD = NULL;

ListSet* beginE = NULL;

ListSet* endE = NULL;

cout << "Введите количество элементов нового множества: ";

cin >> numA;

cin.ignore();

beginA = new ListSet;

int j = 0;

j = rand() % 33;

beginA->Set.element = setUniversum[j];

beginA->next = NULL;

endA = beginA;

for (int i = 1; i < numA; i++) {

endA->next = new ListSet;

endA = endA->next;

int j = 0;

j = rand() % 33;

endA->Set.element = setUniversum[j];

endA->next = NULL;}

cout << "Введите количество элементов нового множества: ";

cin >> numB;

cin.ignore();

beginB = new ListSet;

j = 0;

j = rand() % 33;

beginB->Set.element = setUniversum[j];

beginB->next = NULL;

endB = beginB;

for (int i = 1; i < numB; i++) {

endB->next = new ListSet;

endB = endB->next;

int j = 0;

j = rand() % 33;

endB->Set.element = setUniversum[j];

endB->next = NULL;}

cout << "Введите количество элементов нового множества: ";

cin >> numC;

cin.ignore();

beginC = new ListSet;

j = 0;

j = rand() % 33;

beginC->Set.element = setUniversum[j];

beginC->next = NULL;

endC = beginC;

for (int i = 1; i < numC; i++) {

endC->next = new ListSet;

endC = endC->next;

int j = 0;

j = rand() % 33;

endC->Set.element = setUniversum[j];

endC->next = NULL;}

cout << "Введите количество элементов нового множества: ";

cin >> numD;

cin.ignore();

beginD = new ListSet;

j = 0;

j = rand() % 33;

beginD->Set.element = setUniversum[j];

beginD->next = NULL;

endD = beginD;

for (int i = 1; i < numD; i++) {

endD->next = new ListSet;

endD = endD->next;

int j = 0;

j = rand() % 33;

endD->Set.element = setUniversum[j];

endD->next = NULL;}

auto start = chrono::steady_clock::now();

int i = 0;

ListSet* tempA = new ListSet;

tempA = beginA;

cout << "\nМножество A: ";

while (beginA != NULL) {

cout << beginA->Set.element;

beginA = beginA->next;}

beginA = tempA;

ListSet* tempB = new ListSet;

tempB = beginB;

cout << "\nМножество В: ";

while (beginB != NULL) {

cout << beginB->Set.element;

beginB = beginB->next;}

beginB = tempB;

while (beginA != NULL) {

while (beginB != NULL) {

if (beginB->Set.element == beginA->Set.element) {

beginA->Set.element = '8';}

beginB = beginB->next;}

beginA = beginA->next;

beginB = tempB;}

beginA = tempA;

ListSet* tempC = new ListSet;

tempC = beginC;

cout << "\nМножество C: ";

while (beginC != NULL) {

cout << beginC->Set.element;

beginC = beginC->next;}

beginC = tempC;

while (beginA != NULL) {

while (beginC != NULL) {

if (beginC->Set.element == beginA->Set.element) {

beginA->Set.element = '8';}

beginC = beginC->next;}

beginA = beginA->next;

beginC = tempC;}

beginA = tempA;

ListSet* tempD = new ListSet;

tempD = beginD;

cout << "\nМножество D: ";

while (beginD != NULL) {

cout << beginD->Set.element;

beginD = beginD->next;}

beginD = tempD;

while (beginA != NULL) {

while (beginD != NULL) {

if (beginD->Set.element == beginA->Set.element) {

beginA->Set.element = '8';}

beginD = beginD->next;}

beginA = beginA->next;

beginD = tempD;}

beginA = tempA;

beginD = tempD;

int count = 0;

while (beginA != NULL) {

if (beginA->Set.element != '8') {

beginD->Set.element = beginA->Set.element;

count++;

beginD = beginD->next;}

beginA = beginA->next;}

beginD = tempD;

cout << "\nМножество Е: ";

auto stop = chrono::steady_clock::now();

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

while (count != 0) {

cout << beginD->Set.element;

beginD = beginD->next;

count--;}

cout << "\nВремя работы: " << second.count() << " наносекунд" << endl;}

if (choice == 7) {

srand(time(NULL));

int setArrayBitAAuto[33];

int setArrayBitBAuto[33];

int setArrayBitCAuto[33];

int setArrayBitDAuto[33];

int setArrayBitEAuto[33];

for (int i = 0; i < 33; i++) {

setArrayBitAAuto[i] = false;

setArrayBitBAuto[i] = false;

setArrayBitCAuto[i] = false;

setArrayBitDAuto[i] = false;

setArrayBitEAuto[i] = 0;}

cout << "Введите количество элементов множества A: ";

cin >> numA;

cin.ignore();

char* setA = new char[numA + 1];

int j = 0;

for (int i = 0; i < numA; i++) {

j = rand() % 33;

setA[i] = setUniversum[j];

setA[i + 1] = '\n';}

for (int i = 0; i < numA; i++) {

for (int j = 0; j < 33; j++) {

if (setA[i] == setUniversum[j]) {

setArrayBitAAuto[j] = true;}}}

cout << endl;

for (int i = 0; i < numA; i++) {

cout << setA[i];}

cout << "\nВведите количество элементов множества B: ";

cin >> numB;

cin.ignore();

char* setB = new char[numB + 1];

j = 0;

for (int i = 0; i < numB; i++) {

j = rand() % 33;

setB[i] = setUniversum[j];

setB[i + 1] = '\n';}

for (int i = 0; i < numB; i++) {

for (int j = 0; j < 33; j++) {

if (setB[i] == setUniversum[j]) {

setArrayBitBAuto[j] = true;}}}

cout << endl;

for (int i = 0; i < numB; i++) {

cout << setB[i];}

cout << "\nВведите количество элементов множества C: ";

cin >> numC;

cin.ignore();

char* setC = new char[numC + 1];

j = 0;

for (int i = 0; i < numC; i++) {

j = rand() % 33;

setC[i] = setUniversum[j];

setC[i + 1] = '\n';}

for (int i = 0; i < numC; i++) {

for (int j = 0; j < 33; j++) {

if (setC[i] == setUniversum[j]) {

setArrayBitCAuto[j] = true;}}}

cout << endl;

for (int i = 0; i < numC; i++) {

cout << setC[i];}

cout << endl;
cout << "Введите количество элементов множества D: ";

cin >> numD;

cin.ignore();

char* setD = new char[numD + 1];

j = 0;

for (int i = 0; i < numD; i++) {

j = rand() % 33;

setD[i] = setUniversum[j];

setD[i + 1] = '\n';}

for (int i = 0; i < numD; i++) {

for (int j = 0; j < 33; j++) {

if (setD[i] == setUniversum[j]) {

setArrayBitDAuto[j] = true;}}}

cout << endl;

for (int i = 0; i < numD; i++) {

cout << setD[i];}

cout << endl;

char setE[33];

for (int i = 0; i < 33; i++) {

setE[i] = '\n'; }

cout << endl;

auto start = chrono::steady_clock::now();

for (int i = 0; i < 33; i++) {

setArrayBitEAuto[i] = (setArrayBitAAuto[i] && (!(setArrayBitBAuto[i] || setArrayBitCAuto[i] || setArrayBitDAuto[i])));}

auto stop = chrono::steady_clock::now();

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

cout << "Время работы: " << second.count() << " наносекунд" << endl;

cout << "Множество Е: ";

for (int i = 0; i < 33; i++) {

if (setArrayBitEAuto[i] == 1) {

setE[i] = setUniversum[i];

cout << setE[i];}}}
if (choice == 8) {

srand(time(NULL));

long mwordA = 0;long mwordB = 0;long mwordC = 0;long mwordD = 0;

long mwordEbinary = 0;

long mwordEtext = 0;

long tempmword = 0;

cout << "Введите количество элементов множества A: ";

cin >> numA;

cin.ignore();

char* setA = new char[numA + 1];

int j = 0;

for (int i = 0; i < numA; i++) {

j = rand() % 33;

setA[i] = setUniversum[j];}

for (int i = 0; i < numA; i++) {

cout << setA[i];}

cout << endl;

for (int i = 0; i < numA; i++) {

for (int j = 0; j < 32; j++) {

if (setA[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordA = mwordA | tempmword;}}}

cout << "Введите количество элементов множества B: ";

tempmword = 0;

cin >> numB;

cin.ignore();

char* setB = new char[numB + 1];

j = 0;

for (int i = 0; i < numB; i++) {

j = rand() % 33;

setB[i] = setUniversum[j];}

for (int i = 0; i < numB; i++) {

cout << setB[i];}

cout << endl;

for (int i = 0; i < numB; i++) {

for (int j = 0; j < 32; j++) {

if (setB[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordB = mwordB | tempmword;}}}

cout << "Введите количество элементов множества C: ";

tempmword = 0;

cin >> numC;

cin.ignore();

char* setC = new char[numC + 1];

j = 0;

for (int i = 0; i < numC; i++) {

j = rand() % 33;

setC[i] = setUniversum[j];}

for (int i = 0; i < numC; i++) {

cout << setC[i];}

cout << endl;

for (int i = 0; i < numC; i++) {

for (int j = 0; j < 32; j++) {

if (setC[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordC = mwordC | tempmword;}}}

cout << "Введите количество элементов множества D: ";

tempmword = 0;

cin >> numD;

cin.ignore();

char* setD = new char[numD + 1];

j = 0;

for (int i = 0; i < numD; i++) {

j = rand() % 33;

setD[i] = setUniversum[j];}

for (int i = 0; i < numD; i++) {

cout << setD[i];}

cout << endl;

for (int i = 0; i < numD; i++) {

for (int j = 0; j < 32; j++) {

if (setD[i] == setUniversum[j]) {

tempmword = 1 << j;

mwordD = mwordD | tempmword;}}}

auto start = chrono::steady_clock::now();

mwordEbinary = mwordB | mwordC | mwordD;

mwordEbinary = mwordEbinary;

mwordEbinary = mwordA & mwordEbinary;

auto stop = chrono::steady_clock::now();

auto second = chrono::duration_cast<chrono::nanoseconds>(stop - start);

mwordEtext = mwordEbinary;

cout << "\nМножество Е (символьное представление): ";

for (int i = 33; i > 0; i--) {

if (mwordEtext & 0x80000000) {

cout << setUniversum[i - 2];}

mwordEtext = mwordEtext << 1;}

cout << "\nМножество Е (двоичное представление): ";

for (int i = 0; i < 32; i++) {

if (mwordEbinary & 0x80000000) {

cout << "1";}

else {

cout << "0";}

mwordEbinary = mwordEbinary << 1;}

cout << endl;

cout << "Время работы: " << second.count() << " наносекунд" << endl;}}

void ShowSet(ListSet* begin) {

cout << "Множество: ";

while (begin != NULL) {

cout << begin->Set.element;

begin = begin->next;}

cout << endl;}

void CreateSet(ListSet** begin) {

cout << "Введите количество элементов нового множества: ";

cin >> numA;

cin.ignore();

*begin = new ListSet;

cout << "Введите элемент множества :";

cin >> (*begin)->Set.element;

(*begin)->next = NULL;

ListSet* end = *begin;

for (int i = 1; i < numA; i++) {

end->next = new ListSet;

end = end->next;

cout << "Введите элемент множества : ";

cin >> end->Set.element;

end->next = NULL;}}

void compareString(char* setInput, int num) {

for (int i = 0; i < num; i++) {

if (!isupper((unsigned char)setInput[i])) {

cout << "Вы произвели неверный ввод символа. Повторите ввод!\n";

break;}}}

void inputLetter(int amount, char* setLetter) {

int i = 0;

for (; i < amount; i++) {

cout << "Введите прописную букву: " << endl;

cin >> setLetter[i];

setLetter[i + 1] = NULL;

cin.clear();

cin.ignore();

if (!isupper((unsigned char)setLetter[i])) {

cin.ignore();

cin.clear();

i--;}}}

void concatenationLetter(char* setSum, char* setLetter_1, char* setLetter_2, char* setLetter_3) {

strcpy(setSum, setLetter_1);

strcat(setSum, setLetter_2);

strcat(setSum, setLetter_3);}

void compareAndcopyLetter(char* setLetterA, char* setLetterTemp, char* setLetterE) {

int i = 0;

char* temp;

for (int j = 0; j < strlen(setLetterA); j++) {

temp = strrchr(setLetterTemp, setLetterA[j]);

if (temp == NULL) {

setLetterE[i] = setLetterA[j];

setLetterE[i + 1] = NULL;

i++;}}}
1   2


написать администратору сайта