Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Alex_7z
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 7
1

Структура: найти самого молодого, возраст которого больше 18 С++

17.04.2017, 19:05. Просмотров 1216. Ответов 4
Метки нет (Все метки)

Структура содержит информацию об участниках спортивных соревнований: наименование страны, название команды, ФИО игрока, игровой номер, возраст, рост и вес. Необходимо найти и вывести информацию о самом молодом участнике; + реализовать проверку на возраст: при вводе возраста меньше 18 отмена заполнения и ввод заново.
Вот набросок из структуры, как дальше не знаю. Все данные с клавиатуры. Еще не знаю как сделать чтобы при вводе ФИО, страны, команды была проверка только на буквы, а при вводе номера, возраста и веса числа?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#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 kolichestvo ychastnikov: ";
    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;
    }
    return 0;
    }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2017, 19:05
Ответы с готовыми решениями:

Найти возраст самого старшего и самого молодого посетителей спортзала, а так же посчитать средний возраст посетителей
В спортзал ежедневно приходит какое-то количество посетителей. Необходимо предложить пользователю...

Определить, на сколько лет возраст самого старого человека превышает возраст самого молодого
Решите задачу: В массиве хранится информация о годе рождения каждого из 30 человек. Определить,...

Вывести на экран фамилию самого молодого студента и его возраст.
Помогите с задачами. 1.Дан текстовый файл, содержащий данные о студентах: фамилия студента,...

Определить возраст самого молодого сотрудника и указать его табельный номер
12. Дан список сотрудников предприятия с указанием года рождения r1, r2, ….., rk. Порядковый номер...

4
Patutol
8 / 8 / 10
Регистрация: 18.05.2012
Сообщений: 27
17.04.2017, 19:49 2
Лучший ответ Сообщение было отмечено Alex_7z как решение

Решение

Вынеси структуру из под main()...
Создай массив объектов (количество элементов вводишь с клавиатуры)...
Проверку можно замутить с ASCII (поставив условие)...
Добавить условие на возраст (do while).
Не вижу смысла выводить сразу же то, что ты уже ввел...
Ну и в итоге (лучше отдельной функцией) сравнить всех спортсменов (объекты), что ты ввел на возраст (условие).

Вроде все... но вполне возможно, что-то и упустил...
1
Alex_7z
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 7
18.04.2017, 01:27  [ТС] 3
Можно подробнее, а то я не знаю как это сделать?
0
Patutol
8 / 8 / 10
Регистрация: 18.05.2012
Сообщений: 27
18.04.2017, 19:53 4
Лучший ответ Сообщение было отмечено Alex_7z как решение

Решение

Вот попробовал кое-как реализовать... Тестируй... ФИО пришлось реализовать только по отдельному вводу (не захотелось еще функцию писать), а на Возраст пришлось писать функцию...
Ну и функции доступа можешь написать, а данные спрятать...

Если что непонятно, спрашивай...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream> 
#include <string>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
struct COMPETITION
{
    char country[20], team[20], surname[40], fname[40], pname[40];
    char number[5], height[7], weight[7], year[3];
    void  fill(int num);
    void checkchar(char* sc, char* tc);
    void checkdouble(char* sc, char* tc);
    void checkyear(char* sc, char* tc);
};
 
void  COMPETITION::checkchar(char *sc, char*tc)
{
    bool fl;
    do  {
        cout << tc;
        cin >> sc;
        fl=true;
        for (int i=0; i<strlen(sc); i++)
            if (!(((sc[i]>64)&& (sc[i]<91))||((sc[i]>96)&&(sc[i]<123))))
            {
                fl=false; break;
            }
        } while(fl==false);
}
 
void  COMPETITION::checkdouble(char* sc, char*tc)
{
    bool fl;
    do  {
        cout << tc;
        cin >> sc;
        fl=true;
        for (int i=0; i<strlen(sc); i++)
            if ((sc[i]<48 || sc[i]>57) && sc[i]!='.')
            {
                fl=false; break;
            }
    } while(fl==false);
}
 
void  COMPETITION::checkyear(char* sc, char*tc)
{
    int value;
    do  {
        cout << tc;
        cin >> sc;
        value = atoi(sc);
    } while (value<18);
}
 
void  COMPETITION::fill(int num)
{
    cout << "\nENTER "  <<  num+1 << " ATHLETE"  <<endl;
 
    checkchar(country, "Country: ");
    checkchar(team, "Team: ");
    checkchar(surname, "Surname: ");
    checkchar(fname, "First name: ");
    checkchar(pname, "Patronymic name: ");
 
    checkdouble(number, "Number: ");
    checkyear(year, "Years old: ");
    checkdouble(height, "Height: ");
    checkdouble(weight, "Weight: ");
}
 
int main ()
{ 
    int N, min=0;
    cout << "Enter quantity of athlets: ";
    cin >> N;
    COMPETITION *athletes=new COMPETITION[N];
    for (int i=0; i<N; i++) 
        athletes[i].fill(i);
    for (int i=0; i<N-1; i++)
        if (athletes[i].year < athletes[min].year) min=i;
    cout << "\nThe youngest athlete: ";
    cout << "#" << athletes[min].number  <<". " << athletes[min].surname << " " << athletes[min].fname << "\n";
    cout.width(22);
    cout << "Years old: " << athletes[min].year << endl;
    system ("PAUSE");
    return 0;
}
Готов выслушать критику или посмотреть вариант получше...
1
Photofenix
62 / 62 / 39
Регистрация: 18.11.2016
Сообщений: 560
Завершенные тесты: 1
18.04.2017, 20:16 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <string>
 
 
struct person{
    std::string name;
    int age;
 
    void SetPersonal (){
        std::cout << "Enter name: ";
        std::cin >> name;
        std::cout << "Enter age: ";
        std::cin >> age;
    }
 
    int GetAge (){
        return age;
    }
 
    void ShowPerson (){
        std::cout << "Name: " << name << std::endl;
        std::cout << "Age: " << age << std::endl;
    }
 
};
 
 
 
int main (){
 
    
    short FindIndex (0);
    short index (0);
    person* persons = new person [3];
 
    while (index < 3)
        persons[index++].SetPersonal();
    
    index = 0;
    FindIndex = persons[0].GetAge();
 
 
    for (int i(0); i!=3; i++){
        if (persons[i].GetAge() <= 18)
            continue;
        else if (FindIndex > persons[i].GetAge()){
            index = i;
            FindIndex = persons[i].GetAge();
        }
    }
    
    persons[index].ShowPerson();
 
    system ("pause");
    return NULL;
}
1
18.04.2017, 20:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2017, 20:16

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

Определить на сколько лет возраст самого старого человека превышает возраст самого младшего
В массиве хранится информация о годе рождения каждого из 30 человек, определить на сколько лет...

Найти самого молодого
program cenatovar; type tovar = Record FIO,pol: string; // Наименование товара. ...

Найти число, сумма делителей которого в три раза больше самого числа
Найти число, сумма делителей которого в три раза больше самого числа (Само число к делителям не...

Структура "Работник", найти ифнормацию о работниках возраст которых больше 25 лет
Дана структура #icnlude &lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; #include &quot;stdlib.h&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.