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

Сортировка данных в массиве - C++

Восстановить пароль Регистрация
 
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
19.10.2015, 07:02     Сортировка данных в массиве #1
Такой вопрос: написал прогу по структурам. Вроде код правильный, но при сортировке записи перемешиваются и получается бред. Быть может в коде какой-то косяк?
 Комментарий модератора 
П.5.18.Правил. Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Вложения
Тип файла: rar 5 лаба 1 зад.rar (956 байт, 6 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2015, 07:02     Сортировка данных в массиве
Посмотрите здесь:

C++ сортировка строк в многомерном массиве
сортировка в одномерном массиве C++
сортировка в массиве C++
Сортировка указателей в массиве C++
C++ Сортировка в массиве структур
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
19.10.2015, 09:47     Сортировка данных в массиве #2
MODifikator, а просто запостить код не судьба? Вот так, например:

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
#include <iostream>
#include <math.h>
#include <string.h>
 
/*Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по датам дней рождения;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры;
- если такого нет, выдать на дисплей соответствующее сообщение.*/
 
struct NOTE
    {char fio[30];
     int num;
     int birthday [3];
    };
using namespace std;
main ()
{int i, j, n, nom, o=0;
 NOTE mas[9], tmp;
 char k[120],l[120],b,v;
for (i=0; i<3; i++)   //Ввод данных в массив записей
    {cout <<"Zapis " <<i+1 <<endl;
    cout <<"FIO " <<endl;
    cin >>mas[i].fio;
    cout <<"Nomer telefona " <<endl;
    cin >>mas[i].num;
    cout <<"Den rozhdeniya " <<endl;
    cout <<"God ";
    cin >>mas[i].birthday[0];
    cout <<"Mesyac ";
    cin >>mas[i].birthday[1];
    cout <<"Den ";
    cin >>mas[i].birthday[2];
    }
//сортировка началась
for (i=0; i<3; i++) //Сортировка по году
    for (j=1; j<3; j++)     
    {if (mas[i].birthday[0]>mas[j].birthday[0])
    tmp=mas[i];
    mas[i]=mas[j];
    mas[j]=tmp;
    cout<<mas[i].birthday[0] <<mas[i].birthday[1] <<mas[i].birthday[2] <<mas[i].fio <<mas[i].num <<endl;
}
//сортировка закончилась
for (i=0; i<3; i++) //Вывод отсортированых данных на экран
    {cout <<mas[i].fio <<endl;
    cout <<mas[i].num <<endl;
    cout <<mas[i].birthday[0] <<"." <<mas[i].birthday[1] <<"." <<mas[i].birthday[2] <<endl;
}
cout <<"Vvedite nomer telefona "; //Поиск по номеру телефона
cin >>nom;
for (i=0; i<3; i++)
    {if (mas[i].num==nom) 
    {cout <<"Zapis " <<i+1 <<endl;
     cout <<"FIO " <<mas[i].fio <<endl;
     cout <<"Nomer telefona " <<mas[i].num <<endl;
     cout <<"Den rozhdeniya " <<mas[i].birthday[2] <<"." <<mas[i].birthday[1] <<"." <<mas[i].birthday[0] <<endl;
     o=1;
    } 
} 
if (o==0) cout <<"Takogo nomera net. ";
return 0;
}
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
19.10.2015, 09:52     Сортировка данных в массиве #3
Это не сортировка. Здесь ознакомься как надо сортировать: Алгоритмы сортировок
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
21.10.2015, 19:43  [ТС]     Сортировка данных в массиве #4
Цитата Сообщение от gru74ik Посмотреть сообщение
MODifikator, а просто запостить код не судьба? Вот так, например:
и что это поменяет? ответа нет, программа выводит какую-то дичь вместо адекватных данных. не работает только сортировка
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
21.10.2015, 20:16     Сортировка данных в массиве #5
Цитата Сообщение от MODifikator Посмотреть сообщение
и что это поменяет?
MODifikator, поменяет то, что код станет возможно прочитать. Мало кому охота качать себе какой-то там архив и что-то там смотреть.

Цитата Сообщение от MODifikator Посмотреть сообщение
не работает только сортировка
Воспользуйтесь библиотечной std::sort(). Или Вам обязательно свою собственную сортировку писать?
Dimension
Dimension
547 / 428 / 132
Регистрация: 08.04.2014
Сообщений: 1,693
Завершенные тесты: 1
21.10.2015, 20:22     Сортировка данных в массиве #6
фамилий и имена вместе в годом переставляйте тоже в сортировке
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
21.10.2015, 22:59     Сортировка данных в массиве #7
MODifikator, вот так сойдёт?

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
/*
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE;
  записи должны быть упорядочены по датам дней рождения;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры;
- если такого нет, выдать на дисплей соответствующее сообщение.
*/
 
#include <iostream>
#include <string>
 
using namespace std;
 
const int SZ = 3;
 
struct NOTE
{
    string fio;
    long long num;
    int birthday[SZ];
};
 
void show(const NOTE & n);
 
int main()
{
    const int arrSize = 8;
    NOTE arr[arrSize];
 
    for (int i = 0; i < arrSize; i++)   //Ввод данных в массив записей
    {
        cout << "Entry " << i+1 << ".\n";
        cout << "Enter full name: ";
        getline(cin, arr[i].fio);
 
        cout << "Enter phone number: ";
        cin >> arr[i].num;
 
        cout << "Enter date of birth:\n";
        cout << "Year: ";
        cin >> arr[i].birthday[0];
 
        cout << "Month: ";
        cin >> arr[i].birthday[1];
 
        cout << "Day: ";
        cin >> arr[i].birthday[2];
 
        cout << "\n\n";
        while ( cin.get() != '\n' )
        {}
    }
 
    NOTE tmp;
    for (int i = 0, j = 1; i < arrSize-1; i++, j++) //Сортировка по году
    {
        if (arr[i].birthday[0] > arr[j].birthday[0])
        {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    } //сортировка закончилась
 
    for (int i = 0; i < arrSize; i++)
        show(arr[i]);  //Вывод отсортированых данных на экран
 
    cout << "Enter phone number: "; //Поиск по номеру телефона
    long long phone_number;
    cin >> phone_number;
 
    bool number_not_exists = true;
    for (int i = 0; i < arrSize; i++)
    {
        if (arr[i].num == phone_number)
        {
            cout << "\n\nThis phone number was found in database:\n";
            show(arr[i]);
            number_not_exists = false;
            break;
        }
        else
            number_not_exists = true;
    }
 
    if (number_not_exists)
        cout << "\nThis phone number is not exists.";
 
    return 0;
}
 
void show(const NOTE & n)
{
    cout << n.birthday[0] << "."
         << n.birthday[1] << "."
         << n.birthday[2] << ".\n"
         << n.fio << "\n"
         << n.num<< "\n\n";
}
Добавлено через 44 минуты
Блин, с сортировкой всё-таки какая-то фигня получается. Ладно, сегодня уже поздно. Завтра постараюсь нормально доделать.
Dimension
Dimension
547 / 428 / 132
Регистрация: 08.04.2014
Сообщений: 1,693
Завершенные тесты: 1
21.10.2015, 23:28     Сортировка данных в массиве #8
так
C++
1
2
3
4
for (int i = 0;i < arrSize - 1;i++)
        for (int j = 0;j < arrSize - i - 1;j++) 
            if (arr[j].birthday[0]>arr[j + 1].birthday[0])
                swap(arr[j], arr[j + 1]);
или так
C++
1
sort(arr, arr + arrSize, [](NOTE const&x, NOTE const&y) {return x.birthday[0] < y.birthday[0];});
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
25.10.2015, 20:28  [ТС]     Сортировка данных в массиве #9
Всё бы хорошо, но преподаватель придирается к командам, которые мы ещё не проходили, и она мне разрешила сдать лабу без сортировки. Так что спасибо за потраченное время
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 19:29     Сортировка данных в массиве
Еще ссылки по теме:

Сортировка в массиве C++
C++ Сортировка строк в массиве
Сортировка слов в массиве C++

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
 Аватар для gru74ik
2999 / 1312 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
03.11.2015, 19:29     Сортировка данных в массиве #10
Цитата Сообщение от MODifikator Посмотреть сообщение
и она
Всё понятно.
Yandex
Объявления
03.11.2015, 19:29     Сортировка данных в массиве
Ответ Создать тему
Опции темы

Текущее время: 01:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru