Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
#1

Вывести информацию о спортсменах, возраст которых не достиг 18 лет - C++

20.09.2013, 12:47. Просмотров 932. Ответов 19
Метки нет (Все метки)

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// KR_6.cpp: определяет точку входа для консольного приложения.
// Информация об участниках спортивных соревнований содержит назва-
//ние команды, ФИО игрока, возраст. Вывести информацию о спортсменах, воз-
//раст которых не достиг 18 лет.
//
 
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string"
using namespace std;
 
FILE *fl;
typedef struct
{
char com[30];
unsigned char fio;
unsigned char vozr;
} 
TCom;
TCom com[30]; // Массив структур
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf(); // Вывод результата в файл
 
 
int main()
{
setlocale(LC_ALL, "Russian");
cout<<"Вас приветствует учебная программа по вычислению функции, пожалуста введите\nисходные данные... \n";
while (true)
    {
switch (Menu())
        {
case 1: Nnf(); break;
case 2: Newf(); break;
case 3: Spisok(); break;
case 4: Opf(); break;
case 5: Resc(); break;
case 6: Resf(); break;
case 7: return 0;
default: puts("Выбирите правильно!");
        }
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
    }
}
int Menu() // Меню
{
setlocale(LC_ALL, "Russian");
cout << "Выбирите:" << endl;
cout << "1. Ввод имени файла" << endl;
cout << "2. Новый файл" << endl;
cout << "3. Ввести список" << endl;
cout << "4. Открыть файл" << endl;
cout << "5. Вывести результат" << endl;
cout << "6. Вывести в файл" << endl;
cout << "7. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
    {
cout << "Введите file name" << endl;
cin >> name;
    }
void Newf() // Создание нового файла
{
    if ((fl = fopen(name,"wb")) == NULL)
    {
cout << "Ошибка при создании" << endl;
exit(1);
    }
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файл
{
setlocale(LC_ALL, "Russian");
if ((fl = fopen(name,"rb+")) == NULL)
{
cout << "Ошибка при создании" << endl;
exit(1);
}
cout << "Введите число спортстменов" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Введите название комманды: ";
cin >> com[i].com;
cout << "Введите имя: ";
cin >> com[i].fio;
cout << "Введите возраст: ";
cin >> com[i].vozr;
fwrite (&com[i], sizeof(TCom), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
setlocale(LC_ALL, "Russian");
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Ошибка при открытии" << endl;
exit(1);
}
nst = 0;
TCom std;
while (true)
{
    int nwrt = fread (&com, sizeof(TCom), 1, fl);
if (nwrt != 1) break;
com[nst] = std;
cout << com[nst].com << " " << com[nst].fio << " "
<< com[nst].vozr << endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if (com[i].vozr == '18')
cout << com[i].com << endl << com[i].fio << endl;
}
void Resf() // Вывод результата в текстовый файл
{
setlocale(LC_ALL, "Russian");
char namet[30];
FILE *ft;
cout << "Введите имя файла" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Ошибка при создании" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if (com[i].vozr == '18')
{
strcpy (s, com[i].com);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
Половины того, что сделал не понимаю, компилиться нормально, но вот работает абы как, помогите кто чем может...
Задание:
Составить программу формирования файла. В программе предусмотреть сохра-
нение вводимых данных в файле и возможность чтения из ранее сохраненного
файла. Вывести результаты на экран и в текстовой файл.

Информация об участниках спортивных соревнований содержит назва-
ние команды, ФИО игрока, возраст. Вывести информацию о спортсменах, воз-
раст которых не достиг 18 лет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 12:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести информацию о спортсменах, возраст которых не достиг 18 лет (C++):

Вывести информацию о спортсменах, возраст которых не достиг 18 лет - C++
Здравствуйте! Имеется задание: Информация об участниках спортивных соревнований содержит название команды, ФИО игрока, возраст. Вывести...

Найти среднюю стоимость автомобилей, "возраст" которых превышает 6 лет - C++
Известны стоимость и &quot;возраст&quot; каждой из 20-ти моделей легковых автомобилей. Найти среднюю стоимость автомобилей, &quot;возраст&quot; которых...

Убрать из массива информацию о машинах, срок службы которых больше 5 лет - C++
Мне нужно создать массив структур, который будет вмещать в себе такие элементы: марка автомобиля, тип (грузовой или легковой),номерной...

Вывести на консоль имена сотрудников, возраст которых превышает заданный (поиск в массиве структур) - C++
Ввести в компьютер информацию о сотрудниках отдела: фамилия, имя, возраст. Напечатать имена сотрудников, возраст которых превышает 28...

Во сколько лет у плюсовика начинается пенсионный возраст? - C++
привет. Интересно для себя узнать, во сколько лет у плюсовика с многолетним стажем могут возникнуть проблемы с трудоустройством?

Определить возраст человека (число полных лет) - C++
Известны год и номер месяца рождения человека, а также год и номер месяца сегодняшнего дня (январь - 1 и т. д.). ОПРЕДЕЛИТЬ ВОЗРАСТ...

19
Droom
3 / 3 / 0
Регистрация: 23.01.2011
Сообщений: 71
20.09.2013, 18:27 #2
Особо подробно не вчитывался, но когда идет проверка на возраст, то так правильно будет:
C++
1
if (com[i].vozr < 18 )
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 19:04 #3
Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
// KR_6.cpp: определяет точку входа для консольного приложения.
// Информация об участниках спортивных соревнований содержит назва-
//ние команды, ФИО игрока, возраст. Вывести информацию о спортсменах, воз-
//раст которых не достиг 18 лет.
//
 
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <cstdlib>
#include <string>
using namespace std;
 
const int N = 30;
const int S = 3;
FILE *fl = NULL;
 
typedef struct
{
    char com[N];
    char fio[N];
    char vozr[N];
} TCom;
 
TCom com[S];         // Массив структур
char name[N] = "\0"; // Имя файла
int  nst = 0;        // Число введенных структур
 
int  Menu();   // Создание меню
void Nnf();    // Ввод имени файла
void Newf();   // Создание нового файла
void Spisok(); // Запись в файл
void Opf();    // Чтение из файла
void Resc();   // Вывод результата на экран
void Resf();   // Вывод результата в файл
void SizeF(FILE*, int&); // Размер файла
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout<<"Вас приветствует учебная программа по вычислению функции, пожалуста введите\nисходные данные... \n";
    while (true)
    {
        switch (Menu())
        {
        case 1: Nnf();    break;
        case 2: Newf();   break;
        case 3: Spisok(); break;
        case 4: Opf();    break;
        case 5: Resc();   break;
        case 6: Resf();   break;
        case 7: return 0;
        default: puts("Выберите правильно!\n");
        }
        puts ("Press any key to continue");
        getch (); // Ожидание нажатия любой клавиши
        system ("cls"); // Очистка экрана
    }
 
    system("pause");
    return 0;
}
 
int Menu() // Меню
{
    cout << "Выберите:"            << endl;
    cout << "1. Ввод имени файла"  << endl;
    cout << "2. Новый файл"        << endl;
    cout << "3. Запись в файл"     << endl;
    cout << "4. Чтение из файла"   << endl;
    cout << "5. Вывести результат" << endl;
    cout << "6. Вывести в файл"    << endl;
    cout << "7. Exit"              << endl;
    int i;
    (cin >> i).get(); // Ввод выбранного пункта меню
    return i;
}
 
void Nnf() // Ввод имени файла
{
    cout << "Введите file name" << endl;
    cin >> name;
}
 
void Newf() // Создание нового файла
{
    if (strlen(name) == 0) Nnf();
    if ((fl = fopen(name,"wb")) == NULL)
    {
        cout << "Ошибка при создании\n" << endl;
        system("pause");
        exit(1);
    }
    cout << "OK" << endl;
    fclose(fl);
}
 
void Spisok() // Запись данных в файл
{
    if (fl == NULL) Newf();
    if ((fl = fopen(name,"wb+")) == NULL)
    {
        cout << "Ошибка при создании\n" << endl;
        system("pause");
        exit(1);
    }
    
    do
    {
        cout << "Введите число спортстменов (не больше " << S << ")" << endl;
        (cin >> nst).get();
        if (nst <= 0 || nst > S) cout << "Нeправильное значение!" << endl;
    } while (nst <= 0 || nst > S);
    
    for (int i = 0; i < nst; i++)
    {
        cout << "Введите название комманды: ";
        cin.getline(com[i].com, N);
        cout << "Введите имя: ";
        cin.getline(com[i].fio, N);
        cout << "Введите возраст: ";
        (cin >> com[i].vozr).get();
        fwrite (&com[i], sizeof(TCom), 1, fl);
    }
    fclose (fl);
    cout << "OK" << endl;
}
 
void SizeF(int& sizef)
{
    fseek(fl, 0, SEEK_END);
    sizef = ftell(fl);
    fseek(fl, 0, SEEK_SET);
}
 
void Opf() // Чтение из бинарного файла
{
    if (fl == NULL) 
    {
         cout << "Файла не существует!\n";
         return;
    }
    if ((fl = fopen (name,"rb")) == NULL)
    {
        cout << "Ошибка при открытии" << endl;
        system("pause");
        exit(1);
    }
    
    int sizef = 0;
    SizeF(sizef);
    if (sizef == 0)
    {
        cout << "Файл пуст!" << endl;
        return;
    }
    
    nst = sizef / sizeof(TCom);
    TCom std;
    for (int i = 0; i < nst; ++i)
    {
        fread (&com[i], sizeof(TCom), 1, fl);
        
        cout << com[i].com << " " << com[i].fio << " "
            << com[i].vozr << endl;
    }
    fclose(fl);
    cout << "OK" << endl;
}
 
void Resc() // Вывод результата на экран
{
    if (nst == 0)
    {
        cout << "Список пуст!" << endl;
        return;
    }
    for (int i = 0; i < nst; i++)
        if (!strcmp(com[i].vozr, "18"))
            cout << com[i].com << endl << com[i].fio << endl << com[i].vozr<< endl;
}
 
void Resf() // Вывод результата в текстовый файл
{
    if (nst == 0)
    {
        cout << "Список пуст!" << endl;
        return;
    }
    
    cout << "Введите имя файла" << endl;
    char namet[30];
    (cin >> namet).get();
    FILE *ft;
    if ((ft = fopen (namet,"wb")) == NULL)
    {
        cout << "Ошибка при создании" << endl;
        system("pause");
        exit(1);
    }
    
    for (int i = 0; i < nst; i++)
    {
        if (!strcmp(com[i].vozr, "18"))
            fwrite (&com[i], sizeof(TCom), 1, fl);
    }
    fclose(ft);
    cout << "OK" << endl;
}
1
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
20.09.2013, 23:22  [ТС] #4
Не компилиться...
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 23:37 #5
Цитата Сообщение от Nikita19041 Посмотреть сообщение
Не компилиться...
Я такое не выкладываю. Что пишет? Среда какая?
0
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
20.09.2013, 23:48  [ТС] #6
Были НЕбольшие недоделки, все исправил сам, от чистой души говорю спасибо
if (!strcmp(com[i].vozr, "18"))
по условию нид было меньше 18 лет, а тут, как я понимаю, если возраст равен 18 годам...
Не подскажите напоследок как исправить?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 23:50 #7
Цитата Сообщение от Nikita19041 Посмотреть сообщение
Были большие недоделки
У кого? У меня?
1
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
20.09.2013, 23:51  [ТС] #8
Должно возвращаться значение меньше нуля, по команде strcmp, как я понимаю, для моего условия...

Добавлено через 24 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
У кого? У меня?
Небольшие*
Видимо описался
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 23:54 #9
Цитата Сообщение от Nikita19041 Посмотреть сообщение
Небольшие
Какие?
0
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
20.09.2013, 23:56  [ТС] #10
Скобки были незакрыты
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 23:57 #11
Цитата Сообщение от Nikita19041 Посмотреть сообщение
Скобки были незакрыты
Номер строки.
0
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
20.09.2013, 23:58  [ТС] #12
if (!strcmp(com[i].vozr, "18"))
как именно работает эта функция? потому что у меня она не соответствует условиям=\

Добавлено через 33 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
Номер строки.
уже разобрался, косяк с моей стороны, хреновый копипаст...
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2013, 00:01 #13
Цитата Сообщение от Nikita19041 Посмотреть сообщение
косяк с моей стороны, хреновый копипаст...
Другое дело...
Цитата Сообщение от Nikita19041 Посмотреть сообщение
if (!strcmp(com[i].vozr, "18"))
по условию нид было меньше 18 лет, а тут, как я понимаю, если возраст равен 18 годам...
Не подскажите напоследок как исправить?
C++
1
2
3
4
5
6
typedef struct
{
    char com[N];
    char fio[N];
    int vozr;
} TCom;
C++
1
2
3
for (int i = 0; i < nst; i++)
        if (com[i].vozr < 18)
            cout << com[i].com << endl << com[i].fio << endl << com[i].vozr<< endl;
C++
1
2
3
4
5
for (int i = 0; i < nst; i++)
    {
        if (com[i].vozr < 18)
            fwrite (&com[i], sizeof(TCom), 1, fl);
    }
1
Nikita19041
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 25
21.09.2013, 00:05  [ТС] #14
Хотел так же сделать, но так же хочется разобраться и с той функцией, что ты написал...
Как я понял, при равенстве str1 и str2 она возвращает значение 0 и функция продолжает выполняться?

Добавлено через 2 минуты
Пишет, что мы пытаемся сравнить 2 значения int* и int
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2013, 00:07 #15
Цитата Сообщение от Nikita19041 Посмотреть сообщение
Как я понял, при равенстве str1 и str2 она возвращает значение 0 и функция продолжает выполняться?
Да.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 00:07
Привет! Вот еще темы с ответами:

Представить заданный месяцами возраст в виде количества лет и месяцев - C++
Дано натуральное число n (1≤n≤1188) определяющее возраст человека в месяцах. Составить программу, выражающую возраст в годах и месяцах,...

Вычислить возраст человека в днях, неделях и месяцах, с учетом високосных лет - C++
Напишите программу, которая вычисляет возраст человека в днях, неделях и месяцах, с учетом високосных лет (год является високосным в двух...

Работа с файлами: найти сотрудников, чей возраст старше 45 или стаж превышает 20 лет - C++
работа с файлами поместить в файл n записей, содержащих сведения о сотрудниках: ФИО, год рождения, стаж работы. Найти сотрудников, чей...

Если к сумме цифр возраста прибавить число рождения, то получится возраст. Сколько лет долгожитепю? - C++
Долгожитель (возраст не более 100 лет) обнаружил однажды, что если к сумме цифр его возраста прибавить чисто его рождения, то как раз...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
21.09.2013, 00:07
Ответ Создать тему
Опции темы

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