Сортировка массива методом пузырька.

РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА

По дисциплине: «Алгоритмизация и программирование»

Обработка одномерных массивов

Цель работы: получение навыков работы с массивами, их ввода и вывода, выполнения операций обработки, закрепление навыков организации программ циклической структуры.

Задания для подготовки работы

1.Изучить способы описания и использования массивов, алгоритмы сортировки массивов и алгоритмы поиска элемента в неупорядоченном и упорядоченном массивах.

2.Разработать алгоритм в виде блок-схемы.

3. Составить программу для решения задачи соответствующего варианта.

4. Программный код оформить в соответствии с требованиями к стилю оформления программы (ступенчатая структура записи программного кода, правильный выбор имен идентификаторов и т.п.). Включить в код описание назначения программы и авторизацию, использовать комментарии.

5. Продумать оформление вывода результата.

6. Подобрать наборы тестовых данных.

Задание к работе

Набрать программу, отладить ее, протестировать. Распечатать текст программы и результаты ее работы на тестовых данных.

1. Дан массив из 20 целых чисел, расположенных в случайном порядке. Половина чисел являются четными, половина — нет. а) Разделить массив на два отдельных массива б) отсортировать один массив по убыванию, а второй — по возрастанию (алгоритм сортировки вставками). в) вывести из первого массива все числа, которые делятся без остатка на заданное число Х, а из второго все те, которые не делятся г) найти среднее арифметическое первого массива и среднее геометрическое второго. (Среднее геометрическое считается как корень N-й степени из произведения всех чисел в массиве, где N — длина массива)
2. Дан массив из N положительных и отрицательных целых чисел. а) найти среднее арифметическое отдельно для положительных и для отрицательных чисел б) подсчитать количество случаев, когда рядом стоящие числа имеют разный знак в) найти наибольшее число среди положительных и наименьшее среди отрицательных. г) расположить числа в массиве таким образом, чтобы сначала шли положительные числа, упорядоченные по возрастанию, а затем — отрицательные числа, упорядоченные по убыванию.
3. Дан массив из 18 вещественных чисел, все элементы которого различны. 1) Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3. 2) Найти квадраты всех чисел, расположенных между минимальным и максимальным значениями. 3) Упорядочить по возрастанию элементы, находящиеся на местах, не кратных числу 3.
4. Ввести курс доллара на каждый день недели (7 дней). а) Найти разницу между самым высоким курсом и самым низким. Вывести дни недели, когда был самый высокий и самый низкий курс. б) Определить все ли время он падал (напечатать на экране «курс падал» или «курс не падал») в) Определить среднее значение курса за всю неделю. г) Самый низкий курс заменить числом, вводимым с клавиатуры.
5. В ячейках массива находится температура воздуха за две недели. а) Найти количество дней, когда температура опускалась ниже 0°С. б) Какова средняя температура среди тех дней, когда мороза не было. в) Распечатать номера дней с максимальной температурой. в) Отсортировать массив по возрастанию.
6. Даны два одномерных массива, состоящих из 10 целых чисел и содержащих как положительные, так и отрицательные элементы. 1) Упорядочить оба массива по убыванию (алгоритм сортировки вставками). Объединить массивы в один упорядоченный по возрастанию массив. 2) Найти минимальное значение одного массива и среднее арифметическое другого. в) Определить количество и значения совпадающих по величине, но различных по знаку элементов массивов.
7. Дан массив из 15 вещественных чисел. а) обнулить те элементы массива, которые имеют дробную часть б) расположить нулевые элементы так, чтобы они стояли только на четных позициях в) отсортировать массив так, чтобы при этом нулевые элементы остались на своих местах г) Заменить нулевые элементы теми числами, которые меньше, чем введенное число Х. Если число нулей больше, чем количество полученных чисел, заполнить оставшиеся нули теми же числами по второму кругу.
8. Даны два одномерных массива, состоящих из 10 целых чисел. 1) Упорядочить оба массива по возрастанию. Объединить массивы в один упорядоченный по возрастанию массив. 2) Найти минимальное значение одного массива и максимальное другого. 3) Определить количество и значения совпадающих по величине элементов массивов.
9. Дан массив из 20 вещественных чисел, все элементы которого различны. 1) Найти среднее значение элементов массива, находящихся на позициях, кратных числу 4. 2) Найти сумму чисел, расположенных между минимальным и максимальным значениями. 3) Упорядочить элементы, находящиеся на четных позициях по убыванию.
10. Дана последовательность из n (n ? 20) вещественных чисел, содержащая как положительные, так и отрицательные элементы. 1) Найти среднее арифметическое положительных и среднее арифметическое отрицательных чисел. 2) Найти минимальное по модулю число. 3) Упорядочить все числа, начиная с элемента с номером j, по возрастанию.
11. Дан массив а, состоящий из 10 целых чисел. 1) Определить, сколько раз повторяется наибольшее значение, вывести порядковые номера соответствующих елементов. 2) Упорядочить массив по убыванию. 3) Найти произведение всех элементов аi, для которых верно ai (x, y вводить с клавиатуры). Числа не принадлежащие заданному интервалу заменить нулями.
12. Дан вещественный массив температур за две недели а) вывести дни, в которые температура была в диапазоне [x+y; x-y], где x — средняя температура, y — введенное с клавиатуры число. б) подсчитать сколько раз за две недели температура изменялась с положительной на отрицательную или наоборот. (т.е. [-1, 0, +2] или [+10, -5]) в) отсортировать массив температур по возрастанию, а температуры из диапазона (см. пункт а) — по убыванию (алгоритм сортировки выбором).
13. В ячейках массива находится прибыль магазина за каждый день недели (7 дней). а) Найти номера дней максимальной и минимальной прибыли. б) Определить: сколько дней подряд держалась максимальная прибыль? в) Найти среднее значение прибыли для дней с нечетным порядковым номером. г) Заменить все элементы массива числом b,вводимым с клавиатуры, если элемент меньше заданного числа а.
14. Дан массив из 15 целых чисел, все элементы которого различны. 1) Найти сумму элементов массива, находящихся на нечетных позициях. 2) Определить минимальное и максимальное числа. Поменять их местами. 3) Упорядочить по возрастанию элементы, находящиеся на четных местах. 4) Найти среднее арифметическое всех элементов массива, которые (x, y вводить с клавиатуры).
15. В ячейках массива находится температура каждого дня недели (7 дней). а) Найти самую высокую и самую низкую температуру. б) Температура какого дня ближе всего к средней температуре за неделю. в) Отсортировать массив по убыванию. г) Распечатать номера дней с температурой находящейся в диапазоне [a, b] (a, b – вводить с клавиатуры )
16. Дан массив из 20 элементов: каждый нечетный содержит цену товаров, а каждый четный — количество заказов на этот товар: а) найти сумму самого дорогого заказа (цена * количество) б) найти среднюю цену среди товаров, у которых больше 2 заказов в) отсортировать массив по возрастанию цен, сохраняя структуру цена — количество г) Вывести количество заказчиков для каждого товара в заданном ценовом диапазоне, отсортированное по возрастанию
17. Дан массив а, состоящий из 30 вещественных чисел. 1) Найти среднее значение элементов массива, находящихся на позициях, кратных числу 3. 2) Найти среднее арифметическое чисел, расположенных между минимальным и максимальным значениями. 3) Упорядочить элементы, находящиеся на нечетных позициях по возрастанию
18. В массиве записан курс евро за 7 дней. а) Найти разницу между самым высоким курсом и самым низким. Вывести дни недели, когда курс был выше, чем введенное с клавиатуры значение. б) Определить все ли время он поднимался (напечатать на экране «курс поднимался» или «курс не поднимался») в) Определить среднее значение курса в интервале от наибольшего до введенного числа. г) Самый высокий курс заменить числом, вводимым с клавиатуры.
19. Дана последовательность из N (n ? 30) целых чисел, содержащая как положительные, так и отрицательные элементы. 1) Найти среднее арифметическое положительных чисел, а также минимальное и максимальное среди отрицательных чисел. 2) Упорядочить все числа, начиная с элемента с номером j по убыванию. 3) Среди оставшихся чисел обнулить каждое число, которое является четным.
20. В ячейках массива находится количество товаров, проданных в магазине за две недели (14 дней). а) Найти номера дней с максимальным и минимальным количеством продаж. б) Отсортировать элементы массива между минимальным и максимальным по возрастанию. в) Найти среднее значение количества продаж для дней с четным порядковым номером, исключая дни с максимальным и минимальным количеством. г) Заменить все элементы массива числом b,вводимым с клавиатуры, если элемент больше заданного числа а.
21. В ячейках массива находится температура каждого дня недели (7 дней). а) Найти самую высокую и самую низкую температуру. б) Найти среднюю температуру за неделю. в) Отсортировать массив по убыванию. г) Распечатать номера дней с температурой находящейся в диапазоне [a, b] (a, b – вводить с клавиатуры ).
22. Дан массив из n (x, y вводить с клавиатуры).
23. В массиве записан курс евро за 14 дней. а) Найти средний курс за две недели. б) Определить минимальное значение курса за первую неделю и максимальное за вторую. г) Распечатать номера дней с курсом в интервале от е1 до е2. Значения е1 и е2 вводятся с клавиатуры. в) Упорядочить элементы по возрастанию.
24. В массиве записан курс доллара за 2 недели. а) найти разницу между самым высоким курсом и самым низким. Вывести дни недели, когда курс был ниже, чем введенное с клавиатуры значение. б) проследить в какие дни курс доллара поднимался, а в какие опускался (например, «дни 1-5 опускался, дни 6-8 поднимался, …) в) обменять введенную с клавиатуры сумму по среднему за 2 недели курсу.
25. Дан массив из N положительных и отрицательных вещественных чисел. а) найти среднее арифметическое отдельно для положительных чисел и среднее геометрическое – для отрицательных. б) найти максимальную по длине последовательность чисел с одинаковым знаком. в) найти наименьшее число среди положительных и наибольшее среди отрицательных. г) элементы, находящиеся на позициях между числами из пункта «в» отсортировать по возрастанию.
26. Дан вещественный массив температур за две недели. а) вывести названия дней, в которые температура была выше средней за неделю; б) создать второй массив, в котором поместить температуры тех дней, в которые она опускалась ниже средней, с сохранением позиций из оригинального массива. Остальные ячейки заполнить нулями. в) подсчитать максимальное количество стоящих рядом нулей из второго массива (пункт «б»).
27. Дан массив а, состоящий из 10 целых чисел. а) вывести все элементы массива, которые находятся в диапазоне между средним и наименьшим значением. б) упорядочить исходный массив по возрастанию. в) при этом элементы из пункта «а» оставить на своих местах.
28. Дан массив, состоящий из 16 вещественных чисел. а) найти среднее значение элементов массива, находящихся на позициях, кратных числу 5. б) найти наибольший из элементов, расположенных между позициями минимального и максимального элементов исходного массива. в) упорядочить элементы из пункта «а» по возрастанию, не меняя позиций остальных элементов.
29. В массиве записан курс евро за 7 дней. а) Найти средний курс за неделю. б) Определить максимальное значение курса за неделю. г) Распечатать номера дней с курсом в интервале от е1 до е2. Значения е1 и е2 вводятся с клавиатуры. в) Упорядочить элементы по возрастанию.
30. Дан массив из N положительных и отрицательных вещественных чисел. а) найти среднее арифметическое отдельно для положительных чисел и среднее геометрическое – для отрицательных. б) найти максимальную по длине последовательность чисел с одинаковым знаком. в) найти наименьшее число среди положительных и наибольшее среди отрицательных. г) элементы, находящиеся на позициях между числами из пункта «в» отсортировать по возрастанию.

