Untitled
unknown
plain_text
2 years ago
5.0 kB
6
Indexable
// ConsoleApplication6.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы. // #include <iostream> using namespace std; struct pepl { char cl[4] =""; // на один элемент больше потому что \0 учитываем char name[21] = ""; char fam[21] = ""; char dob[9] = ""; }; int main() { int n; cin >> n; pepl *p_ptr = new pepl[n]; char cl[4] = "";// на один элемент больше потому что \0 учитываем char name[21] = ""; char fam[21] = ""; char dob[9] = ""; for (int i = 0; i < n; i++) { cin >> fam >> name >> cl >> dob; for (int j = 0; j < 4; j++) p_ptr[i].cl[j] = cl[j]; for (int j = 0; j < 21; j++) p_ptr[i].name[j] = name[j]; for (int j = 0; j < 21; j++) p_ptr[i].fam[j] = fam[j]; for (int j = 0; j < 9; j++) p_ptr[i].dob[j] = dob[j]; //cout << p_ptr[i].fam << " " << p_ptr[i].name << " " << p_ptr[i].cl << " " << p_ptr[i].dob<<endl; } for (int i = 0; i < n; i++) { for (int j = 1; j < n; j++) { // если класс j-1 больше чем j то свап // если они в классах до 10 if (p_ptr[j - 1].cl[2] == '\0' && p_ptr[j].cl[2] == '\0') { if (p_ptr[j - 1].cl[0] > p_ptr[j].cl[0]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; } // если номер класса одинаковый то сравниваем букву if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0]) { if (p_ptr[j - 1].cl[1] > p_ptr[j].cl[1]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; } } //если классы одинаковые то сравниваем фамилии if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0] && p_ptr[j - 1].cl[1] == p_ptr[j].cl[1]) { int f = 0; bool b = 0; while (!b && p_ptr[j - 1].fam[f] != '\0' && p_ptr[j].fam[f] != '\0' && p_ptr[j - 1].fam[f] >= p_ptr[j].fam[f]) { if (p_ptr[j - 1].fam[f] > p_ptr[j].fam[f]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; b = 1; } f++; } } } // если первый в 10/11 а второй до 10 то меняем смело if (p_ptr[j - 1].cl[2] != '\0' && p_ptr[j].cl[2] == '\0') { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; } if (p_ptr[j - 1].cl[2] != '\0' && p_ptr[j].cl[2] != '\0') { // если оба в 10+, то сравниваем вторую цифру класса if (p_ptr[j - 1].cl[1] > p_ptr[j].cl[1]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; } // также если номер одинаковый то по букве if (p_ptr[j - 1].cl[1] == p_ptr[j].cl[1]) { if (p_ptr[j - 1].cl[2] > p_ptr[j].cl[2]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; } } //если классы одинаковые то сравниваем фамилии if (p_ptr[j - 1].cl[0] == p_ptr[j].cl[0] && p_ptr[j - 1].cl[1] == p_ptr[j].cl[1] && p_ptr[j-1].cl[2] == p_ptr[j].cl[2] ) { int f = 0; bool b=0; while (!b && p_ptr[j - 1].fam[f] != '\0' && p_ptr[j].fam[f] != '\0' && p_ptr[j - 1].fam[f] >= p_ptr[j].fam[f]) { if (p_ptr[j - 1].fam[f] > p_ptr[j].fam[f]) { pepl tmp = p_ptr[j]; p_ptr[j] = p_ptr[j - 1]; p_ptr[j - 1] = tmp; b = 1; } f++; } } } } } for (int i = 0; i < n; i++) { cout << p_ptr[i].cl << " " << p_ptr[i].fam << " " << p_ptr[i].name << " " << p_ptr[i].dob << "\n"; } delete[] p_ptr; }
Editor is loading...