Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <locale>
- const int MAX_PHONES = 100; // Максимален брой по условие
- struct Phone
- {
- int number;
- int pulses;
- };
- // Глобални масиви за съхранение на данни
- Phone tel1[MAX_PHONES];
- Phone tel2[MAX_PHONES];
- Phone merged[MAX_PHONES * 2]; // Двойният размер за сигурност
- // Текущ брой телефони във всеки от масивите
- int tel1Count = 0;
- int tel2Count = 0;
- // Прототипи на функциите
- void readData();
- void writeData();
- void mergeArrays();
- void displayGroups();
- int main()
- {
- setlocale(LC_ALL, "Bulgarian"); // Чрез тази функция помагаме на компилатора да разпознава кирилица
- char choice;
- do
- {
- std::cout << "Меню:\n\n";
- std::cout << "1. Презаписване на данните\n";
- std::cout << "2. Сливане и сортиране на данните\n";
- std::cout << "3. Извеждане на данните\n";
- std::cout << "4. Изход\n";
- std::cout << "Изберете опция: ";
- std::cin >> choice;
- switch (choice)
- {
- case '1': readData(); break;
- case '2': mergeArrays(); break;
- case '3': displayGroups(); break;
- case '4': writeData(); std::cout << "Довиждане!\n"; break;
- default: std::cout << "Невалиден избор. Моля, опитайте отново.\n";
- }
- } while (choice != '4');
- return 0;
- }
- void readData() // Симулиране на въвеждане на данни от файл
- {
- std::ifstream tel1File("TEL1.DAT");
- if (!tel1File.is_open())
- {
- std::cout << "Грешка при отваряне на TEL1.DAT.\n";
- return;
- }
- tel1Count = 0;
- while (tel1File >> tel1[tel1Count].number >> tel1[tel1Count].pulses)
- {
- ++tel1Count;
- if (tel1Count >= MAX_PHONES)
- {
- break;
- }
- }
- tel1File.close();
- std::ifstream tel2File("TEL2.DAT");
- if (!tel2File.is_open())
- {
- std::cout << "Грешка при отваряне на TEL2.DAT.\n";
- return;
- }
- tel2Count = 0;
- while (tel2File >> tel2[tel2Count].number >> tel2[tel2Count].pulses)
- {
- ++tel2Count;
- if (tel2Count >= MAX_PHONES)
- {
- break;
- }
- }
- tel2File.close();
- }
- void writeData() // Запис на данните във файлове
- {
- std::ofstream tel1File("TEL1.DAT");
- if (!tel1File.is_open())
- {
- std::cout << "Грешка при отваряне на TEL1.DAT за запис.\n";
- return;
- }
- for (size_t i = 0; i < tel1Count; i++)
- {
- tel1File << tel1[i].number << " " << tel1[i].pulses << "\n";
- }
- tel1File.close();
- std::ofstream tel2File("TEL2.DAT");
- if (!tel2File.is_open())
- {
- std::cout << "Грешка при отваряне на TEL2.DAT за запис.\n";
- return;
- }
- for (size_t i = 0; i < tel2Count; i++)
- {
- tel2File << tel2[i].number << " " << tel2[i].pulses << "\n";
- }
- tel2File.close();
- }
- void mergeArrays() // Сортиране на двата масива в низходящ ред по текущия брой импулси
- {
- std::sort(tel1, tel1 + tel1Count, [](const Phone& a, const Phone& b) { return (a.pulses) > (b.pulses); });
- std::sort(tel2, tel2 + tel2Count, [](const Phone& a, const Phone& b) { return (a.pulses) > (b.pulses); });
- // Сливане на двата сортирани масива в трети масив
- int i = 0, j = 0, k = 0;
- while ( (i < tel1Count) && (j < tel2Count) )
- {
- if (tel1[i].pulses >= tel2[j].pulses)
- {
- merged[k++] = tel1[i++];
- }
- else
- {
- merged[k++] = tel2[j++];
- }
- }
- // Копиране на останалите елементи от първия масив (ако има такива)
- while (i < tel1Count)
- {
- merged[k++] = tel1[i++];
- }
- // Копиране на останалите елементи от втория масив (ако има такива)
- while (j < tel2Count)
- {
- merged[k++] = tel2[j++];
- }
- }
- void displayGroups() // Изобразяване
- {
- std::cout << "Група 1:\n";
- for (size_t i = 0; i < tel1Count; i++)
- {
- std::cout << "Телефон " << i + 1 << ": Номер - " << tel1[i].number << ", Импулси - " << tel1[i].pulses << "\n";
- }
- std::cout << "Група 2:\n";
- for (size_t i = 0; i < tel2Count; i++)
- {
- std::cout << "Телефон " << i + 1 << ": Номер - " << tel2[i].number << ", Импулси - " << tel2[i].pulses << "\n";
- }
- std::cout << "Обединени групи:\n";
- for (size_t i = 0; i < (static_cast<unsigned long long>(tel1Count) + tel2Count); i++)
- {
- std::cout << "Телефон " << i + 1 << ": Номер - " << merged[i].number << ", Импулси - " << merged[i].pulses << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement