Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,552
#1

Сортировка структуры по полю - C++

26.11.2013, 14:17. Просмотров 652. Ответов 6
Метки нет (Все метки)

Есть структура типа СТУДЕНТ с полями:
*фио
*группа
*массив из пяти чисел (оценки)
Необходимо отсортировать структуру по возрастанию поля группа, выбрал самый простой метод клубок. В самом начале кода вылетает ошибка L-Value required.

C++
1
t1 = data[i].fio;
t1 и поле fio имеют тип char

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
#pragma hdrstop
#pragma argsused
#include <iostream.h>
 
void main()
{
struct student
{char fio[10];
int group;
int ocenki[5];
};
student data[5];
int i,j,t2,t3,t4,t5,t6,t7;
char t1;
//---------------------------------------------
for (i = 0; i < 5; i++) {   //vvod dannyh structury
cin>>data[i].fio;
cin>>data[i].group;
for (j = 0; j < 5; j++) {
cout<<"Ocenka #"<<j+1;cin>>data[i].ocenki[j];
}
}
//---------------------------------------------
//sortirovka dannyh po polu ocenok
/*for (i=0;i<5; i++)
if (data[i].group<data[i+1].group)
{
t1 = data[i].fio;
t2=data[i].group;
   for (j=0;j<5;j++) {
   t3=data[i].ocenki[j];
   t4=data[i].ocenki[j+1];
   t5=data[i].ocenki[j+2];
   t6=data[i].ocenki[j+3];
   t7=data[i].ocenki[j+4];}
   //------------------------
   data[i].fio=data[i+1].fio;
   data[i].group=data[i+1].group;
   for (j=0;j<5;j++) {
   data[i].ocenki[j]=data[i+1].ocenki[j];
   data[i].ocenki[j+1]=data[i+1].ocenki[j+1];
   data[i].ocenki[j+2]=data[i+1].ocenki[j+2];
   data[i].ocenki[j+3]=data[i+1].ocenki[j+3];
   data[i].ocenki[j+4];data[i+1].ocenki[j+4];}
 
 
} */
//---------------------------------------------
for (i = 0; i < 5; i++)  //prostoi vyvod dannyh structury
{
cout<<data[i].fio<<" "<<data[i].group<<" ";
for (j=0;j<5;j++)
{
cout<<data[i].ocenki[j]<<" ";
}
cout<<"\n";
}
//---------------------------------------------
cin>>" ";
}
Вопрос- в чем моя ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 14:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка структуры по полю (C++):

Сортировка по полю структуры - C++
Всем привет,есть следующие задание заполнить информацию о студентах группы,а потом отсортировать по парням и девушкам,но почему то мой if...

Сортировка по заданному полю структуры - C++
Вот моя программа... не могу понять почему не работает сортировка по дате... #include&lt;locale.h&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; ...

Сортировка пузырьком по полю структуры - C++
Проверьте весь код и главная проблема печатает одни нули #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

Сортировка по структуры по полю ФИО - C++
О ГУРУ программирования! Помогите мне решить задачу. Нужно отсортировать структуру по полю FIO. Но неведомые силы не дают это мне сделать....

Запись и чтение структуры из файлов, сортировка по полю - C++
у меня есть 2 проги в одной создается файл а в другой обработка #include &lt;cstdio&gt; const char fileName =...

Сортировка посредством пирамиды структуры "Отдел" по заданному полю - C++
Нужно отсортировать структуру по году. Год то сортируется, но никак не сохраняется другая информация соответственно ему. Что-то незнаю...

6
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 14:35 #2
Supernatural,
C++
t1 = data [ i ]. fio ;
левая часть (lvalue) - символ.
правая часть (rvalue) - строка символов.
Вам надо изменить левую часть на указатель на строку.
1
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,552
26.11.2013, 16:29  [ТС] #3
есть такое, поменял тип char на string и вроде решилась проблема. Не сразу догадался

Добавлено через 1 час 0 минут
data[i].fio=data[i+1].fio; здесь такая же история, в чем не правда?
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 17:33 #4
Supernatural, делайте вот так:
C++
#include <iostream>
#include <string.h>
using namespace std;
 
struct student
{
    char fio[32];
};
 
int main()
{
    char t1[32];
 
    student data[5];
    
    cin >> data[0].fio;
    cin >> data[1].fio;
    
    cout << "было:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
        
    // поменяем местами
    strcpy(t1, data[0].fio);          // из дата[0].фио в т1
    strcpy(data[0].fio, data[1].fio); // из дата[1].фио в дата[0].фио
    strcpy(data[1].fio, t1);          // из т1 в дата[1].фио
    
    cout << endl;
            
    cout << "стало:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
}
Добавлено через 4 минуты
Если вам нужны стринги, то вот так:
C++
#include <iostream>
#include <string> // string и string.h - разные вещи, не путайте.
using namespace std;
 
struct student
{
    string fio;
};
 
int main()
{
    string t1;
 
    student data[5];
    
    cin >> data[0].fio;
    cin >> data[1].fio;
    
    cout << "было:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
        
    // поменяем местами
    t1 = data[0].fio;          // из дата[0].фио в т1
    data[0].fio = data[1].fio; // из дата[1].фио в дата[0].фио
    data[1].fio = t1;          // из т1 в дата[1].фио
    
    cout << endl;
            
    cout << "стало:" << endl;
    cout << data[0].fio << " " << data[1].fio << endl;
}
Добавлено через 1 минуту
При присваивании (=) типы левого и правого операнда должны быть одинаковыми.
0
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,552
26.11.2013, 17:38  [ТС] #5
да в том и дело, что поле фио везде одинаковые, однако компилятор со мной все равно не соглашается
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.11.2013, 18:10 #6
Цитата Сообщение от Supernatural Посмотреть сообщение
да в том и дело, что поле фио везде одинаковые, однако компилятор со мной все равно не соглашается
что говорит?

Добавлено через 2 минуты
Только сейчас прочитала задание:
Необходимо отсортировать структуру по возрастанию поля группа
Cпрашивается, а при чем здесь fio ???

Добавлено через 17 минут
Supernatural, вот вам полная программа. За вами плитка шоколада.
C++
#include <iostream>
#include <string>
using namespace std;
 
struct student
{
    string fio;
    int group;
    int ocenka;
};
 
int main()
{
    student data[5];
    
    for(int i = 0; i < 5; i++)
    {
        cout << "Введите фио студента:";
        cin >> data[i].fio;
        cout << "Введите номер группы:";
        cin >> data[i].group;
        cout << "Введите оценку:";
        cin >> data[i].ocenka;
    }
    
    student tmp;
 
    for(int i = 0; i < 5 - 1; i++)
    {
        for(int j = i + 1; j < 5; j++)
        {
            if (data[i].group > data[j].group)
            {
                tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
        }
    }
    
    for(int i = 0; i < 5; i++)
    {
        cout << i << ") студент " << data[i].fio << " состоит в группе " << data[i].group << endl;
    }
}
2
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,552
26.11.2013, 20:46  [ТС] #7
не совсем так как представлял
p.s. кнопки спасибо конечно мало
0
26.11.2013, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 20:46
Привет! Вот еще темы с ответами:

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

Поиск по любому полю структуры - C++
Нужно сделать поиск по любому полю структуры(Имя, фамилия или дата рождения) Вот собственно код самой структуры: #include &lt;stdio.h&gt; ...

Удаление структуры по определенному полю. - C++
Я сделал удаление элемента после заданного. Например я ввожу значение, если оно совпадает с колличеством, то следующая запись удаляется. ...

Отсортировать структуры по полю union - C++
Ребят, дали вот задание. Сделать структуру, у которой одна переменная объединенного типа (union). Потом отсортировать структуры по...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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