Сортировка структуры по полю "фамилия" - C (СИ)
Формулировка задачи:
Нужно отсортировать структуру. Не знаю как это сделать, помогите пожалуйста! Сортировка по фамилии, то есть Фамилии в алфавитном порядке.
Вот программка без сортировки
Пробовала так отсортировать но там ошибки
//--------------------------------------------------------------------------- #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; } //---------------------------------------------------------------------------
//--------------------------------------------------------------------------- #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; } //---------------------------------------------------------------------------
Решение задачи: «Сортировка структуры по полю "фамилия"»
textual
Листинг программы
//--------------------------------------------------------------------------- #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; } //---------------------------------------------------------------------------
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д