Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9

Сортировка массива структур

24.07.2009, 01:02. Показов 1806. Ответов 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;
- если таких студентов нет, вывести соответствующее сообщение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2009, 01:02
Ответы с готовыми решениями:

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

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

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

4
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
24.07.2009, 01:36
Code
1
2
3
sor=&IB[i+1]; 
IB[i+1]=[COLOR="#ff0000"]/*&*/[/COLOR]IB[i]; 
IB[i]=[COLOR="Red"]*[/COLOR]sor;
Но работать будет не корректно.
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
24.07.2009, 01:45
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.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.07.2009, 02:52
C++
1
student *sor;
это можно применять, если сортируешь указатели

в твоём случае нужна целая структура
C++
1
student sor;
C++
1
2
3
    sor = IB[i+1]; 
    IB[i+1] = IB[i];
    IB[i] = sor;
1
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
24.07.2009, 08:10
Цитата Сообщение от Lainus Посмотреть сообщение
Сортировка массива структур
обязательно велосипедную функцию sort использовать?
есть библиотечная qsort, которая отлично подойдёт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2009, 08:10
Помогаю со студенческими работами здесь

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

Сортировка массива структур
Всем привет. Есть структура.Часть задания я сделал , файл создан , сведения о пациентах вводятся с клавиатуры , корректировка записей...

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

Сортировка массива структур
Не сортирует массив структур, помогите, пожалуйста, найти ошибку. #include &lt;iostream&gt; #include &quot;stdio.h&quot; using...

Сортировка массива структур
Составить список студентов группы, включив следующие данные: Ф.И.О., число, месяц и год рождения. Переставить записи студентов по возрасту


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru