Сортировка структуры по полю "фамилия" - 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;
}
//---------------------------------------------------------------------------

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы