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

Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код - C++

Восстановить пароль Регистрация
 
Nansy17
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 12
11.11.2013, 23:50     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #1
Помогите с заданием, кто понимает.
Составить программу формирования файла, содержащего Ведомость студентов, сдававших сессию, содержит ФИО и оценки по четырем предметам. Вывести список студентов, сдавших сессию со средним
баллом больше 7.В программе предусмотреть сохранение вводимых данных в файле и возможность чтения из ранее сохраненного файла. Вывести результаты на экран и в текстовой файл.


Код такой у меня. Знаю, что в той части, где нужно вывести список студентов со средним баллом больше 7 у меня точно есть ошибка (выделили жирным). Исправьте плииииз.
#include <iostream.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

FILE *fl;
typedef struct
{
char fio[30];
unsigned char matem;
unsigned char pravo;
unsigned char fiz;
unsigned char ist;
} TStudent;
TStudent stud[30];
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf();
int main()
{
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("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}

int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti result" << endl;
cout << "6. Vivesti v fail" << endl;
cout << "7. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wt")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rt+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite chislo studentov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite imya: ";
cin >> stud[i].fio;
cout << "Vvedite otcenku po matematike: ";
cin >> stud[i].matem;
cout << "Vvedite otcenku po pravu: ";
cin >> stud[i].pravo;
cout << "Vvedite otcenku po fizike: ";
cin >> stud[i].fiz;
cout << "Vvedite otcenku po istorii: ";
cin >> stud[i].ist;
fwrite (&stud[i], sizeof(TStudent), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TStudent std;
while (true)
{
int nwrt = fread (&std, sizeof(TStudent), 1, fl);
if (nwrt != 1) break;
stud[nst] = std;
cout << stud[nst].fio << " " << stud[nst].matem << " "
<< stud[nst].pravo << " "
<< stud[nst].fiz << " "
<< stud[nst].ist << " " ;
endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if ((stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst >= '7')
cout << stud[i].fio << endl;
}
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if ((stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst>= '7')
{
strcpy (s, stud[i].fio);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 23:50     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код
Посмотрите здесь:

C++ Удаление элементов списка со средним баллом студента, меньше заданного числа
Определить двух студентов с наивысшим средним баллом. C++
Вывести абитуриентов, проживающих в г.Минске и сдавших экзамены со средним баллом не ниже 8. C++
C++ Вывести список студентов с их оценками за разные предметы, со средним баллом студента
C++ В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор
C++ Задание: Считать и вывести информацию об учениках со средним баллом выше данного значения
Выбрать студентов заданного пола, проживающих в общежитии (исправить код) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
12.11.2013, 07:01     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #2
Nansy17, а какая именно ошибка?
Nansy17
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 12
12.11.2013, 20:47  [ТС]     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #3
Ну ошибки как таковой нет, просто программа выводит не тот результат что нужно. Не правильно считает или не правильно выводит результат, в этом и вопрос((

Добавлено через 9 часов 59 минут
Ну помогите, умные парни!!!)

Добавлено через 32 секунды
Folko,
Цитата Сообщение от Nansy17 Посмотреть сообщение
Ну ошибки как таковой нет, просто программа выводит не тот результат что нужно. Не правильно считает или не правильно выводит результат, в этом и вопрос((
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
12.11.2013, 20:49     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #4
Ты код в теги заключи, а то неудобно читать.
Nansy17
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 12
12.11.2013, 21:09  [ТС]     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #5
HEDO4EJIOBEK, что значит в теги??(((

Добавлено через 59 секунд
C++ (Qt)
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
#include <iostream.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
FILE *fl;
typedef struct
{
char fio[30];
unsigned char matem;
unsigned char pravo;
unsigned char fiz;
unsigned char ist;
} TStudent;
TStudent stud[30];
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf();
int main()
{
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("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}
 
int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti result" << endl;
cout << "6. Vivesti v fail" << endl;
cout << "7. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wt")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rt+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite chislo studentov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite imya: ";
cin >> stud[i].fio;
cout << "Vvedite otcenku po matematike: ";
cin >> stud[i].matem;
cout << "Vvedite otcenku po pravu: ";
cin >> stud[i].pravo;
cout << "Vvedite otcenku po fizike: ";
cin >> stud[i].fiz;
cout << "Vvedite otcenku po istorii: ";
cin >> stud[i].ist;
fwrite (&stud[i], sizeof(TStudent), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TStudent std;
while (true)
{
int nwrt = fread (&std, sizeof(TStudent), 1, fl);
if (nwrt != 1) break;
stud[nst] = std;
cout << stud[nst].fio << " " << stud[nst].matem << " "
<< stud[nst].pravo << " " 
<< stud[nst].fiz << " "
<< stud[nst].ist << " " ;
endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if ((stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst >= '7')
cout << stud[i].fio << endl;
}
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if ((stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst>= '7')
{
strcpy (s, stud[i].fio);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
12.11.2013, 22:35     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #6
Nansy17, вот и есть тэги) Сейчас попробую понять ошибку
У меня вот такой вопрос: вы уверены, что вот эта строка правильно считает?
(stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst >= '7'
Мне почему то кажется,что результатом будет строка из 4 символов (я просто не пользовался, в таких случаях делал тип переменных int)
Nansy17
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 12
12.11.2013, 22:38  [ТС]     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #7
Folko, очень жду)
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
12.11.2013, 22:40     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #8
Nansy17, У меня вот такой вопрос: вы уверены, что вот эта строка правильно считает?
(stud[i].matem+stud[i].pravo+stud[i].fiz+stud[i].ist)/nst >= '7'
Мне почему то кажется,что результатом будет строка из 4 символов (я просто не пользовался, в таких случаях делал тип переменных int)
Nansy17
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 12
12.11.2013, 23:15  [ТС]     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #9
Folko, Нет, считает не правильно, это точно. Я тут явный бред написала, но ступор у меня, просто не могу сообразить как подсчитать средний бал и вывести фамилию с оценкой больше 7

Добавлено через 11 минут
Folko, в этой строке nst заменить на 4 вроде надо и всё)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 23:57     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код
Еще ссылки по теме:

C++ Надо исправить код! Распечатать анкетные данные студентов, успевающих на 4 и 5
Исправить код: распечатать анкетные данные студентов, успевающих на 4 и 5 C++
C++ Структура "Студент". Вычислить средний балл группы и распечатать список студентов с низким средним баллом
C++ Распечатать список студентов со средним баллом выше общего среднего балла
C++ Классы. Найти студентов академической группы со средним баллом более 75 баллов

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

Или воспользуйтесь поиском по форуму:
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
12.11.2013, 23:57     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код #10
Nansy17, я бы предложил хранить оценки в int'овых полях) Так гораздо проще и считать будет корректно
Yandex
Объявления
12.11.2013, 23:57     Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код
Ответ Создать тему
Опции темы

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