Содержание отчета

1. Описание алгоритма.

2. Наборы тестовых данных с обоснованием их выбора.

3. Текст программы.

4. Пример тестирования.

5. Описание и анализ ошибок, выявленных при отладке программы.

Указания к выполнению:

Поиск минимума и максимума в массиве:

#include

#define N 10

void main(void)

{

int i;

int m[N];

int min_val, max_val;

int min_pos, max_pos;

for (i=0; i

{

scanf («%d», m[i]);

}

min_val=m[0];

max_val=m[0];

min_pos=max_pos=0;

for (i=0; i

{

if(m[i]max_val)

{

max_val=m[i];

max_pos=i;

}

if(m[i]

{

min_val=m[i];

min_pos=i;

}

}

printf(«\nMin=%d\nMax=%d», min_val, max_val);

printf(«\nMin_pos=%d\nMax_pos=%d», min_pos, max_pos);

}

Сортировка массива методом пузырька.

* * * * * * *

#include

#define N 40

void main(void)

{

int m[N];

int i;

int j;

for (i=0; i

scanf(«%d», m[i]);

for (i=0; i

for (j=0; j

if (m[j]m[j+1])

{

int temp=m[j];

m[j]=m[j+1];

m[j+1]=temp;

}

for (i=0; i

printf («%d», m[i]);

}

Можно ввести массив с указанием места элемента

#include

#define N 40

void main(void)

{

int m[N];

int i;

int j;

int index[N];

for (i=0; i

{

scanf («%d», m[i]);

index[i]=i;

}

for (i=0; i

for (j=0; j

if (m[j]m[j+1])

{

int temp=m[j];

m[j]=m[j+1];

m[j+1]=temp;

temp=index[j];

index[j]=index[j+1];

index[j+1]=temp;

}

/* вывод позиций пяти максимальных элементов */

for (i=0; i

printf («\nM[%d]=%d», index[N-1-i], m[N-1-i]);

}

Проблема в том, что, изменяя массив, необходимо сделать копию массива.

Урок 17. C++ Пузырьковая сортировка


Похожие статьи.

Понравилась статья? Поделиться с друзьями: