Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке - C (СИ)
Формулировка задачи:
С клавиатуры ввести набор данных в форме структур, содержащих информацию о читателях библиотеки: <Фамилия, инициалы>, <Год рождения>, <Пол>, <Адрес>. Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке.
Ничего больше в голову не лезет, помогите пожалуйста
Сортировка по алфавиту(кусок программы):
typedef struct LIBRARY { char name[30]; int birth; char gender; char address[30]; } mytype; mytype reader[N]; //k - количество введенных структур int Sort (void) { int i, j, code; mytype *p1, *p2, temp; for (i=0; i<k-1; i++) { p1=reader; p2=reader+1; for (j=1; j<k-i; j++) { code=strcmp(p1->name, p2->name); if (code>0) { temp=*p1; *p1=*p2; *p2=temp; } p1++; p2++; } } return 0; }
Полный текст программы:
#include <stdio.h> #include <iostream> #define N 30 int InputAmount (void); int InputStruct (void); int OutputStruct (void); int Sort (void); int k; typedef struct LIBRARY { char name[30]; int birth; char gender; char address[30]; } mytype; mytype reader[N]; int main(int) { setlocale(0,""); InputAmount(); InputStruct(); puts("============================================================================"); puts("|| List of readers: ||"); OutputStruct(); Sort(); puts("============================================================================"); puts("|| Sort list of readers: ||"); OutputStruct(); puts("|| ||"); puts("============================================================================"); system("pause"); return 0; } int InputAmount (void) { for ( ; ; ) { printf("Enter the amount of readers: "); if (scanf_s("%d", &k)==0) { printf ("\nIncorrect input! Enter the number, not a letter (symbol)! \n \n"); fflush(stdin); continue; } if (k<0) { printf("\nNumber of readers must be greater than 0! \n \n"); fflush(stdin); } else break; } puts(""); fflush(stdin); return k; } int InputStruct (void) { int i; for(i=0; i<k; i++) { printf("\nName and Surname of reader: "); gets_s(reader[i].name); fflush(stdin); printf("Year of birth: "); scanf_s("%d",&reader[i].birth); fflush(stdin); printf("Gender (m/f): "); scanf("%c", &reader[i].gender); fflush(stdin); printf("Address: "); gets_s(reader[i].address); fflush(stdin); puts(""); } fflush(stdin); system("cls"); return 0; } int OutputStruct (void) { int i; puts("|| ||"); printf("|| The reader's name: Birth: Gender: Address: ||\n"); for(i=0; i<k; i++) printf("|| %-22s %-5d %-10c %18s ||\n", reader[i].name, reader[i].birth, reader[i].gender, reader[i].address); puts("|| ||"); puts("============================================================================"); return 0; } int Sort (void) { int i, j, code; mytype *p1, *p2, temp; for (i=0; i<k-1; i++) { p1=reader; p2=reader+1; for (j=1; j<k-i; j++) { code=strcmp(p1->name, p2->name); if (code>0) { temp=*p1; *p1=*p2; *p2=temp; } p1++; p2++; } } return 0; }
Пробовала переделать на такую функцию (сравнивала буквы, очень подозрительно, выдает ошибку):
int NewSort (void) { int i, j, k, r; mytype temp, *str1, *str2; str1=reader; str2=reader+1; for (i=0; *reader[i].name!='0'; i++) { k=strlen(str1->name); r=strlen(str2->name); for (j=0; j<k || j<r; j++) { if ((str1->name[j])>(str2->name[j])) { temp=*str1; *str1=*str2; *str2=temp; break; } if ((str1->name[j])<(str2->name[j])) break; } str1++; str2=str1+1; } return 0; }
Решение задачи: «Распечатать введенные данные в виде таблицы, отсортировав их по фамилиям читателей в алфавитном порядке»
textual
Листинг программы
#include <stdlib.h> int cmp(const mytype *r1, const mytype *r2); int main(void) { ... qsort(reader, k*sizeof(reader[0]), sizeof(reader[0]), cmp); ... } int cmp(const mytype *r1, const mytype *r2) { return strcmp(r1->name, r2->name); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем функцию сортировки, которая будет использоваться для сортировки данных
- В функции main() создаем массив reader типа mytype и инициализируем его данными о читателях
- Используем функцию qsort() для сортировки массива reader по функции сравнения cmp()
- В функции cmp() сравниваем поля name массива mytype
- Возвращаем результат сравнения
- В функции main() продолжаем работу с отсортированным массивом reader
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д