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

Сортировка в структурах[C++] - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с файлами http://www.cyberforum.ru/cpp-beginners/thread525753.html
// filework.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <fstream> #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <conio.h>
C++ Помогите решить задачку Ребят, помогите, пожалуйста решить задачку на си++ Известно, что экспонента e раскладывается в ряд Тейлора следующим образом: (во вложении) Напишите программу, которая оценивает значение e с заданной точностью ε ( < ε < 10 ) по приведенной выше формуле. Точность ε достигается, когда абсолютное значение очередного слагаемого меньше или равно ε Очень надо. Заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread525743.html
Поясните, пожалуйста, смысл выделенных строк в тексте программы C++
Поясните, пожалуйста, смысл выделенных строк в тексте программы. Заранее спасибо #include "stdafx.h" #define im 32 int _tmain(int argc, _TCHAR* argv) { unsigned long mas= {0x3C638A80,0x20924A80,0x20924A80,0x38938A80,0x24920A80,0x24920A80,0x38620FE0}; unsigned int i,j; unsigned long k;
Возвращение времени в Линукс. C++
Доброго вечера! Мужики есть у кого функция возвращения текущего времени в Линукс?
C++ Произвести обмен первого и последнего символа http://www.cyberforum.ru/cpp-beginners/thread525682.html
Слово вводится с клавиатуры, произвести обмен первого и последнего символа
C++ VirtualQueryEx - дампим Пытаюсь написать код для снятия дампа с регионов памяти процесса. Все вроде замечательно, но не получается реализовать переход от одного региона к другому... MEMORY_BASIC_INFORMATION mbi; /* Get maximum address range from system info */ SYSTEM_INFO si; GetSystemInfo(&si); /* walk process addresses */ LPVOID lpMem = 0; LPCVOID hMod = 0; DWORD lpList =... подробнее

Показать сообщение отдельно
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
22.03.2012, 19:09
вот аналогичное задание в котором сортируются студенты по возрастанию среднего бала

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
#include "iostream"
#include "fstream"
 
using namespace std;
 
struct student 
{
    char name[20];//фамилия студента
    int group; //номер группы
    int  ses[5]; //оценки
};
 
double sort(student *,int n);    // прототип функции сортировки по среднему балу
double horoshist(student *,int n); // прототип функции вывод студентов у которых 4 и 5
 
int main()
{
    setlocale(LC_CTYPE,"Russian"); //русский шрифт в консоле
    int n, i, j; //обьявляем переменные
    cout << "Введите количество структур типа студент - ";
    cin >> n; //число элементов в массиве структур
    
    student *stud1 = new student [n]; //выделение динамической памяти под массив структур
 
    ifstream instr("inform.txt");   //открытие файла для ввода
    if(!instr) //если файл не найден тогда....
    {
        cout<<"File can not be open\n"; //выводим сообщение
        return 0; //выход из программы
    }                                          
 
    cout << endl << "Фамилия\tГруппа\t\t    Оценки" << endl << endl;
    
    //заполнение массива считыванием из файла
    for(i = 0; i < n; i++)
    { 
        instr >> stud1[i].name >> stud1[i].group;
        cout << stud1[i].name << '\t' << stud1[i].group; 
            for(j = 0; j < 5; j++)
            {
                instr >> stud1[i].ses[j];
                cout << '\t' << stud1[i].ses[j];
            }   
            cout << endl;
    }  
    instr.close(); //закрываем файл
 
    cout << endl << "Mассив STUD1 по возрастанию среднего балла" << endl;
    cout << endl << "Фамилия\tГруппа\t\t     Оценки\t\t     Средний бал" << endl << endl;
    sort(stud1, n); //вызываем функцию сортировки
 
    cout << endl << "Фамилии и номера групп для всех студентов, имеющих оценки 4 и 5" << endl;
    cout << endl << "Фамилия\tГруппа" << endl << endl;
    horoshist(stud1, n); //вызываем функцию для вывода хорошистов
 
    delete [] stud1; //очищаем память
    system("pause >> null"); //ждем пока пользователь нажмет любую клавишу
    return 0; //выход с программы
}
 
 
//сортировку делаеи спомощью "Пузырьковой сортировки"
double sort(student *gr, int n)
{
    double s; //перемееная для подсчета суммы балов каждого студента
    double *avg = new double [n]; //выделяем память под массив хранящщего средние балы каждого студента
    
    //находим средний бал каждого студента
    for(int i = 0; i < n; i++)
    {
        s = 0.;
        for(int j = 0; j < 5; j++)
        {
            s += gr[i].ses[j];
            avg[i] = s / 5;
        }
    }
 
    bool flag = true; //обьявляем булевую переменную и даем есть значение "истина"
        
        while(flag) //пока "истина" делаем
        {
            flag = false;  //устанавливаем переменную в "ложь"
                    
            for(int i = 0; i < n - 1; ++i)
            {
                if(avg[i] > avg[i + 1]) //если элемент массива большн следующий элемент, тогда
                {
                    //меняем массивы в структуре местами
                    student x = gr[i];
                    gr[i] = gr[i + 1];
                    gr[i + 1] = x;
                    
                    //а также меняем местами и элементы в массиве средних оценок 
                    double temp = avg[i];
                    avg[i] = avg[i + 1];
                    avg[i + 1] = temp;
           
                    flag = true; //уснанавлюем в "истина"
                }
            }
        }
 
        //выводим на экран отсортированную структуру
        for(int i = 0; i < n; i++)
    { 
        cout << gr[i].name << '\t' << gr[i].group; 
            for(int j = 0; j < 5; j++)
            {
                cout << '\t' << gr[i].ses[j];
                
            }
            cout << "\t" << avg[i]; //выводим на экран средний бал
            cout << endl;
    }  
    delete [] avg; //освобождаем память
    return 0;
}
 
 
//ищем хорошистов
double horoshist(student *gr, int n)
{
    int x, z = 0; //объявляем переменные
 
    for(int i = 0; i < n; i++)
    {
        x = 0;
        for(int j = 0; j < 5; j++)
        {
            
            if(gr[i].ses[j] == 4 || gr[i].ses[j] == 5)
            {
                x++; //считаем количество 4 и 5 у каждого студента
            }
        }
        if (x == 5) //если еоличество 4 и 5 равен 5 тогда...
        {
            cout << gr[i].name << '\t' << gr[i].group << endl; //выводи этих студентов
            z++;//подсчитываем количеств хорошистов
        }
        
    }
    if (z == 0) //если хорошистов нет, тогда ....
        {
            cout << "Среди студентов нет хорошистов" <<endl; //выводим сообщение об этом
        }
    return 0;
}
Разбирайтесь!

Сортировка пузырьком или простым обменом!

Содержимое файла
Ivanov 203 3 4 5 2 3
Petrov 402 4 3 5 4 5
Homenko 303 2 5 4 1 1
Zaletov 101 4 1 1 1 1
Sidorov 304 1 4 5 4 5
Reznik 304 3 3 3 4 4
Rolin 101 4 3 1 1 3
Garmash 304 1 4 3 4 4
Aleshin 222 4 5 4 4 4
Alabysh 453 5 4 3 5 2
Babaev 122 4 5 4 3 4
Bagoley 204 3 4 5 4 3
Belkin 102 2 5 4 3 2
Belokon 342 5 5 5 5 5
Gilyov 354 1 4 3 2 4
Vagin 100 5 3 4 2 2
Volokh 234 4 5 4 4 4
Griazev 176 3 5 2 4 3
Demin 312 5 5 5 5 2
Dulov 423 3 5 4 2 3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru