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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
#1

Сортировка массива структур - C++

24.07.2009, 01:02. Просмотров 1236. Ответов 4

В общем, то что в названии темы, то и не получается.
Не хочет присваиваться адрес предыдущей ячейки в массиве

stud1.h
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
#include <iostream>
#include <stdlib.h>
using namespace std;
namespace grup
{
    struct student 
    {
        char FIO[40];
        int ngr;
        int ocen;
    };
    void vvod(student *IB);
    student *sort(student *IB);
}
void grup::vvod(student *IB)
{
    for(int i=0; i<10; i++)
    {
        cout<<"Введите ФИO: \n";
        cin.getline(IB[i].FIO,40);
        cout<<"Введите номер группы: \n";
        char z[40];
        cin.getline(z,40);
        IB[i].ngr=atoi(z);
        cout<<"Введите средний бал: \n";
        cin.getline(z,40);
        IB[i].ocen=atoi(z);
    }
        
};
grup::student *grup::sort(student *IB)
{
student *sor;
system("cls");
for(int i=0; i<10; i++)
if(IB[i].ngr>IB[i+1].ngr)
{ 
sor=&IB[i+1]; 
IB[i+1]=&IB[i]; // Здесь выдаёт 
IB[i]=&sor;      // ошибку
}
for(i=0; i<10; i++)
cout<<IB[i].FIO<<"  "<<IB[i].ngr<<"  "<<IB[i].ocen<<endl;
};

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stud1.h>
#include <windows.h>
using namespace grup;
void main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 student *IB=new student[10];
vvod(IB);
sort(IB);
delete IB;
 
}
Условие задачи:
Описать структуру с именем STUDENT, содержащую следующие поля:
- фамилия и инициалы;
- номер группы;
- средний бал
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
- вывод записей упорядоченых по возрастанию номера группы;
- вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0;
- если таких студентов нет, вывести соответствующее сообщение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2009, 01:02     Сортировка массива структур
Посмотрите здесь:

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

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

Сортировка массива структур - C++
Разьясните пожалуйста в как можно поступить по другому. Не выделяя, как у меня дополнительный массив. #include&lt;iostream&gt; const...

Сортировка массива структур - C++
Господа есть массив структур, необходимо его отсортировать по полю name с помощью функции qsort. Вроде как написал без ошибок, но...

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

Сортировка массива структур - C++
Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
24.07.2009, 01:36     Сортировка массива структур #2
Код
sor=&IB[i+1]; 
IB[i+1]=[COLOR="#ff0000"]/*&*/[/COLOR]IB[i]; 
IB[i]=[COLOR="Red"]*[/COLOR]sor;
Но работать будет не корректно.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
24.07.2009, 01:45     Сортировка массива структур #3
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
#include <windows.h>
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
struct student 
{
    char FIO[40];
    int ngr;
    int ocen;
};
 
 
#define MAX_STUDENTS 10
 
void vvod(student *IB);
void sort(student *IB);
void printAvgBall(student *IB);
 
 
void vvod(student *IB)
{
    char z[40];
 
    for(int i=0; i<MAX_STUDENTS; i++)
    {
        cout<<"Фамилия: \n";
        cin.getline(IB[i].FIO,40);
        
        cout<<"Имя: \n";
        cin.getline(z,40);
        IB[i].ngr=atoi(z);
        
        cout<<"Средний балл: \n";
        cin.getline(z,40);
        IB[i].ocen=atoi(z);
     }                
}
 
 
 
 
void sort(student *IB)
{
    student sor;
 
    for(int i=0; i<MAX_STUDENTS-1; i++)
        if(IB[i].ngr>IB[i+1].ngr)
        {
            // меняем местами
            memcpy(&sor, &IB[i+1],   sizeof(student));
            memcpy(&IB[i+1], &IB[i], sizeof(student));
            memcpy(&IB[i], &sor,     sizeof(student));
        }
 
    // выводим на экран     
    for(int i=0; i<MAX_STUDENTS; i++)
        cout<<IB[i].FIO<<"  "<<IB[i].ngr<<"  "<<IB[i].ocen<<endl;
}
 
 
void printAvgBall (student *IB)
{
    cout<<"Студенты, средний бал которыйх более 4.0: \n";
 
    int count = 0; 
 
    for(int i=0; i<MAX_STUDENTS; i++)
        if (IB[i].ocen>4)
            cout<<IB[i].FIO<<"  "<<IB[i].ngr<<"  "<<IB[i].ocen<<endl;
 
    if (!count)
        cout<<"Таких нет. \n";
}
 
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    student *IB=new student[10];
    vvod(IB);
    sort(IB);
    printAvgBall(IB);
 
    delete IB;
}
Замечания по поводу выбранных типов данных в структуре:
C++
1
2
3
4
5
6
struct student 
{
    char FIO[40];
    int ngr;
    int ocen;
};
Для номера группы лучше выбрать тип char[], т.е. строковый тип, а не int.
Для среднего балла лучше использовать float.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.07.2009, 02:52     Сортировка массива структур #4
C++
1
student *sor;
это можно применять, если сортируешь указатели

в твоём случае нужна целая структура
C++
1
student sor;
C++
1
2
3
    sor = IB[i+1]; 
    IB[i+1] = IB[i];
    IB[i] = sor;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2009, 08:10     Сортировка массива структур
Еще ссылки по теме:

Сортировка массива структур - C++
Есть файл с текстом(this is spartaaaaaa!), нужно посчитать количество повторений каждого символа, вывести все это в консоль, затем...

Сортировка массива структур - C++
Привет всем ! как отсортировать массив структур ? а то почему не получается ... вот код #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

Сортировка массива структур - C++
Ругается на использование структуры, соответственно не работает вся программа. Задача: отсортировать массив по типу культур. struct...

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


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

Или воспользуйтесь поиском по форуму:
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
24.07.2009, 08:10     Сортировка массива структур #5
Цитата Сообщение от Lainus Посмотреть сообщение
Сортировка массива структур
обязательно велосипедную функцию sort использовать?
есть библиотечная qsort, которая отлично подойдёт.
Yandex
Объявления
24.07.2009, 08:10     Сортировка массива структур
Ответ Создать тему
Опции темы

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