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

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

Войти
Регистрация
Восстановить пароль
 
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
#1

Сортировка элементов массива структур шаблонной функцией - C++

12.03.2014, 23:38. Просмотров 242. Ответов 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
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
#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;         // средняя оценка
};
void inite(student * pStud, int k); // создание массива структур, где указаны студенты с их оценками
void show(student * pStud, int k);  // отображение этого массива
template <typename t>
void sort_t(t *pArr, int k);        // вот эту функцию хотелось бы сделать пригодной для сортировки не только по среднему значению,
                                    // но и по другим оценкам.
int main()
{   
    cout << "Enter the number of students: ";
    int k;
    while (cin >> k)
    {
        if (k < 1)
            cout << "There is no sence to create the list without\n"
                    "even one student. Enter another number: ";
        else
            break;
    }
    student * pStud = new student [k];
    inite(pStud, k);
    show(pStud, k);
    sort_t(pStud, k);
    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 << "-";
    cout << char (194);
    for (int i = 0; i < 10; ++i)
        cout << "-";
    cout << char (194);
    for (int i = 0; i < 9; ++i)
        cout << "-";
    cout << char (194);
    for (int i = 0; i < 5; ++i)
        cout << "--" << char (194);
    for (int i = 0; i < 12; ++i)
        cout << "-";
    cout << char (191) << endl;
    cout << "|" << setw(4) << "Num|";
    cout << setw(ArSize) << "First name" << "|";
    cout << setw(ArSize-1) << "Last name" << "|";
    for (int i = 0; i < n; ++i)
        cout << "#" << i + 1 << "|";
    cout << "Average mark" << "|" << endl;
    for (int j = 0; j < k; ++j)
    {
        cout << char (195);
        for (int i = 0; i < 3; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < ArSize; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < ArSize - 1; ++i)
            cout << "-";
        cout << char (197);
        for (int i = 0; i < 5; ++i)
            cout << "--" << char (197);
        for (int i = 0; i < 12; ++i)
            cout << "-";
        cout << char (180) << endl;
        cout << "|" << setw(3) << j + 1 << "|";
        cout << setw(ArSize) << pStud[j].name << "|";
        cout << setw(ArSize-1) << pStud[j].surname << "|";
        for (int i = 0; i < n; ++i)
            cout << " " << pStud[j].notes[i] << "|";
        cout << setw(8) << pStud[j].average << setw(5) << "|";
        cout << endl;
    }
    cout << char (192);
    for (int i = 0; i < 3; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 10; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 9; ++i)
        cout << "-";
    cout << char (193);
    for (int i = 0; i < 5; ++i)
        cout << "--" << char (193);
    for (int i = 0; i < 12; ++i)
        cout << "-";
    cout << char (217) << endl << endl;
}
template <typename t>
void sort_t(t *pArr, int k)
{
    t *pTemp = new t;
    for (int i = 0; i < k - 1; ++i)
    {
        int f = i + 1;
        for (int j = i + 2; j < k; ++j)
            if (pArr[f] > pArr[j])
                f = j;
        if (pArr[f] < pArr[i])
        {
            *pTemp = pArr[f];
            pArr[f] = pArr[i];
            pArr[i] = *pTemp;
        }
    }
    delete pTemp;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 23:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка элементов массива структур шаблонной функцией (C++):

Сортировка массива структур по первым трём цифрам одного из его элементов - C++
Добрый вечер, снова я. Не могу решить вроде бы простое задание по информатике, перерыл кучу страниц, мануалов и кодов, нигде не могу найти,...

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

Создание dll-файла с шаблонной функцией - C++
Здравствуйте! Требуется создать .dll файл, который будет хранить в себе шаблонную функцию Вот код #ifndef _DLLTEST_H_ #define...

Возвращение функцией значения динамического массива структур - C++
Auto readfile() { ifstream file(file); int i = 0, color; Auto *A = new Auto; while (!file.eof()) { file &gt;&gt; A.name &gt;&gt;...

В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? - C++
В чем разница между Си'шным приведением типа: ... int x{5}; ifs.write( (char*)&amp;x, sizeof(int) ); ... и унарной шаблонной...

Сортировка массива функцией - C++
Функции в С++ мы начали учить недавно, поэтому я в них не сильно понимаю. вот написал программу, для сортировки массива пузырьком а как...

2
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 03:04 #2
Цитата Сообщение от montkay Посмотреть сообщение
// вот эту функцию хотелось бы сделать пригодной для сортировки не только по среднему значению, но и по другим оценкам.
Тут можно и без шаблона обойтись. Передавайте в функцию название поля (или флаг), в зависимости от него сортируйте нужное поле.
0
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
13.03.2014, 09:35  [ТС] #3
alsav22, можно обойтись без шаблонной функции. Но у меня задание реализовать сортировку именно через шаблонную функцию.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 09:35
Привет! Вот еще темы с ответами:

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

Сортировка массива объектов функцией sort - C++
Не получается отсортировать массив объектов. После сортировки должен вывестись список отсортированных по мощности объектов. Код криворукий,...

Сортировка массива структур - C++
Имеется массив структур, который необходимо отсортировать по числовому ключу. Я написал код, но он не работает, поэтому просьба указать на...

Сортировка массива структур - C++
Дана структура WORKER и массив из 10 стркутур. Нужно 1)сортировать список 2) вывести на экран рабочих чей стаж больше числа введённого с...


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

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

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