Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2017, 19:31   #1
Alex_7z
Новичок
Джуниор
 
Регистрация: 10.04.2017
Сообщений: 2
По умолчанию Массив структур: вывести информацию о самой молодой команде - C++

Задание по структуре. Есть информация об участниках соревнований, наименование страны, название команды, ФИО, номер, возраст, рост и вес. Нужно вывести информацию о самой молодой команде.
Не получается вывести информацию о самой молодой команде.
Все данные вводятся с клавиатуры.
Когда ввожу более 2 игроков в команде данные не правильно выводятся.
Хотел сделать еще ввод ФИО при помощи функции scanf("%[ a-zA-Z]"), тоже не получилось.
Как все это можно сделать?
Код, который получилось сделать:
Код:
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
 
int main ()
{
struct strc
{
    char cntr[20], team[20], familiya[40], imya[40], otchestvo[40];
    int nmbr, age, height, mass;
};
int tp, i, j, t, p, s, tmp;
double av[10];
char team_i[20], cntr_i[20];
cout << "Input number of teams: ";
cin >> t;
cout << t << endl;
cout << "Input total number of players: ";
cin >> tp;
cout << tp << endl;
tmp=0;
strc* sprt=new strc[tp];
for (i=0; i<t; i++)
{
    s=0;
    cout << "Input team name and country of the " << i+1 << " team: ";
    scanf("%s%s", team_i, cntr_i);
    printf("%s", team_i); cout << " ";
    printf("%s", cntr_i); cout << " \n";
    cout << "Input number of players in the " << i+1 << " team: ";
    cin >> p;
    cout << p;  
    cout << "\nFull name, number, age, height, weight player in the team " << i+1 << ":" << endl;
for (j=tmp; j<p+tmp; j++)
{
    strcpy(sprt[j].team, team_i);
    strcpy(sprt[j].cntr, cntr_i);
    scanf("%s%s%s%d%d%d%d", &sprt[j].familiya, &sprt[j].imya, &sprt[j].otchestvo, &sprt[j].nmbr, &sprt[j].age, &sprt[j].height, &sprt[j].mass);
    cout << sprt[j].familiya << " " << sprt[j].imya << " " << sprt[j].otchestvo << " " << sprt[i].nmbr << " " << sprt[i].age << " " << sprt[i].height << " " <<sprt[i].mass << endl;
    s+=sprt[j].age;
}
    av[i]=(double)s/p;
    tmp+=p;
}
int min = 0;
for (i=0; i<t; i++)
{
    if (av[min]>av[i]) min = i;
}
cout << "Vozrast samoi molodoi komandi: " << av[min];
return 0;
}
Пример вводимых данных:
Цитата:
2
4
Dinamo Belarus
2
Lapot Vladimir Alexandrovich 23 26 179 73
Molodoi Vadim Vladimirovich 13 21 183 75
Spartak Russia
2
Ponchik Kirill Viktorovich 8 17 185 80
Koresh Pavel Viktorovich 9 13 188 91
Alex_7z вне форума Ответить с цитированием
Старый 13.04.2017, 07:29   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Конечно не получается....тут каша из копипасты, смесь cin + sscanf и т.д., делайте или так, или эдак уж.

Ну и по коду, зачем вы вводите число команд? У вас есть число участников, каждый участник содержит название. Вот и нада для начала ввести всех участников.
Далее, рассортировать участников по названию команды (пойдет std::map<std::string, std::vector<strc>>) т.е. название станет ключем карты, а значением будет вектор (массив, список) всех участников, которые в этой команде.
Далее, самая молодая = сумма всех возрастов. Т.е. двойной цикл - сначала по карте/ключу, получаем, "для каждой команды", внутри цикл по вектору "для каждого участника" суммируем возраста. Т.к. сумм у вас будет ровно столько, сколько команд, то

std::map<std::string, int>

где ключем снова будет команда, а значение - сумма ее возрастов.

Когда такая карта составлена в ней уже находим минимальное значение, ключ этого значение будет искомое название команды.
alexzk вне форума Ответить с цитированием
Старый 13.04.2017, 20:06   #3
Alex_7z
Новичок
Джуниор
 
Регистрация: 10.04.2017
Сообщений: 2
По умолчанию

Ну как-то так. Векторами не знаю как сделать это. Сравнение массивов не работает. Вот что вышло, но считает не правильно.
Еще нужно сделать проверку ввода ФИО чтобы только буквы были, тоже не знаю как.
Код:
	#include <iostream> 
	#include <string>
	#include <cstring>
	using namespace std;
	int main ()
	{ 
	struct
	{
	char strana[20];
	char team[20];
	char familiya[40];
	char imya[40];
	char otchestvo[40];
	int number;
	int year;
	double rost;
	double ves;
	} users[100];
	int m,i;
	cout << "Vvedite kol-vo members: ";
	cin >> m;
	cout << m << endl;
	for (i=0;i<m;i++)
	{
		cout << "Strana: ";
		cin >> users[i].strana;
		cout << users[i].strana << endl;
		cout << "Komanda: ";
		cin >> users[i].team;
		cout << users[i].team << endl;
		cout << "FIO: ";
		cin >> users[i].familiya;
		cin >> users[i].imya;
		cin >> users[i].otchestvo;
		cout << users[i].familiya << " " << users[i].imya << " " << users[i].otchestvo << endl;
		cout << "Nomer: ";
		cin >> users[i].number;
		cout << users[i].number << endl;
		cout << "Vozrast: ";
		cin >> users[i].year;
		cout << users[i].year << endl;
		cout << "Rost: ";
		cin >> users[i].rost;
		cout << users[i].rost << endl;
		cout << "Ves: ";
		cin >> users[i].ves;
		cout << users[i].ves << endl;
	}
	int vozrastteam = 0;
	for (i = 0; i<m; i++)
    {
        if (users[i].team==users[i].team)
        {
            vozrastteam += users[i].year;
        }
    }
    for (i = 0; i<m; i++)
    {
    if (users[i].team==users[i].team)
    {
    cout << "Vozrast team " << users[i].team << " " << vozrastteam << endl;
    }
    }
	return 0;
	}
Код:
2
Belarus
Dinamo
Ivanov
Ivan
Ivanovich
10
20
180
60
Russia
Spartak
Petrov
Petr
Petrovich
20
15
180
60

Последний раз редактировалось Alex_7z; 13.04.2017 в 20:08.
Alex_7z вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вывести информацию только об 1 объекте kachan Общие вопросы по Java, Java SE, Kotlin 4 28.01.2013 20:20
вывести элементы самой длинной ветви бинарного дерева. 7rubin Помощь студентам 1 24.05.2012 22:01
Вывести в Memo информацию о установленном ПО (на Delphi) hysek Помощь студентам 12 02.05.2012 15:11
Файлы. Вывести информацию о самой молодой команде vitaly38 Помощь студентам 10 24.02.2010 14:24
Вывести информацию из типизированного файла в combobox... tacer Помощь студентам 1 04.12.2007 11:46