Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

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

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

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

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

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

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

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

1 i 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). Ввод и вывод исходного и получаемого массивов предусмотрен отдельно сформированными циклами.

Рис. 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Х

Для ввода количества элементов массива планируем однострочное поле редактирования (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) по желанию пользователя.





Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 495 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2300 - | 2053 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.