- •Основные сведения
- •Ввод и вывод данных через потоки
- •Описание функций математического модуля math
- •Модуль random
- •Лабораторная работа №1 Выполнение программы простой структуры. Вычисление выражений с использованием стандартных функций
- •Варианты
- •Лабораторная работа №2
- •Варианты
- •Лабораторная работа №3
- •Лабораторная работа №4 Работа с одномерными массивами
- •Сортировка массивов
- •Сортировка методом пузырьков (метод простого обмена)
- •Сортировка методом вставок
- •Сортировка методом простого выбора
- •Постановка задачи
- •Варианты
- •Лабораторная работа №5
- •Постановка задачи
- •Варианты
- •Методические указания
- •Лабораторная работа №6 Динамические массивы
- •Постановка задачи
- •Варианты
- •Лабораторная работа №7
- •Постановка задачи
- •Варианты
- •Лабораторная работа №8 Хранение данных на внешних носителях
- •Определение конца файла
- •Закрытие файла, если он больше не нужен
- •Ввод/вывод данных с помощью функций унаследованных от с
- •Постановка задачи
Лабораторная работа №4 Работа с одномерными массивами
Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве. Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы. Массивы определяются следующим образом:
int a[100];//массив из 100 элементов целого типа
Важно помнить Элементы массива нумеруются с нуля!!!
45 |
352 |
63 |
|
124 |
значения элементов массива |
0 |
1 |
2 |
….. |
99 |
индексы элементов массива |
Чтобы обратиться к элементу массива, надо указать имя массива и номер элемента в массиве (индекс):
a[0] – индекс задается как константа,
a[55] – индекс задается как константа,
a[i] – индекс задается как переменная,
a[2*i] – индекс задается как выражение.
Элементы массива можно задавать при его определении:
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a[]={1,2,3,4,5};
Сортировка массивов
Сортировка – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.
Сортировка методом пузырьков (метод простого обмена)
Алгоритм сортировки методом пузырька (bubble sort) сравнивает между собой соседние элементы и меняет их местами, если они нарушают порядок. Для этого приходится несколько раз просматривать одни и те же элементы. Во время первого прохода сравниваются два первых элемента массива; если они нарушают порядок, их меняют местами. Затем сравнивается другая пара, т.е. 2-й и 3-й элементы. Если они нарушают порядок, их меняют местами. Просмотр, сравнение и обмен двух элементов выполняется до тех пор, пока не будет достигнут конец массива.
На рис. изображены первые два прохода при сортировке массива. состоящего из пяти целых чисел, методом пузырька: а) первый проход; б) второй проход
Хотя после первого прохода массив остается неупорядоченным, наибольший элемент оказывается в конце массива, "всплывая", как пузырек на поверхность воды. Во время второго прохода нужно вернуться к началу массива и обработать его точно так же, как и в первый раз, останавливая обработку на предпоследнем элементе. Таким образом, при втором проходе просматриваются n-l элемент массива.
for(int i=1;i<n;i++)
for(int j=n-1;j>=i;j--)
if(a[j]<a[j-1])
{
int r=a[j];
a[j]=a[j-1];
a[j-1]=r;
}
}
Сортировка методом вставок
Представьте себе колоду карт, из которой каждый раз вынимается и вставляется на указанное место одна карта. Такой способ упорядочения называется сортировкой методом вставок (insertion sort). В данном случае массив делится на две части: упорядоченную и неупорядоченную, как показано на рис.
Вначале весь массив неупорядочен. На каждом шаге метода вставок из неупорядоченной части извлекается первый элемент, который затем вставляется в нужное место упорядоченной части. Первый шаг тривиален: переместить нулевой элемент из неупорядоченной части в упорядоченную. Для этого даже не нужно переставлять элементы массива. Следовательно, этот шаг можно пропустить, считая, что этот элемент уже принадлежит упорядоченной части, а неупорядоченной частью массива является отрезок 1 ..N-1. Поскольку на каждом шаге размер упорядоченной части увеличивается на единицу, а размер неупорядоченной части, соответственно, на единицу уменьшается, в момент окончания алгоритма весь массив окажется упорядоченным.
На рис. показаны результаты сортировки массива, состоящего из пяти целых чисел, методом вставок. В исходном положении упорядоченная часть массива состоит из единственного нулевого элемента, равного 29, а к неупорядоченной части относятся все остальные элементы массива.
Извлечем из неупорядоченной части массива ее первый элемент - число 10 и вставим в соответствующее место упорядоченной части. Для этого понадобится сдвинуть элементы массива, чтобы освободить место для вставляемого числа. Снова извлечем из вновь образованной неупорядоченной части массива ее первый элемент - число 14 - и вставим в соответствующее место упорядоченной части и т.д.
int i,j,x;
for(i=1;i<n;i++)
{
x=a[i]; // запомнили элемент, который будем вставлять
j=i-1;
while(x<a[j]&&j>=0) // поиск подходящего места
{
a[j+1]=a[j]; // сдвиг вправо
j--;
}
a[j+1]=x; // вставка элемента
}