Осуществить проход по номерам квартир и выписать одинаковые квартиры и проживающих там людей
Всем доброго времени суток. Нужна ваша помощь. Программа практически полностью доделана, но не могу понять как осуществить проход именно по семьям и выписать семьи с одинаковыми номерами квартир.
#include <iostream>
#include <cstdio>
void m_print(void) // для печати файла
{
int oldmax_1 = 0; // используеться для определения возраста в семье 1
int oldmax_2 = 0; // используеться для определения возраста в семье 2
int oldmax_3 = 0; // используеться для определения возраста в семье 3
int oldmax_4 = 0; // используеться для определения возраста в семье 4
char oldmax_name_1[32]; // используеться для имени старшего человека в семье 1
char oldmax_name_2[32]; // используеться для имени самого страшего человека в семье 2
char oldmax_name_3[32]; // используеться для имени самого старшего человека в семье 3
char oldmax_name_4[32]; // используеться для имени самого страшего человека в семье 4
char oldmin_name_1[32]; // используеться для имени самого младшего человека в семье 1
char oldmin_name_2[32]; // используеться для имени самого младшего человека в семье 2
char oldmin_name_3[32]; // используеться для имени самого младшего человека в семье 3
char oldmin_name_4[32]; // используеться для имени самого младшего человека в семье 4
struct people
{
char name[32];
int old;
};
struct J_GEO_1
{
char city[32];
char ulitsa[32];
int kv;
int dom;
};
struct Family
{
char name[32];
people* fd[5];
J_GEO_1* ad;
};
people a = {"dima", 15,},
b = {"egor", 20,},
c = {"misha" , 30,},
n = {"ola" , 29,},
v = {"masha" , 70,},
d = {"sasha" , 35,},
x = {"dasha" , 34,},
e = {"oleg" , 15,},
f = {"kostya" , 70,},
q = {"ira" , 68},
z = {"kira" , 15,},
l = {"karina" , 34,},
m = {"nikita" , 35,},
s = {"vova" , 60,},
r = {"dima" , 70,}, // no
u = {"stas" , 29,},
i = {"nastya" , 33,},
p = {"vera", 40,}, // no
o = {"mikle" , 67,}, // no
h = {"luda" , 63,}; // no
J_GEO_1 a1 = {"moskva", "perovo" , 16 , 140, },
d1 = {"moskva", "akdemicheskaya" , 15 , 10,},
z1 = {"ekaterinburg", "puskina", 29 , 140,},
u1 = {"anapa", "ianovo", 16 , 48};
// сравнение номеров домов вывод одинаковых семей
// сравнение квартир вывод одинаковых семей
// сравнение имен в семьях вывод одинаковых имен в семьях
Family F1, F2, F3, F4;
strcpy(F1.name, "F1");
F1.fd[0] = &a;
F1.fd[1] = &b;
F1.fd[2] = &c;
F1.fd[3] = &n;
F1.fd[4] = &v;
F1.ad = &a1;
strcpy(F2.name, "F2");
F2.fd[0] = &d;
F2.fd[1] = &x;
F2.fd[2] = &e;
F2.fd[3] = &f;
F2.fd[4] = 0;
F2.ad = &d1;
strcpy(F3.name, "F3");
F3.fd[0] = &z;
F3.fd[1] = &l;
F3.fd[2] = &m;
F3.fd[3] = &s;
F3.fd[4] = 0;
F3.ad = &z1;
strcpy(F3.name, "F4");
F4.fd[0] = &u;
F4.fd[1] = &i;
F4.fd[2] = 0;
F4.fd[3] = 0;
F4.fd[4] = 0;
F4.ad = &u1;
for (int ic = 0; ic <= 4; ic++)
{
if(oldmax_1<F1.fd[ic]->old)
{
oldmax_1 = F1.fd[ic]->old;
strcpy(oldmax_name_1, F1.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_2 < F2.fd[ic]->old)
{
oldmax_2 = F2.fd[ic]->old;
strcpy(oldmax_name_2, F2.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_3 < F3.fd[ic]->old)
{
oldmax_3 = F3.fd[ic]->old;
strcpy(oldmax_name_3, F3.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_4 < F4.fd[ic]->old)
{
oldmax_4 = F4.fd[ic]->old;
strcpy(oldmax_name_4, F4.fd[ic]->name);
} // закончили с максимальным возрастом
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_1 > F1.fd[ic]->old)
{
oldmax_1 = F1.fd[ic]->old;
strcpy(oldmin_name_1, F1.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_2 > F2.fd[ic]->old)
{
oldmax_2 = F2.fd[ic]->old;
strcpy(oldmin_name_2, F2.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_3 > F3.fd[ic]->old)
{
oldmax_3 = F3.fd[ic]->old;
strcpy(oldmin_name_3, F3.fd[ic]->name);
}
for (int ic = 0; ic <= 4; ic++)
{
if (oldmax_3 > F3.fd[ic]->old)
{
oldmax_4 = F4.fd[ic]->old;
strcpy(oldmin_name_4, F4.fd[ic]->name);
} // закончили с минимальным возрастом
}
}
}
}
}
}
}
}
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Если же вам не важно, как выглядит код и эффективен ли он, а главное, что работает и хорошо, то для начала создадим функцию print, которая будет внутри себя проверять номера квартир и если они равны, то выводить имена членов семьи.
void print(Family fam1, Family fam2) {
//Если квартиры не равны, то выходим из функции
if (fam1.ad->kv != fam2.ad->kv)
return;
cout << "Одинаковая квартира: " << fam1.ad->kv << endl;
cout << "Первая семья: " << endl;
for (int i = 0; i < 5; ++i)
if(fam1.fd[i] != 0)
cout << fam1.fd[i]->name << endl;
cout << "Вторая семья: " << endl;
for (int i = 0; i < 5; ++i)
if(fam2.fd[i] != 0)
cout << fam2.fd[i]->name << endl;
}
Должен предупредить, что все ваши структуры внутри функции m_print нужно вынести вне.
И в функции m_print вызовем 6 раз функцию print:
print(F1, F2); print(F1, F3); print(F1, F4);
print(F2, F3); print(F2, F4);
print(F3, F4);
Но лучше все таки писать код примерно таким образом.