Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
anna!
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 46
1

Сортировка структуры по полю "фамилия"

18.06.2013, 22:00. Просмотров 566. Ответов 2
Метки нет (Все метки)

Нужно отсортировать структуру. Не знаю как это сделать, помогите пожалуйста! Сортировка по фамилии, то есть Фамилии в алфавитном порядке.
Вот программка без сортировки
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
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
struct Student
{   char Full_Name[50];
    int Day;
    int Month;
    int Year;
    char Group[10];
    //char d;
};
int main(){
char Spisok[3]  ;
char tmp1[50];
char tmp3[10];
int i,j,tmp2,tmp5,tmp4;
struct Student St[100];
for (i = 1; i <=3; i++) {
    printf("vvod svedeniy o %d studente\n",i);
    printf ("vvedite fio studenta ");
scanf("%s",St[i].Full_Name);
printf("Vvedite den rozdeniya studenta ");
scanf("%d",&St[i].Day);
printf("Vvedite mesyac rozdeniya studenta ");
scanf("%d",&St[i].Month);
printf("Vvedite god rozdeniya studenta ");
scanf("%d",&St[i].Year);
printf("Vvedite gruppu studenta ");
scanf("%s",St[i].Group);
    }
 
printf("Neotsortirovanny massiv studentov\n");
for (i=1;i<=3;i++) {
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
   }
printf("Otsortirovanny massiv studentov\n");
 
for (i=1;i<=3;i++){
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);      }
getch();
return 0;
}
//---------------------------------------------------------------------------
Пробовала так отсортировать но там ошибки
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
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
struct Student
{   char Full_Name[50];
    int Day;
    int Month;
    int Year;
    char Group[10];
    //char d;
};
int main(){
char Spisok[3]  ;
char tmp1[50];
char tmp3[10];
int i,j,tmp2,tmp5,tmp4;
struct Student St[100];
for (i = 1; i <=3; i++) {
    printf("vvod svedeniy o %d studente\n",i);
    printf ("vvedite fio studenta ");
scanf("%s",St[i].Full_Name);
printf("Vvedite den rozdeniya studenta ");
scanf("%d",&St[i].Day);
printf("Vvedite mesyac rozdeniya studenta ");
scanf("%d",&St[i].Month);
printf("Vvedite god rozdeniya studenta ");
scanf("%d",&St[i].Year);
printf("Vvedite gruppu studenta ");
scanf("%s",St[i].Group);
    }
 
printf("Neotsortirovanny massiv studentov\n");
for (i=1;i<=3;i++) {
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
   }
printf("Otsortirovanny massiv studentov\n");
for (i = 0; i <=3; i++) {
 for (j = 0; j <=3-i-1; j++) {
  if (St[j].Full_Name>St[j+1].Full_Name) {
  tmp1=St[j].Full_Name;
  tmp4=St[j].Day;
  tmp5=St[i].Month;
  tmp2=St[j].Year;
  tmp3=St[j].Group;
  St[j].Full_Name=St[j+1].Full_Name;
   St[j].Day=air[j+1].Day;
   St[j].Month=air[j+1].Month;
   St[j].Year=air[j+1].Year;
   St[j].Group=air[j+1].Group;
  St[j+1].Full_Name=tmp1;
  St[j+1].Day=tmp4;
  St[j+1].Month=tmp5;
  St[j+1].Year=tmp2;
  St[j+1].Group=tmp3;
  }
 }
}
for (i=1;i<=3;i++){
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);      }
getch();
return 0;
}
//---------------------------------------------------------------------------
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 22:00
Ответы с готовыми решениями:

Динамическая структура - Сортировка по полю "Население"
Помогите с сортировкой по полю Население. Вот код: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Сортировка подсчетом и ошибка "Невозможно преобразовать "void*" в "int*"
Мне нужно отсортировать одномерный массив с помощью алгоритма сортировки, однако возникает ошибка...

Структуры. Распечатать анкетные данные студентов, обучающихся на "4" и "5"
Распечатать анкетные данные студентов, обучающихся на &quot;4&quot; и &quot;5&quot;. Заранее спасибо.

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись &quot;Двигатель&quot;, которая содержит элементы &quot;Название&quot;, &quot;Мощность&quot;, &quot;Скорость&quot;,...

Сортировка структуры по полю double
Доброе утро! Написал программу.. вот: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include...

2
xanderfomin
40 / 37 / 15
Регистрация: 25.10.2012
Сообщений: 112
18.06.2013, 22:23 2
anna!, напиши функцию сравнения для двух строк, содержащих фамилии, и используй qsort.
0
СашаН
345 / 296 / 163
Регистрация: 15.03.2012
Сообщений: 647
Записей в блоге: 1
19.06.2013, 00:19 3
Индексация в Си, с нуля начинается.
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
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
#define NUM 4
struct Student
{   char Full_Name[50];
    int Day;
    int Month;
    int Year;
    char Group[10];
};
 
void insert(struct Student *St, int n)
{
   int i, j;
   struct Student temp;
   
   for (i=1; i<n; ++i) {
      temp = St[i];
      for (j=i-1; (j>=0) && (strcmp(temp.Full_Name, St[j].Full_Name)<0); j--)
         St[j+1] = St[j];
      St[j+1] = temp;
   }
}
 
int main(void)
{
   char Spisok[3]  ;
   char tmp1[50];
   char tmp3[10];
   int i,j,tmp2,tmp5,tmp4;
   struct Student St[100];
   for (i = 0; i<NUM; i++) {
      printf("vvod svedeniy o %d studente\n",i+1);
      printf ("vvedite fio studenta ");
      scanf("%s",St[i].Full_Name);
      printf("Vvedite den rozdeniya studenta ");
      scanf("%d",&St[i].Day);
      printf("Vvedite mesyac rozdeniya studenta ");
      scanf("%d",&St[i].Month);
      printf("Vvedite god rozdeniya studenta ");
      scanf("%d",&St[i].Year);
      printf("Vvedite gruppu studenta ");
      scanf("%s",St[i].Group);
   }
 
   printf("Neotsortirovanny massiv studentov\n");
   for (i=0; i<NUM; i++) {
      printf("%s %d/%d/%d %s\n",St[i].Full_Name,
      St[i].Day,St[i].Month,St[i].Year,
      St[i].Group);
   }
 
   printf("Otsortirovanny massiv studentov\n");
   insert(St, NUM);
   for (i=0; i<NUM; i++){
      printf("%s %d/%d/%d %s\n",St[i].Full_Name,
      St[i].Day,St[i].Month,St[i].Year,
      St[i].Group);
   }
   getch();
   return 0;
}
//---------------------------------------------------------------------------
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2013, 00:19

Сортировка структуры по полю char
Есть структура struct AeroFlot { char* destination; char* tip; int nomer; int...

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

Преобразовать имя, отчество и фамилию человека к форме "фамилия, инициалы"
Напишите программу, которая преобразует строку, содержащую имя, отчество и фамилию человека, к...


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

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

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