Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
1

Сортировка по одному из полей в структуре

22.10.2016, 13:30. Просмотров 900. Ответов 6
Метки нет (Все метки)

Задана структуру с именем info, содержащую номер, имя и фамилию, а также дату рождения человека. Надо отсортировать по возрастанию номера телефона. Вопрос такой, со строками мало работал. Не могу присвоить значение одной строки другой внизу кода, где хочу сделать сортировку пузырьком.
Вот код:
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
#include <stdio.h>
#include <locale.h>
 
int main(void)
{
    setlocale(LC_ALL,".1251");
    int s, i, j;
    char *time;
    int const n=3,n1=15;
    printf("Введите кол-во необходимых списков:");
    scanf("%d",&s);
 
    struct
    {
    char name[n1], surname[n1];
    long  int telephone;
    int date_of_birth[n];
    } info[s];
 
    for(i=0;i<s;i++)
        {
        printf("Имя и Фамилия %d-ого человека:\n",i);
        gets(info[i].name);
        gets(info[i].surname);
        printf("Номер %d-ого человека:\n",i);
        scanf("%ld",&info[i].telephone);
 
    printf("Дата рождения %d-ого человека:\n",i);
        for(j=0;j<n;j++){
                switch(j)
                {
                case 0: time="День";  break;
                case 1: time="Месяц"; break;
                case 2: time="Год"; break;
                }
            printf("%s:",time);
            scanf("%d",&info[i].date_of_birth[j]);
        }
        }
        // сортировка по возрастанию телефона человека
        int   temp4;
        long int temp3;
        char temp1,temp2;
        for(i=0;i<s-1;i++){
        for(j=i+1;j<s;j++){
            if(info[i].telephone>info[j].telephone){
 
            temp1=info[i].name;
            temp2=info[i].surname;
            temp3=info[i].telephone;
 
 
            info[i].name=info[j].name;
            info[i].surname=info[j].surname;
            info[i].telephone=info[j].telephone;
 
 
            info[j].name=temp1;
            info[j].surname=temp2;
            info[j].telephone=temp3;
 
        }
        }
        }
        }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2016, 13:30
Ответы с готовыми решениями:

Сортировка массива структур по одному из полей
Задание 1.Описать структуру с именем STUDENT, содержащую следующие поля: • NAME – фамилия и...

Сортировка массива структур по одному из полей по алфавиту
Вечер добрый. Нужна помощь в реализации сортировки массива структур(а точнее, одного поля массива)...

Сортировка структуры по одному из полей методом пузырька
Всем привет! Прошу помочь мне в написании сортировки по опр. полю,например, по марке. Вот...

Сортировка пузырьком массива структур по одному из полей
Помогите сделать символьную сортировку пузырьком для &quot;avtor&quot; , заранее спасибо) #include...

Инициализация полей в структуре
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

6
shvyrevvg
743 / 553 / 277
Регистрация: 12.05.2016
Сообщений: 1,607
22.10.2016, 13:48 2
Michail97, может сами элементы массива менять, а не поля структуры?

Не по теме:

memcpy()

0
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
22.10.2016, 13:58  [ТС] 3
shvyrevvg, да, я уже задолбался с этим.
0
shvyrevvg
743 / 553 / 277
Регистрация: 12.05.2016
Сообщений: 1,607
22.10.2016, 14:09 4
Michail97, у tmp будет тип вашей структуры. И присваивайте сразу tmp = info[i];
0
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
22.10.2016, 14:26  [ТС] 5
shvyrevvg, можете, пожалуйста, написать хотя бы с именем, как это будет выглядеть, а я мысль подхвачу.

Добавлено через 5 минут
shvyrevvg, такой вариант работает, переставляются только номера, но не имена с фамилией
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
       int   temp4;
        long int temp3;
        char temp1,temp2;
        for(i=0;i<s-1;i++){
        for(j=i+1;j<s;j++){
            if(info[i].telephone>info[j].telephone){
 
            temp1=info[i].name[n1];
            temp2=info[i].surname[n1];
            temp3=info[i].telephone;
 
 
            info[i].name[n1]=info[j].name[n1];
            info[i].surname[n1]=info[j].surname[n1];
            info[i].telephone=info[j].telephone;
 
 
            info[j].name[n1]=temp1;
            info[j].surname[n1]=temp2;
            info[j].telephone=temp3;
 
        }
        }
        }
Добавлено через 4 минуты
Мне кажется, надо узнать количество символов в каждой строке, а потом запихнуть вместо n1
0
shvyrevvg
743 / 553 / 277
Регистрация: 12.05.2016
Сообщений: 1,607
22.10.2016, 14:34 6
Лучший ответ Сообщение было отмечено Michail97 как решение

Решение

Michail97, ну добавьте tmp
C
1
2
3
4
5
6
7
8
9
10
    struct
    {
    char name[n1], surname[n1];
    long  int telephone;
    int date_of_birth[n];
    } info[s], tmp;
// и будет так
tmp = info[i];
info[i] = info[j];
info[j] = tmp;
1
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
22.10.2016, 14:40  [ТС] 7
shvyrevvg, всё отлично! Понял. Спасибо большое вам. =)
0
22.10.2016, 14:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2016, 14:40

Порядок следования и смещение полей в структуре языка C
Существует ли в языке C правило, позволяющее чётко и однозначно определить в объявленной структуре...

Сортировка по одному из полей
Здравствуйте! Подскажите, пожалуйста, как сделать сортировку по одному из полей. Никак в голову не...

Сортировка json по одному из полей
привет! можно ли как-то отсортировать json по одному из полей? что бы по возрастанию были...


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

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

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