Untitled
#include <iostream> #include <cstring> #include <fstream> using namespace std; const int MAX_UCHASTNICI = 30; struct Uchastnici { int nomer; char ime[50]; int godini; char pol; double obikolkaBedro; double obikolkaRamo; double obikolkaVrat; double obikolkaPrasets; }; void Menu(); void DobaviUchasnici(Uchastnici uchastnici[], int& count); void PokazhiUchasnici(const Uchastnici uchastnici[], int count); void NameriNaiMalkiq(const Uchastnici uchastnici[], int count); void TursiPoIme(const Uchastnici uchastnici[], int count); void PodrediPoGodini(Uchastnici uchastnici[], int count); void ZapaziVuvFaila(const Uchastnici uchastnici[], int count, const char* filename); void VzemiOtFaila(Uchastnici uchastnici[], int& count, const char* filename); void PodMenu(const Uchastnici uchastnici[], int count); void TursiPoGodiniIPol(const Uchastnici uchastnici[], int count); void RazdeliNaKategorii(const Uchastnici uchastnici[], int count); void IzberiPobeditel(const Uchastnici uchastnici[], int count); int main() { Uchastnici uchastnici[MAX_UCHASTNICI]; int count = 0; char filename[] = "uchastnici.dat"; VzemiOtFaila(uchastnici, count, filename); int choice; do { Menu(); cin >> choice; switch (choice) { case 1: DobaviUchasnici(uchastnici, count); break; case 2: PokazhiUchasnici(uchastnici, count); break; case 3: NameriNaiMalkiq(uchastnici, count); break; case 4: TursiPoIme(uchastnici, count); break; case 5: PodrediPoGodini(uchastnici, count); break; case 6: ZapaziVuvFaila(uchastnici, count, filename); break; case 7: VzemiOtFaila(uchastnici, count, filename); break; case 8: PodMenu(uchastnici, count); break; case 9: RazdeliNaKategorii(uchastnici, count); break; case 10: IzberiPobeditel(uchastnici, count); break; case 0: cout << "Изход от програмата.\n"; break; default: cout << "Неправилен избор.\n"; break; } } while (choice != 0); ZapaziVuvFaila(uchastnici, count, filename); return 0; } void Menu() { cout << "\n--- Основно меню ---\n"; cout << "1. Добавяне на участници\n"; cout << "2. Показване на всички участници\n"; cout << "3. Търсене на най-младият участник\n"; cout << "4. Търсене по име\n"; cout << "5. Подреждане по възраст\n"; cout << "6. Запис на участниците във файл\n"; cout << "7. Зареждане на участниците от файл\n"; cout << "8. Подменю с допълнителни функции\n"; cout << "9. Разделяне на участниците в категории\n"; cout << "10. Определяне на победителите\n"; cout << "0. Изход\n"; cout << "Вашият избор: "; } void DobaviUchasnici(Uchastnici uchastnici[], int& count) { int n; cout << "Въведете броят на новите учасници (до " << MAX_UCHASTNICI - count << "): "; cin >> n; if (n > MAX_UCHASTNICI - count) { cout << "Превишавате броя на участниците!\n"; return; } for (int i = 0; i < n; i++) { cout << "Участник " << count + 1 << ":\n"; uchastnici[count].nomer = count + 1; cout << "Име: "; cin.ignore(); cin.getline(uchastnici[count].ime, 50); cout << "Възраст: "; cin >> uchastnici[count].godini; cout << "Пол (М/Ж): "; cin >> uchastnici[count].pol; cout << "Бедрена обиколка: "; cin >> uchastnici[count].obikolkaBedro; cout << "Раменна обиколка: "; cin >> uchastnici[count].obikolkaRamo; cout << "Обиколка на шията: "; cin >> uchastnici[count].obikolkaVrat; cout << "Обиколка на прасеца: "; cin >> uchastnici[count].obikolkaPrasets; count++; } } void PokazhiUchasnici(const Uchastnici uchastnici[], int count) { if (count == 0) { cout << "Няма въведени участници.\n"; return; } cout << "\nСписък с участниците:\n"; for (int i = 0; i < count; i++) { cout << "Номер: " << uchastnici[i].nomer << ", Име: " << uchastnici[i].ime << ", Възраст: " << uchastnici[i].godini << ", Пол: " << uchastnici[i].pol << ", Бедрена обиколка: " << uchastnici[i].obikolkaBedro << ", Раменна обиколка: " << uchastnici[i].obikolkaRamo << ", Обиколка на шията: " << uchastnici[i].obikolkaVrat << ", Обиколка на прасеца: " << uchastnici[i].obikolkaPrasets << '\n'; } } void NameriNaiMalkiq(const Uchastnici uchastnici[], int count) { if (count == 0) { cout << "Няма въведени участници.\n"; return; } int mingodini = uchastnici[0].godini; for (int i = 1; i < count; i++) { if (uchastnici[i].godini < mingodini) { mingodini = uchastnici[i].godini; } } cout << "Участникът с най-ниската възраст е (" << mingodini << "):\n"; for (int i = 0; i < count; i++) { if (uchastnici[i].godini == mingodini) { cout << uchastnici[i].ime << '\n'; } } } void TursiPoIme(const Uchastnici uchastnici[], int count) { if (count == 0) { cout << "Няма въведени участници.\n"; return; } char searchime[50]; cout << "Въведете име на участника, който търсите: "; cin.ignore(); cin.getline(searchime, 50); bool found = false; for (int i = 0; i < count; i++) { if (strcmp(uchastnici[i].ime, searchime) == 0) { cout << "Намерен участник:\n"; cout << "Номер: " << uchastnici[i].nomer << ", Име: " << uchastnici[i].ime << ", Възраст: " << uchastnici[i].godini << ", Пол: " << uchastnici[i].pol << '\n'; found = true; } } if (!found) { cout << "Няма участник с това име.\n"; } } void PodrediPoGodini(Uchastnici uchastnici[], int count) { for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - i - 1; j++) { if (uchastnici[j].godini > uchastnici[j + 1].godini) { Uchastnici temp = uchastnici[j]; uchastnici[j] = uchastnici[j + 1]; uchastnici[j + 1] = temp; } } } cout << "Участниците са подредени по възраст.\n"; } void ZapaziVuvFaila(const Uchastnici uchastnici[], int count, const char* filename) { ofstream file(filename, ios::binary); if (!file) { cout << "Грешка при запис във файла.\n"; return; } file.write((char*)&count, sizeof(count)); file.write((char*)uchastnici, sizeof(Uchastnici) * count); file.close(); cout << "Участниците са записани успешно във файла.\n"; } void VzemiOtFaila(Uchastnici uchastnici[], int& count, const char* filename) { ifstream file(filename, ios::binary); if (!file) { cout << "Файлът не съществува.\n"; count = 0; return; } file.read((char*)&count, sizeof(count)); file.read((char*)uchastnici, sizeof(Uchastnici) * count); file.close(); cout << "Данните са заредени от файла.\n"; } void PodMenu(const Uchastnici uchastnici[], int count) { int choice; do { cout << "\n--- Подменю ---\n"; cout << "1. Подреждане и извеждане по години и име\n"; cout << "2. Търсене по възраст и пол\n"; cout << "0. Назад\n"; cout << "Вашият избор: "; cin >> choice; switch (choice) { case 1: { Uchastnici temp[MAX_UCHASTNICI]; memcpy(temp, uchastnici, sizeof(Uchastnici) * count); for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - i - 1; j++) { if (temp[j].godini > temp[j + 1].godini || (temp[j].godini == temp[j + 1].godini && strcmp(temp[j].ime, temp[j + 1].ime) > 0)) { Uchastnici swap = temp[j]; temp[j] = temp[j + 1]; temp[j + 1] = swap; } } } cout << "\n Участниците са подредени по реда възраст и име:\n"; PokazhiUchasnici(temp, count); break; } case 2: TursiPoGodiniIPol(uchastnici, count); break; case 0: cout << "Връщане към основното меню.\n"; break; default: cout << "Неправилен избор.\n"; break; } } while (choice != 0); } void TursiPoGodiniIPol(const Uchastnici uchastnici[], int count) { if (count == 0) { cout << "Няма въведени участници.\n"; return; } int searchgodini; char searchpol; cout << "Въведете възраст: "; cin >> searchgodini; cout << "Въведете пол (М/Ж): "; cin >> searchpol; cout << "\n Резултати от търсенето:\n"; bool found = false; for (int i = 0; i < count; i++) { if (uchastnici[i].godini == searchgodini && uchastnici[i].pol == searchpol) { cout << "Номер: " << uchastnici[i].nomer << ", Име: " << uchastnici[i].ime << ", Възраст: " << uchastnici[i].godini << ", Пол: " << uchastnici[i].pol << '\n'; found = true; } } if (!found) { cout << "Няма участници, които да отговарят на тези критерии .\n"; } } void RazdeliNaKategorii(const Uchastnici uchastnici[], int count) { Uchastnici categoryI[MAX_UCHASTNICI], categoryII[MAX_UCHASTNICI]; Uchastnici categoryIII[MAX_UCHASTNICI], categoryIV[MAX_UCHASTNICI]; int countI = 0, countII = 0, countIII = 0, countIV = 0; for (int i = 0; i < count; i++) { if (uchastnici[i].godini >= 14 && uchastnici[i].godini <= 16) { categoryI[countI++] = uchastnici[i]; } else if (uchastnici[i].godini >= 17 && uchastnici[i].godini <= 19) { categoryII[countII++] = uchastnici[i]; } else if (uchastnici[i].godini >= 20 && uchastnici[i].godini <= 22) { categoryIII[countIII++] = uchastnici[i]; } else if (uchastnici[i].godini >= 23 && uchastnici[i].godini <= 25) { categoryIV[countIV++] = uchastnici[i]; } } cout << "\n Категория I (14-16):\n"; PokazhiUchasnici(categoryI, countI); cout << "\n Категория II (17-19):\n"; PokazhiUchasnici(categoryII, countII); cout << "\n Категория III (20-22):\n"; PokazhiUchasnici(categoryIII, countIII); cout << "\n Категория IV (23-25):\n"; PokazhiUchasnici(categoryIV, countIV); } void IzberiPobeditel(const Uchastnici uchastnici[], int count) { struct Winner { Uchastnici Uchastnici; double proportion; }; Winner winners[MAX_UCHASTNICI]; int winnerCount = 0; for (int i = 0; i < count; i++) { double proportion = uchastnici[i].obikolkaBedro / (uchastnici[i].obikolkaRamo + uchastnici[i].obikolkaVrat + uchastnici[i].obikolkaPrasets); if (proportion > 0) { winners[winnerCount].Uchastnici = uchastnici[i]; winners[winnerCount].proportion = proportion; winnerCount++; } } for (int i = 0; i < winnerCount - 1; i++) { for (int j = 0; j < winnerCount - i - 1; j++) { if (winners[j].proportion < winners[j + 1].proportion) { Winner temp = winners[j]; winners[j] = winners[j + 1]; winners[j + 1] = temp; } } } cout << "\nПобедителите са подредени по намаляващ на П(Пропорционални телесни мерки):\n"; for (int i = 0; i < winnerCount; i++) { cout << "Име: " << winners[i].Uchastnici.ime << ", П: " << winners[i].proportion << '\n'; } }
Leave a Comment