Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиП -Лабораторная_работа_1_2семестр.doc
Скачиваний:
1
Добавлен:
13.09.2019
Размер:
210.94 Кб
Скачать

Лабораторная работа №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;