реальные информационные объекты (человек, книги, приборы, машины и т. д.) характеризуются многими параметрами.
Пример решения варианта задания :
Личное дело студентов характеризуется пунктами: фамилия, пол и номер курса. Отсортировать список студентов по алфавиту. Список студентов занесен в текстовый файл.
Анализ задачи.
1. Начальные данные:
а) новый тип переменной styd, которая является струк-
турой;
б) константа n, которая определяет число студентов в
списке;
в) переменная i, j для параметров цикла; г) указатель на файл;
д) массив структур типа styd;
е) переменная st типа styd для промежуточных резуль татов преобразований;
ж) текстовый файл со списком студентов. Структура файла следующее: для каждой характеристики студента отводится строка. Характеристики студентов отделены друг от друга пустой строкой.
2. Составляем программу ввода в массив структур данных из текстового файла.
const n = 10; struct styd
{
сhar fam[60]; char pol; float ves;
};
void main()
14
{
FILE *f1;
styd sp[n], sp1; int i;
clrscr();
f1 = fopen("spis.dat","r"); for ( i = 0; i < n; i++)
{
fscanf(f1,"%s\n",&sp[i].fam);
fscanf(f1,"%c\n",&sp[i].pol);
fscanf(f1,"%f\n",&sp1.ves);
fscanf(f1,"%f\n",&sp[i].ves); fscanf(f1, "\n");
printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n"); }
fclose(f1); getch(); }
Сортировка массива слов по алфавиту реализуется следующим фрагментом:
for ( i = 0; i < n-1; i++) { im = i;
for ( j = i+1; j < n; j++)
if ( strcmp( sp[im], sp[j]) > 0) im = j; strcpy(sr, sp[i]);
strcpy(sp[i] , sp[im]); strcpy(sp[im], sr); }
15
Здесь sp[n] – массив слов, sr – строка для промежуточных результатов преобразования. Сортировка массива структур реализуется следующим фрагментом.
for ( i = 0; i < n-1; i++) { im = i;
for ( j = i+1; j < n; j++)
if ( strcmp( sp[im].fam, sp[j].fam) > 0) im = j; sr = sp[i];
sp[i] = sp[im]; sp[im] = sr; }
Сравнение фрагментов показывает, что принципиальной разницы сортировки массива строк и массива структур по алфавиту нет. Просто элементы массива слов заменяются на элементы полей структур.
Фактически решение любых задач для массива структур алгоритмически ничем не отличается от решения подобных задач для массивов. И если поставлена задача для структуры, ее можно смело решать для массива, а затем там, где это надо, значение элементов массива заменить на соответствующие поля структуры. Приведем окончательный вариант программы решения поставленной задачи.
const n = 5; struct styd
{
char fam[60]; char pol; float ves;
}; void main() FILE *f1;
styd sp[n], sp1;
16
int i,j, im; clrscr();
cout << "\t\tДо сортировки:\n\n"; for ( i = 0; i < n; i++)
{
fscanf(f1,"%s\n",&sp[i].fam);
fscanf(f1,"%c\n",&sp[i].pol);
fscanf(f1,"%f\n",&sp[i].ves); fscanf(f1, "\n"); printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n");
}
getch();
clrscr();
for ( i = 0; i < n-1; i++)
{
im = i;
for ( j = i+1; j < n; j++)
if ( strcmp( sp[im].fam, sp[j].fam) > 0) im = j; sp1 = sp[i];
sp[i] = sp[im]; sp[im] = sp1;
}
cout << "\t\tПосле сортировки:\n\n"; for ( i = 0; i < n; i++)
{ printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n"); }
fclose(f1); getch(); }
17
Лабораторная работа №3 Односвязные списки
Цель работы – овладеть практическими навыками работы с односвязными списками. Научиться формировать списки, освоить технику программирования операций над списками.
Задания:
1. Изучить:
а) способы формирования списка; б) операции над списками: удалить элемент из списка;
добавить элемент в список, найти элемент в списке; способы вывода списка;
в) связный список стек, операции на стеке; г) связный список очередь, операции на очереди.
2.Разработать алгоритм решения в соответствии с за-
данием.
3.Составить программу решения задачи.
4.Отладить программу.
Контрольные вопросы :
Все вопросы в данном пункте рассматриваются для списка, элементами которого являются следующего объекты:
struct zvn { int inf; zvn *nx;}
1.Как определить объект для списка, элементами которого являются числа.
2.Как определить объект для списка, элементами которого являются слова.
3.Как определить объект для списка, элементами которого являются указатели.
18