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

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

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

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

12.03.2014, 23:38. Просмотров 224. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 23:38     Сортировка элементов массива структур шаблонной функцией
Посмотрите здесь:

Сортировка массива структур по первым трём цифрам одного из его элементов - 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++
Функции в С++ мы начали учить недавно, поэтому я в них не сильно понимаю. вот написал программу, для сортировки массива пузырьком а как...

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

Сортировка массива структур - C++
Разработать программу, реализующую сортировку массива структур (50 элементов). В качестве элемента массива выбрать структуру,...

Сортировка массива структур - C++
Имеется структура : struct Data_base { string team_name; string city; int scored_goals; int missed_goals;...

Сортировка массива структур - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;stdio.h&gt; ...

Сортировка массива структур - C++
void sortByFio() { int i,j; char temp; char temp2; char temp3; for (i = 0; i&lt;len; i++) { for ( i = j+1; j&lt;len; j++) { ...

Сортировка массива структур - C++
не могу понять почему не работает. Программа должна сортануть массив из 10 елементов типа Struct. массив я забиваю из файла. есть...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2014, 03:04     Сортировка элементов массива структур шаблонной функцией #2
Цитата Сообщение от montkay Посмотреть сообщение
// вот эту функцию хотелось бы сделать пригодной для сортировки не только по среднему значению, но и по другим оценкам.
Тут можно и без шаблона обойтись. Передавайте в функцию название поля (или флаг), в зависимости от него сортируйте нужное поле.
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
13.03.2014, 09:35  [ТС]     Сортировка элементов массива структур шаблонной функцией #3
alsav22, можно обойтись без шаблонной функции. Но у меня задание реализовать сортировку именно через шаблонную функцию.
Ответ Создать тему
Опции темы

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