Лабораторная работа №1
Тема: Структуры. Массивы структур
Цель работы: получить навык работы со структурами и массивами структур языка C.
Ход работы
Рассмотрим пример выполнения программы одного из вариантов индивидуального задания, в которой будут вводиться несколько строк таблицы, образец которой приведен в индивидуальном варианте задания к лабораторной работе (таблица 1) и выводится на экран таблица – сразу же после ввода и после сортировки ее по значениям в первом столбце.
Рис 1.1 Алгоритм решения варианта №25
Алгоритм решения данного варианта начинается с ввода значений элементов этого массива. Ввод происходит в цикле со счетчиком n, который изменяется от 0 до 9 (блок 2), но как видно ниже, выход из цикла может происходить и до того, как счетчик достигнет последнего значения. В каждой итерации циклу выводится приглашение (блок 3) и вводятся значения составных частей описания монастыря (блоки 4, 6, 7, 8). Но сразу, же после ввода первой составляющей - названия - проверяется ее значения (блок 5). Если введено название "***", то дальнейшего ввода не происходит, а сразу выполняется выход из цикла. В любом случае после выхода в переменной n остается количество введенных элементов. Таким образом, программа может обрабатывать массив из 10 или меньше элементов - сколько их было введено. Признаком конца ввода является название "***".
Далее печатаем заголовок таблицы (блок 9) и в цикле (блоки 10, 11) - строки таблицы с данными. Поскольку параметр этого цикла изменяется от 0 до n-1, будет напечатано n строк.
Следующий сложный цикл реализует сортировку таблицы по алгоритму простой обменной выборки. Сортировка выполняется с помощью вложенного цикла (блок 12). В первой итерации внешнего цикла выполняется поиск элемента массива с минимальным значением поля name. Для этого сначала минимальным элементом считается первый элемент (блок 13). Потом в цикле (блок 14) пересматриваются остальные элементы массива, и каждый сравнивается с минимальным значением (блок 15). Если поле name очередного элемента меньше минимального, то теперь этот элемент считается минимальным (блок 16). Индекс минимального элемента записывается в переменную m. После выхода из внутреннего цикла, если найденный минимальный элемент не первый (блок 17), то он меняется местами с первым (блок 18). Таким образом, минимальный элемент массива становится на свое место. В следующей итерации внешнего цикла выполняется поиск минимума среди элементов массива, начиная со второго, в третьей - начиная с третьего и т.д. После выхода из внешнего цикла массив оказывается отсортированным.
Вывод отсортированного массива (блоки 19 - 21) происходит точно так же, как и вывод начального массива (блоки 9 - 11).
Определение переменных программы
Элементом массива является описание объекта. Поскольку описание состоит из нескольких составных частей разного типа, для него используем структуру языка C++. Описание этой структуры будет иметь вид:
struct mon {
char name[15]; /* название */
char sc; /* школа */
int cnt; /* количество монахов */
float sq; /* площадь */
};
Нам нужно будет иметь массив элементов указанного типа, следовательно, объявляем:
struct mon mm[10];
Для выполнения перестановки элементов массива нужна будет еще рабочая область памяти того же типа, что и элементы массива, поэтому вводимо еще:
struct mon x;
Как видно из схемы алгоритма, нужны будут переменные целого типа для: количества введенных элементов n, индексов внешнего (i) и внутреннего (j) циклов и индекса минимального элемента - m. Поэтому объявляем:
int i, j, n, min;