КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Основные алгоритмы преобразования одномерных массивов
Теоретическая часть
Алгоритм удаления элемента из массива
Блок-схема алгоритма удаления элемента с номером M из массива A, в котором N элементов выглядит следующим образом: Соответствующий фрагмент текста программы на языке C++: for (i=M;i<N–1;i++) A[i]=A[i+1]; N= N–1;
Алгоритм удаления из массива серии элементов с заданными номерами
Блок-схема алгоритма удаления серии элементов с номерами от M1 до M2 из массива A, в котором N элементов, выглядит следующим образом: Соответствующий фрагмент текста программы на языке C++: k=M2-M1+1; for (i=M1;i<N–k:i++) A[i]=A[i+k]; N= N–k;
Алгоритм удаления из массива элементов с заданным значением
Блок-схема алгоритма удаления всех элементов, равных заданному значению X, из массива A, в котором N элементов, выглядит следующим образом: Соответствующий фрагмент текста программы на языке С++: i=1; while (i<N) { if (A[i]==X) { for (j=i;j<N-1;j++) A[j]=A[j+1]; N=N-1; } else i=i+1; }
Алгоритм копирования элементов массива в новый массив
Блок-схема алгоритма копирования элементов, удовлетворяющих заданному условию (в данном случае – элементов, значение которых больше, чем X), из массива A, в котором N элементов, в массив B выглядит следующим образом: В результате массив B будет содержать K элементов.
Соответствующий фрагмент текста программы на языке C++: K=0; for (i=0;i<N;i++) { if (A[i]>X) { B[K]=A[i]; K=K+1; } }
Алгоритм вставки нового элемента в массив
Блок-схема алгоритма вставки элемента с номером M, равного X, в массив A, который содержит N элементов, выглядит следующим образом: Соответствующий фрагмент текста программы на языке С++: N=N+1; for (i=N-1;i>M;i--) A[i]=A[i-1]; A[M]=X;
Алгоритм упорядочения элементов массива
Блок-схема алгоритма упорядочения по возрастанию элементов массива A, состоящего из N элементов, методом «пузырька» выглядит следующим образом: Соответствующий фрагмент текста программы на языке C++:
for (i=1;i<N;i++) for (j=1;j<=N-i;j++) if (A[j-1] > A[j]) { P=A[j]; A[j]=A[j-1]; A[j-1]=P; }
Алгоритм упорядочения элементов массива по убыванию отличается только знаком в условии сравнения соседних элементов, в этом случае необходимо проверять A j < A j+1.
Алгоритм вставки элемента в упорядоченный массив
Блок-схема алгоритма вставки элемента, равного X, в упорядоченный массив A, который содержит N элементов, без нарушения упорядоченности массива выглядит следующим образом: Соответствующий фрагмент текста программы на языке C++: if (X>=A[N-1]) A[N]=X; else { K=0; while (X>A[K])K=K+1; for (i=N-1;i>=K;i--) A[i+1]=A[i]; A[K]=X; } N=N+1; 6.1.2 Пример составления алгоритма и программы на языке C++ для преобразования одномерного массива.
Задание: Дан массив действительных чисел F1,...,F40. Упорядочить в нем по возрастанию элементы, которые находятся между максимальным и минимальным элементами. Решение. Для работы с массивом F сначала необходимо сформировать его элементы. Выполним формирование элементов массива с помощью генератора случайных чисел rand(). Для обозначения размерности массива F введем переменную N. В цикле сразу после формирования элемента массива выполним вывод его на экран. Далее в одном цикле выполним поиск максимального и минимального элементов массива Fmax и Fmin и их номеров nmax и nmin. Затем определим, какой из номеров меньше: nmax или nmin, меньший из номеров запомним в переменной k1, больший – в переменной k2. После этого упорядочим по возрастанию элементы от k1 до k2 по аналогии с сортировкой элементов массива от 1-го до N-го. При упорядочении элементов массива необходимо организовать 2 цикла. Внешний цикл всегда организовывается, начиная с 1 и выполняется число раз, на единицу меньшее количества сортируемых элементов (в случае сортировки всего массива из N элементов внешний цикл организовывался от 1 до N – 1). В данном случае необходимо упорядочить (k2 – k1 + 1) элементов. Поэтому внешний цикл необходимо организовать от 1 до k2 – k1. В качестве переменной внешнего цикла будем использовать переменную i. Поскольку необходимо упорядочить элементы с номерами от k1 до k2, внутренний цикл организуем, начиная с k1 до k2 – i (в случае сортировки всего массива из N элементов внутренний цикл организовывался от 1 до N – i). В качестве переменной внутреннего цикла будем использовать переменную j. После упорядочения преобразованный массив F выведем на экран. Блок-схема алгоритма решения данной задачи выглядит следующим образом:
Текст программы на языке C++ выглядит следующим образом:
#include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { float F[40],Fmax,Fmin,P; int i,j,k1,k2,nmin,nmax,N; clrscr(); randomize(); N=40; printf("\nИсходный массив:\n"); for (i=0;i<N;i++) { F[i]=100.0*rand()/RAND_MAX-50; printf("%8.2f",F[i]); } Fmax=-10000; Fmin=10000; for (i=0;i<N;i++) { if (F[i]>Fmax) { Fmax=F[i]; nmax=i; } if (F[i]<Fmin) { Fmin=F[i]; nmin=i; } } printf("\n\nМаксимальный элемент номер %d равен %.2f",nmax,Fmax); printf("\n Минимальный элемент номер %d равен %.2f",nmin,Fmin); if (nmax>nmin) { k1=nmin; k2=nmax; } else { k2=nmin; k1=nmax; } for (i=1;i<=k2-k1;i++) for (j=k1;j<=k2-i;j++) if (F[j]>F[j+1]) { P=F[j]; F[j]=F[j+1]; F[j+1]=P; } printf("\nРезультат:\n"); for (i=0;i<N;i++) printf("%8.2f",F[i]); getch(); return 0; }
Результаты работы программы:
Исходный массив: -47.34 0.30 -31.91 -17.82 38.40 7.93 -45.38 4.23 -6.69 28.25 23.55 35.54 19.14 11.13 18.54 -12.78 -34.82 42.40 -19.17 22.95 35.96 -41.60 48.42 -26.81 24.89 37.18 23.42 -37.94 20.87 -49.13 -20.49 -43.66 -15.52 13.65 31.19 -4.16 40.86 9.40 36.95 14.62
Максимальный элемент номер 22 равен 48.42 Минимальный элемент номер 29 равен -49.13 Результат: -47.34 0.30 -31.91 -17.82 38.40 7.93 -45.38 4.23 -6.69 28.25 23.55 35.54 19.14 11.13 18.54 -12.78 -34.82 42.40 -19.17 22.95 35.96 -41.60 -49.13 -37.94 -26.81 20.87 23.42 24.89 37.18 48.42 -20.49 -43.66 -15.52 13.65 31.19 -4.16 40.86 9.40 36.95 14.62
Из результатов работы программы видно, что в преобразованном массиве элементы, начиная с 22 по 29, упорядочены по возрастанию.
Дата добавления: 2014-11-20; Просмотров: 543; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |