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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Сангвин
0 / 0 / 0
Регистрация: 05.06.2011
Сообщений: 14
21.06.2012, 02:26     В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор #1
Пожалуйста помогите с программой ,очень необходима! С обязательным применением функций, исходные данные или результат или и то и другое должно размещаться в текстовом файле.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2012, 02:26     В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
21.06.2012, 10:41     В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор #2
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
#include <fstream>
 
typedef struct Student
{
    char name[256];
    int* grades;
    int count;
    double average;
} STUDENT;
 
#define N 100
 
using namespace std;
 
void swap(STUDENT& s1, STUDENT& s2);
 
int main()
{
    const char* filename[2] = { "d:\\input.txt", "d:\\output.txt" };
    ifstream ifs(filename[0],ifstream::in);
    ofstream ofs(filename[1],ofstream::out);
    
    STUDENT* pStudents = new STUDENT[N];
    memset((void*)pStudents, 0x00, sizeof(STUDENT) * N);
 
    char* line = new char[256]; int x = 0;
    while (ifs.peek() >= 0 && ifs.getline(line,256))
    {
        char* buf = NULL; 
        char name[256] = "\0", data[256] = "\0";
        if ((buf = strstr(line," #")) != NULL)
        {
            int i = 0, k = 0;
            while (*line != *buf) name[i++] = *line++;
            while (!isdigit(*line)) *line++;
 
            strcpy(pStudents[x].name,name);
 
            int q = 0, *grades = new int[256];
            char* value = strtok(line,",");
            while (value != NULL && q < 256)
            {
                grades[q++] = atoi(value);
                value = strtok(NULL,",");
            }
 
            pStudents[x].grades = new int[q];
            memcpy((void*)pStudents[x].grades, grades, sizeof(int) * q);
 
            pStudents[x].count = q;
 
            delete[] grades;
        }
 
        x++;
    }
 
    STUDENT* pStudents2 = new STUDENT[N];
    memset((void*)pStudents2, 0x00, sizeof(STUDENT) * N);
 
    for (int i = 0, d = 0; strcmp("\0",pStudents[i].name) < 0; i++)
    {
        double nAvg = 0.0;
        for (int k = 0; k < pStudents[i].count; k++)
            nAvg+=(double)pStudents[i].grades[k] / pStudents[i].count;
 
        pStudents[i].average = nAvg;
        if (pStudents[i].average >= 4.0)
        {
            ofs << pStudents[i].name << " - ";
            for (int q = 0; q < pStudents[i].count; q++)
                ofs << pStudents[i].grades[q] << " ";
            ofs << "avg = " << pStudents[i].average << endl;
        }
 
        else pStudents2[d++] = pStudents[i];
    }
 
    for (int t1 = 0; strcmp("\0",pStudents2[t1].name) < 0; t1++)
    {
        int max = t1;
        for (int t2 = t1+1; strcmp("\0",pStudents2[t2].name) < 0; t2++)
            max = (pStudents2[t2].average > pStudents2[max].average) ? t2 : max;
        swap(pStudents2[t1],pStudents2[max]);
    }
 
    ofs << endl;
 
    for (int z1 = 0; strcmp("\0",pStudents2[z1].name) < 0; z1++)
    {
        ofs << pStudents2[z1].name << " # ";
        for (int z2 = 0; z2 < pStudents2[z1].count; z2++)
            ofs << pStudents2[z1].grades[z2] << " ";
        ofs << "avg = " << pStudents2[z1].average << endl;
    }
 
    ifs.close();
    ofs.close();
 
    _getch();
 
    return 0;
}
 
void swap(STUDENT& s1, STUDENT& s2)
 { STUDENT _ts = s1; s1 = s2; s2 = _ts; }
INPUT.TXT:
Ivanov # 4,5,3,5,4
Petrov # 5,4,4,5,3
Sidorov # 4,4,4,4,3
Sedov # 5,5,5,5,5
Smirnov # 3,3,3,3,3
Gladkov # 5,5,4,5,5
Stepanov # 4,4,5,5,5
Kirilov # 4,4,4,4,4
Nikolaev # 3,3,3,5,3
Dezhnev # 5,5,5,5,5
Sviridov # 3,4,4,5,4
Dritriev # 3,3,3,3,3
Tokarev # 5,5,5,5,3
Zuev # 4,4,4,5,5
Lomov # 5,5,4,5,5
Lokotev # 3,3,3,5,4
Petrenko # 3,4,4,4,5
Nikonov # 4,5,3,3,3

OUTPUT.TXT:
Ivanov - 4 5 3 5 4 avg = 4.2
Petrov - 5 4 4 5 3 avg = 4.2
Sedov - 5 5 5 5 5 avg = 5
Gladkov - 5 5 4 5 5 avg = 4.8
Stepanov - 4 4 5 5 5 avg = 4.6
Kirilov - 4 4 4 4 4 avg = 4
Dezhnev - 5 5 5 5 5 avg = 5
Sviridov - 3 4 4 5 4 avg = 4
Tokarev - 5 5 5 5 3 avg = 4.6
Zuev - 4 4 4 5 5 avg = 4.4
Lomov - 5 5 4 5 5 avg = 4.8
Petrenko - 3 4 4 4 5 avg = 4

Sidorov # 4 4 4 4 3 avg = 3.8
Nikonov # 4 5 3 3 3 avg = 3.6
Lokotev # 3 3 3 5 4 avg = 3.6
Nikolaev # 3 3 3 5 3 avg = 3.4
Dritriev # 3 3 3 3 3 avg = 3
Smirnov # 3 3 3 3 3 avg = 3
Сангвин
0 / 0 / 0
Регистрация: 05.06.2011
Сообщений: 14
21.06.2012, 21:33  [ТС]     В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор #3
Добавьте пожалуйста комментарии !
Yandex
Объявления
21.06.2012, 21:33     В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор
Ответ Создать тему
Опции темы

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