Created
March 15, 2025 14:08
-
-
Save su8/5501f37428a2c4d527ee79d68223e0ac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <cstring> | |
#include <cctype> | |
#include <cstdlib> | |
#include <string> | |
#include <fstream> | |
using namespace std; | |
const int MAX_UCHASTNICI = 30; | |
struct Uchastnici { | |
int nomer; | |
string ime; | |
int godini; | |
string 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(void) { | |
Uchastnici uchastnici[MAX_UCHASTNICI]; | |
int count = 0; | |
char filename[] = "uchastnici.dat"; | |
VzemiOtFaila(uchastnici, count, filename); | |
int choice; | |
string str; | |
do { | |
Menu(); | |
cin >> str; | |
choice = static_cast<int>(std::strtol(str.c_str(), static_cast<char **>(NULL), 10)); | |
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 EXIT_SUCCESS; | |
} | |
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(); | |
//getline(cin, uchastnici[count].ime); | |
cin >> uchastnici[count].ime; | |
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; | |
} | |
string searchime; | |
cout << "Въведете име на участника, който търсите: "; | |
cin.ignore(); | |
cin >> searchime; | |
bool found = false; | |
for (int i = 0; i < count; i++) { | |
if (uchastnici[i].ime == searchime) { | |
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 && | |
temp[j].ime == temp[j + 1].ime)) { | |
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[0] == 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'; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment