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

нужно отсортировать массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать самую длинную последовательность подряд идущих букв а http://www.cyberforum.ru/cpp-beginners/thread421747.html
Дана строка.Подсчитать самую длинную последовательность подряд идущих букв а.
C++ Поиск максимального значения массива Люди помогите с двумя задачками: 1. В матрице размером 4 на 5 найти сумму наибольших элементов столбцов. 2. Вычислить значение max (x(0)+x(n-1),x(1)+x(n-2),x(2)+x(n-3),....,x((n-1)/2)+x(n/2), где x(i) - элементы вещественного массива x из n элементов. Массив содержит 18 элементов. Поиск максимального значения оформить в виде функции. http://www.cyberforum.ru/cpp-beginners/thread421736.html
указатели,символьные строки и функции C++
Разработать функцию, которая выполняет ту обработку фрагмента текста, которая определена в Вашем индивидуальном задании. При реализации функции запрещается пользоваться функциями библиотек языка C. Примечания: 1. Функция должна возвращать результат в любом случае. Например, необходимо предусмотреть работу функции при некорректном задании ее параметров, некорректном вводе данных и т.п....
C++ Управление строками
Есть ли функции в библиотеке Си (не Си++) позволяющие перезаписывать содержимое строк или менять положение индикатора позиции наподобии того как это можно делать с потоками? Пока кажеться, что в строки символы можно только добавлять...
C++ Функция fscanf http://www.cyberforum.ru/cpp-beginners/thread421692.html
Читаю из файла (в файле записаны пояснения к работе программы) код: #include <iostream> using namespace std; void fFunc(float a, float b, float c); void ffFunc(float a, float b, float c);
C++ Как написать программу, которая рисует прямоугольник символами, с задаными длиной и широтой. Например программа спрашивает ширину и длину (целые числа). Допустим это 3 и 5. Тогда программа нарисует звездочками прямоугольник 3 на 5. *** *** *** *** *** Как быть с числом строк - я знаю. А как сделать, чтобы в строке было нужное количество символов - не знаю подробнее

Показать сообщение отдельно
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.01.2012, 12:49     нужно отсортировать массив
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
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
#include <fstream>
#include <algorithm>
#include <iterator>
 
typedef unsigned mark;
typedef float gpa;
 
class Student
{
    std::string name;
    std::vector<mark> marks;
    
public:
    Student(): name("NoName")
    {
        
    }
    
    ~Student()
    {
        
    }
    
    void setName(std::string n)
    {
        name = n;
    }
    
    void addMark(mark m)
    {
        marks.push_back(m);
    }
    
    gpa getGpa()
    {
        if(marks.empty())
            return -1;
        return std::accumulate(marks.begin(), marks.end(), 0) / marks.size();
    }
    
    bool isBStudent()
    {
        for(std::vector<mark>::iterator it = marks.begin(); it != marks.end(); ++it)
            if(*it < 4)
                return false;
        return true;
    }
    
    template <class OstreamIterator> 
    friend OstreamIterator& operator << (OstreamIterator& stream, Student s)
    {
        stream << s.name << ": ";
        for(std::vector<mark>::iterator it = s.marks.begin(); it != s.marks.end(); ++it)
            stream << *it << ' ';
        return stream;
    }
};
 
bool isNoB(Student s) { return !s.isBStudent(); }
 
bool sortGpa(Student s1, Student s2) { return s1.getGpa() > s2.getGpa(); }
 
int main()
{
    typedef std::vector<Student> StudentGroup;
    typedef StudentGroup::iterator GroupItr;
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    int n, k;
    fin >> n >> k;
    StudentGroup group(n);
    for(int i = 0; i < n; ++i)
    {
        std::string name;
        fin >> name;
        group.at(i).setName(name);
        for(int j = 0; j < k; ++j)
        {
            mark m;
            fin >> m;
            group.at(i).addMark(m);
        }
    }
    StudentGroup bGroup;
    for(GroupItr s = group.begin(); s != group.end(); ++s)
    {
        if(s -> isBStudent())
            bGroup.push_back(*s);
    }
    std::sort(bGroup.begin(), bGroup.end(), sortGpa);
    for(GroupItr s = bGroup.begin(); s != bGroup.end(); ++s)
    {
        fout << *s << std::endl;
        std::cout << *s << std::endl;
    }
    fin.close();
    fout.close();
    return 0;
}
out
Bash
1
2
3
4
5
6
7
8
9
10
11
12
soon@bt:~/src/C++$ cat input.txt 
3 3 
lolwho? 3 4 5
lolwho! 4 4 5
lolwhohoho 5 5 5
soon@bt:~/src/C++$ ./main
lolwhohoho: 5 5 5 
lolwho!: 4 4 5 
soon@bt:~/src/C++$ cat output.txt 
lolwhohoho: 5 5 5 
lolwho!: 4 4 5 
soon@bt:~/src/C++$


Добавлено через 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
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
#include <fstream>
#include <iterator>
 
typedef unsigned mark;
typedef float gpa;
 
class Student
{
    std::string name;
    std::vector<mark> marks;
    
public:
    Student(): name("NoName")
    {
        
    }
    
    ~Student()
    {
        
    }
    
    void setName(std::string n)
    {
        name = n;
    }
    
    void addMark(mark m)
    {
        marks.push_back(m);
    }
    
    gpa getGpa()
    {
        if(marks.empty())
            return -1;
        return std::accumulate(marks.begin(), marks.end(), 0) / marks.size();
    }
    
    bool isBStudent()
    {
        for(std::vector<mark>::iterator it = marks.begin(); it != marks.end(); ++it)
            if(*it < 4)
                return false;
        return true;
    }
    
    template <class OstreamIterator> 
    friend OstreamIterator& operator << (OstreamIterator& stream, Student s)
    {
        stream << s.name << ": ";
        for(std::vector<mark>::iterator it = s.marks.begin(); it != s.marks.end(); ++it)
            stream << *it << ' ';
        return stream;
    }
};
 
bool isNoB(Student s) { return !s.isBStudent(); }
 
bool sortGpa(Student s1, Student s2) { return s1.getGpa() > s2.getGpa(); }
 
template <class T> void myswap(T& a, T& b)
{
    T c = a;
    a = b;
    b = c;
}
 
template <class Iterator, class Compare>
void mysort(Iterator first, Iterator last, Compare comp)
{
    if(first == last)
        return;
    for( ; first != last - 1; ++first)
        for(Iterator it = first + 1; it != last; ++it)
            if(!comp(*first, *it))
                myswap(*first, *it);
}
 
int main()
{
    typedef std::vector<Student> StudentGroup;
    typedef StudentGroup::iterator GroupItr;
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    int n, k;
    fin >> n >> k;
    StudentGroup group(n);
    for(int i = 0; i < n; ++i)
    {
        std::string name;
        fin >> name;
        group.at(i).setName(name);
        for(int j = 0; j < k; ++j)
        {
            mark m;
            fin >> m;
            group.at(i).addMark(m);
        }
    }
    StudentGroup bGroup;
    for(GroupItr s = group.begin(); s != group.end(); ++s)
    {
        if(s -> isBStudent())
            bGroup.push_back(*s);
    }
    mysort(bGroup.begin(), bGroup.end(), sortGpa);
    for(GroupItr s = bGroup.begin(); s != bGroup.end(); ++s)
    {
        fout << *s << std::endl;
        std::cout << *s << std::endl;
    }
    fin.close();
    fout.close();
    return 0;
}
 
Текущее время: 03:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru