Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 515; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.022 сек.