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

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

Войти
Регистрация
Восстановить пароль
 
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
#1

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

19.10.2015, 07:02. Просмотров 266. Ответов 9
Метки нет (Все метки)

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

Сортировка в массиве - C++
Добрый день,прошу помощи с заданием. Дан массив из n целых чисел. Упорядочить массив таким образом, чтобы вначале шли положительные...

Чтение из файла определённого места и сортировка данных исходя из этих данных - C++
Есть некий текстовый документ, содержащий информацию о посещении сайта в формате: Например 12.5.76.200 04:23 Mon Цель:...

Сортировка в массиве структур - C++
Здравствуйте . Вот я создаю структуру: struct Data //описываемая структура { int m; int year; int day; }; в...

Сортировка указателей в массиве - C++
Выполните сортировку данных по алфавиту (по фамилии) - причем сортировать потребуется только указатели в массиве. Выведите...

Сортировка слов в массиве - C++
Необходимо отсортировать слова в массиве типа char, ну или string, если так будет проще. Заранее благодарю!

Сортировка диагоналей в массиве - C++
Прога крашиться, и не могу понять почему. Надо отсортировать гл. диагональ в массиве и параллельные ей по-отдельности. #include...

9
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
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;
}
0
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
19.10.2015, 09:52 #3
Это не сортировка. Здесь ознакомься как надо сортировать: Алгоритмы сортировок
0
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
21.10.2015, 19:43  [ТС] #4
Цитата Сообщение от gru74ik Посмотреть сообщение
MODifikator, а просто запостить код не судьба? Вот так, например:
и что это поменяет? ответа нет, программа выводит какую-то дичь вместо адекватных данных. не работает только сортировка
0
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
21.10.2015, 20:16 #5
Цитата Сообщение от MODifikator Посмотреть сообщение
и что это поменяет?
MODifikator, поменяет то, что код станет возможно прочитать. Мало кому охота качать себе какой-то там архив и что-то там смотреть.

Цитата Сообщение от MODifikator Посмотреть сообщение
не работает только сортировка
Воспользуйтесь библиотечной std::sort(). Или Вам обязательно свою собственную сортировку писать?
0
Dimension
Dimension
569 / 438 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
21.10.2015, 20:22 #6
фамилий и имена вместе в годом переставляйте тоже в сортировке
0
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
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 минуты
Блин, с сортировкой всё-таки какая-то фигня получается. Ладно, сегодня уже поздно. Завтра постараюсь нормально доделать.
0
Dimension
Dimension
569 / 438 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 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];});
0
MODifikator
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 92
25.10.2015, 20:28  [ТС] #9
Всё бы хорошо, но преподаватель придирается к командам, которые мы ещё не проходили, и она мне разрешила сдать лабу без сортировки. Так что спасибо за потраченное время
0
gru74ik
Модератор
Эксперт CЭксперт С++
4196 / 1844 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
03.11.2015, 19:29 #10
Цитата Сообщение от MODifikator Посмотреть сообщение
и она
Всё понятно.
0
03.11.2015, 19:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 19:29
Привет! Вот еще темы с ответами:

Сортировка строк в массиве - C++
Помогите написать код! никак не получаться! Дана целочисленная матрица A. Получить целочисленную матрицу B путем упорядочивания строк...

Сортировка и двоичный поиск в массиве. - C++
Помогите чайнику изменить следующий код: // F_08_L_2.cpp: определяет точку входа для консольного приложения. // #include...

Сортировка столбцов в двумерном массиве - C++
{ int a; int row, col; int i, j; printf( &quot;Enter sizes of matrix: \n&quot; ); ...

Сортировка строк в многомерном массиве - C++
Как отсортировать елемни строк в многомерном массиве по возростанию или по спаданию? На Си


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

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

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