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

Сортировка массива структур через сортировку массива указателей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построить класс для работы с датой http://www.cyberforum.ru/cpp-beginners/thread1123637.html
Добрый день товарищи, очень нужна помощь, буду благодарен каждому ответу. Задание: Постpоить класс для работы с датой. Класс должен включать следующие поля: число, месяц, год, день недели. Класс...
C++ Вывод дробной части Всем привет. Проблема собственно такая, не получается вывести дробную часть стороны треугольника, т.е 4,5(выводит только 4) уже не выводит, менял тип переменных, тип вычисления на float, высчитывает... http://www.cyberforum.ru/cpp-beginners/thread1123624.html
Сформировать вектор D (n) из произведений абсолютных ненулевых значений соответствующих строк матрицы C++
Задана матрица целых чисел A(n×n). Все числа-палиндромы, расположенные на главной диагонали, заменить суммой цифр модуля минимального элемента соответствующего столбца матрицы....
C++ Как сделать голосовой поток вывода?
Ну то есть скармливаешь ему строку оператором <<, а он её читает через динамики. Как это сделать?
C++ Структуры. Создать массив из 10 точек, сгенерировать случайным образом координаты и массы http://www.cyberforum.ru/cpp-beginners/thread1123555.html
люди, у меня осталось одно задание: Структурный тип содержит поля: координаты х,у и массу материальной точки. Создать массив из 10 точек, сгенерировать случайным образом координаты и массы, вывести...
C++ Работа с файлами, запись, обработка и чтение доброго времени суток, мне нужно: Создать текстовый файл, содержащий целые значения, следующего формата: 15 13 21 42 37 50 9 2. Считать из файла записанные данные и заменить нулем... подробнее

Показать сообщение отдельно
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72

Сортировка массива структур через сортировку массива указателей - C++

19.03.2014, 10:41. Просмотров 1100. Ответов 6
Метки (Все метки)

Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста.

Код программы:

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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <time.h>
#include <memory.h>
#include <memory>
#include <stdlib.h>
#include <iomanip>
using namespace std;
const int ArSize = 10;
const int n = 5;
struct student
{
    char name[ArSize];
    char surname[ArSize];
    int notes[n];
    double average;
};
 
typedef bool (*tFunc1)(double Left, double Right);
typedef bool (*tFunc2)(int Left, int Right);
typedef bool (*tFunc3)(char Left, char Right);
void inite(student * pStud, int k);
void show(student * pStud, int k);
void sort(student **ppStud, int k, char ch);
template <typename temp>
bool Asc(temp Left, temp Right);
template <typename temp>
bool Desc(temp Left, temp Right);
int main()
{   
    cout << "Enter the number of students: ";
    int k;
    while (cin >> k && (k < 1))
        cout << "There is no sence to create the list without\n"
                "even one student. Enter another number: ";
    student * pStud = new student [k];
    inite(pStud, k);
    show(pStud, k);
    cout << "Press 1 in order to sort the students\n"
            "in Ascent, and 2 - in Descent: ";
    char ch;
    while (cin >> ch && ch != '1' && ch != '2')
        cout << "Enter another number: ";
    sort(&pStud, k, ch);
    show(pStud, k);
    delete [] pStud;
}
void inite(student *pStud, int k)
{
    srand(unsigned (time(0)));
    char name_stud[5][25] = {"Ludvig", "Sasha", "Amadei", "Karl", "Salvador"};
    char surname_stud[5][25] = {"Bethoven", "Ten", "Mozart", "Marks", "Dali"};
    for (int i = 0; i < k; ++i)
    {
        strcpy_s(pStud[i].name, name_stud[rand()%5]);
        strcpy_s(pStud[i].surname, surname_stud[rand()%5]);
        for (int j = 0; j < n; ++j)
            pStud[i].notes[j] = rand()%3 + 3;
        int sum = 0;
        for (int j = 0; j < n; ++j)
            sum += pStud[i].notes[j];
        pStud[i].average = (double) sum/n;
    }
}
void show(student *pStud, int k)
{
    cout << endl;
    cout << char (218);
    for (int i = 0; i < 3; ++i)
        cout << char (196);
    cout << char (194);
    for (int i = 0; i < 10; ++i)
        cout << char (196);
    cout << char (194);
    for (int i = 0; i < 9; ++i)
        cout << char (196);
    cout << char (194);
    for (int i = 0; i < 5; ++i)
        cout << char (196) << char (196) << char (194);
    for (int i = 0; i < 12; ++i)
        cout << char (196);
    cout << char (191) << endl;
    cout << char (179) << setw(3) << "Num" << char (179);
    cout << setw(ArSize) << "First name" << char (179);
    cout << setw(ArSize-1) << "Last name" << char (179);
    for (int i = 0; i < n; ++i)
        cout << "#" << i + 1 << char (179);
    cout << "Average mark" << char (179) << endl;
    for (int j = 0; j < k; ++j)
    {
        cout << char (195);
        for (int i = 0; i < 3; ++i)
            cout << char (196);
        cout << char (197);
        for (int i = 0; i < ArSize; ++i)
            cout << char (196);
        cout << char (197);
        for (int i = 0; i < ArSize - 1; ++i)
            cout << char (196);
        cout << char (197);
        for (int i = 0; i < 5; ++i)
            cout << char (196) << char (196) << char (197);
        for (int i = 0; i < 12; ++i)
            cout << char (196);
        cout << char (180) << endl;
        cout << char (179) << setw(3) << j + 1 << char (179);
        cout << setw(ArSize) << pStud[j].name << char (179);
        cout << setw(ArSize-1) << pStud[j].surname << char (179);
        for (int i = 0; i < n; ++i)
            cout << " " << pStud[j].notes[i] << char (179);
        cout << setw(8) << pStud[j].average << setw(5) << char (179);
        cout << endl;
    }
    cout << char (192);
    for (int i = 0; i < 3; ++i)
        cout << char (196);
    cout << char (193);
    for (int i = 0; i < 10; ++i)
        cout << char (196);
    cout << char (193);
    for (int i = 0; i < 9; ++i)
        cout << char (196);
    cout << char (193);
    for (int i = 0; i < 5; ++i)
        cout << char (196) << char (196) << char (193);
    for (int i = 0; i < 12; ++i)
        cout << char (196);
    cout << char (217) << endl << endl;
}
template <typename temp>
bool Asc(temp Left, temp Right)
{
    return Left > Right;
}
template <typename temp>
bool Desc(temp Left, temp Right)
{
    return Left < Right;
}
void sort(student **ppStud, int k, char ch)
{
    tFunc1 pFunc1;
    if (ch == '1')
        pFunc1 = Asc;
    else
        pFunc1 = Desc;
    student *pTemp = new student;
    for (int i = 0; i < k - 1; ++i)
    {
        int f = i + 1;
        for (int j = i + 2; j < k; ++j)
            if (pFunc1(ppStud[f]->average, ppStud[j]->average))
                f = j;
        if (!pFunc1(ppStud[f]->average, ppStud[i]->average))
        {
            pTemp = ppStud[f];
            ppStud[f] = ppStud[i];
            ppStud[i] = pTemp;
        }
    }
    delete pTemp;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru