Формирование математической модели. X(N) – целочисленный массив;

Исходные данные

X(N) – целочисленный массив;

N £ 30 – максимальный размер массива;

n – реальный размер массива.

Модель массива Х(n):

х1 х2 ... хi ... хn

i – текущий индекс массива;

i = i + 1 – закон изменения индекса;

1 Формирование математической модели. X(N) – целочисленный массив; - student2.ru i Формирование математической модели. X(N) – целочисленный массив; - student2.ru n – диапазон изменения номера i элемента.

Расчётные зависимости

xmax1 = max(x1, x2,…, xi,…, xn);

x1 = xmax1;

xmax2 = max(x2,…, xi,…, xn);

x2 = xmax2;

xmax i = max(xi,…, xn-1, xn);

xi = xmax i;

xmax n-1 = max(xn-1,xn);

xn-1 = xmax n-1;

Выбор метода решения

Анализ математической модели определяет необходимость использования структуры «вложенные циклы». Внешний цикл необходим для формирования текущих массивов, начиная с исходного, с последовательно уменьшающимся количеством элементов (от N-1 вначале до N < 2 в конце). Поиск экстремального значения в каждом текущем массиве требует внутреннего смешанного вычислительного процесса (цикла с вложенным ветвлением). Таким образом, метод решения реализуется последовательностью:

· присвоить индексу внешнего цикла его начальное значение (i = 1);

· сформировать начальные максимальные значения искомого х max и номера ячейки n max, где он хранится;

· присвоить индексу внутреннего цикла его начальное значение через внешний (j = i + 1);

· проверить текущее значение xj на текущее максимальное (xj > xmax);

· выполнить переприсваивание xmax = xj и nmax = j, если условие выполняется;

· изменить индекс внутреннего цикла по закону j = j + 1;

· повторять три предыдущих пункта пока j £ n;

· выполнить переприсваивание xn max = xi и xi = xmax,

· изменить индекс внешнего цикла по закону i = i + 1;

· повторять предыдущие пункты, кроме первого, пока i £ n-1;

· прекратить решение при i > n-1.

Следовательно, в качестве метода решения необходимо выбрать структуру последовательно вложенных циклов арифметического типа с аналитическим изменением аргумента, внутренний из которых смешанный вычислительный процесс – цикл с расположенным внутри него ветвлением поиска максимального значения функции и перестановки в начало массива последовательно уменьшающейся длины.

Составление алгоритма решения

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

Формирование математической модели. X(N) – целочисленный массив; - student2.ru

Рис. 9.13. Схема алгоритма сортировки элементов одномерного числового массива по убыванию

Программирование задачи

Таблица идентификации переменных алгоритма и создаваемой программы представлена в табл. 9.4.

Таблица 9.4

Имя в алгоритме n i j xmax xj xi xnmax nmax
Имя в программе n i j xmax x[j] x[i] x[nmax] nmax

На основании схема алгоритма и таблицы идентификации составим программы решения задачи.

Классический вариант программирования задачи

#include<stdio.h>

#include<stdlib.h>

#include<windows.h>

#include<conio.h>

main()

{

int x[30], xmax; /* описание */

int i, j, n, nmax; /* локальных переменных */

char buf[50]; /*описание символьного массива*/

clrscr();

CharToOem("Введите количество элементов массива", buf);

printf("\n %s \n",buf); /* ввод*/

scanf("%d", &n);

for(i=0 ; i < n; i++)

{

CharToOem(" Введите элемент x ",buf);

printf("\n %s[%d] \n",buf,i+1); /* ввод*/

scanf("%d", &x[i]);

}

CharToOem(" \n\n Исходный массив X \n\n",buf);

printf("%s",buf);

for(i=0;i<n;i++)

printf(" %5d ",x[i]);

for (i = 0; i < n ; i++)/*заголовок внешн. цикла сортировки*/

{

xmax = x[i];

nmax = i;

for(j = i+1; j < n; j++) /*загол. внутр. цикла сортировки*/

{

if(x[j] > xmax)

{

xmax = x[j];

nmax = j;

}

}

x[nmax] = x[i];

x[i]=xmax;

}

CharToOem(" \n Отсортированный массив Х \n",buf);

printf("%s",buf);

for(i=0;i<n;i++) printf(" %5d ",x[i]);

getch();

}

7 – размер массива;

1 6 4 8 2 11 4 – элементы массива;

Под закрывающей скобкой приведены исходные данные для решения задачи.

Результаты решения представлены в приложении 9.7.

Программирование задачи с графическим интерфейсом

Программирование задачи при использовании графического интерфейса предварим его разработкой.

ListBoxХ
Формирование математической модели. X(N) – целочисленный массив; - student2.ru

Для ввода количества элементов массива планируем однострочное поле редактирования (EditN). Для ввода элементов массива Х – многострочное поле редактирования (EditХ). Вывод элементов отсортированного массива X реализуем в поле-список (ListBoxX).

Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.

С учетом планируемого интерфейса выполним программирование задачи.

#include<stdio.h>

#include<stdlib.h>

void TVrDlgClient::BNClickedOk()

{

// INSERT>> Your code here.

int x[30], xmax; /* описание */

int i, j, n, nmax; /* локальных переменных */

char buf[50]; /*описание символьного массива*/

ListBoxX->ClearList();

EditN->GetText(buf,10);/*Ввод размера*/

n=atoi(buf); /*массива */

for(i=0 ; i < n; i++)

{

EditX->GetLine(buf,10,i); /* ввод*/

x[i]=atoi(buf); /* текущего элемента массива*/

}

for (i = 0; i < n ; i++)/*заголовок внешн. цикла сортировки*/

{

xmax = x[i];

nmax = i;

for(j = i+1 ; j < n ; j++) /*загол. внутр. цикла сортировки*/

{

if(x[j] > xmax)

{

xmax = x[j];

nmax = j;

}

}

x[nmax] = x[i];

x[i]=xmax;

}

for (i=0; i< n; i++)/* заголовок цикла вывода */

{

sprintf(buf," %3d",x[i]); /* вывод*/

ListBoxX->AddString(buf); /* элемента массива*/

}

}

7 – размеры массива;

1 6 4 8 2 11 4 – элементы массива;

Под закрывающей скобкой приведены исходные данные для решения задачи.

Результаты решения представлены в приложении 9.8.

9.3.1.2. Ранжирование по возрастанию методом «пузырька»

Рассмотрим ранжирование по возрастанию на конкретной задаче (9.5) о числовом одномерном массиве А. В качестве метода поиска используем «всплывание пузырька».

Постановка задачи

Дан одномерный вещественный массив А максимально содержащий до 20 элементов. Диапазон представления численных значений элементов от -50 до 50. Требуется отранжировать исходный массив по возрастанию. Предусмотреть возможность прекращения ввода элементов массива (не более 20) по желанию пользователя.

Наши рекомендации