Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Составление алгоритма решения. Предложенная методика нахождения максимума в цикле реализована в структурированном алгоритме




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

Блоки 9-14 представляют собой внешний цикл расчёта текущих значений функции. Блоки 11 и 12 – ветвление внутри цикла, для последовательного нахождения максимума.

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

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

Идентификация переменных представлена в табл. 8.7.

Таблица 8.7

Обозначение в алгоритме xн xк Dx xi i yi ymax
Обозначение в программе xn xk dx xi i yi ymax

Рис. 8.13. Алгоритм решения задачи 8.7

Записанное в блоке 11 условие требует использования в программе укороченного оператора if.

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

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

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<conio.h>

#include <windows.h>

main()

{

float xn, xk, dx, /* описание */

xi, yi, ymax; /* локальных */

int i; /* переменных */

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

clrscr();

CharToOem(" Введите начальное значение возмущения: ",buf);

printf("\n %s ",buf);

scanf("%f", &xn);

CharToOem(" Введите конечное значение возмущения: ",buf);

printf("\n %s ",buf);

scanf("%f", &xk);

CharToOem(" Введите шаг изменения возмущ. воздействия:", buf);

printf("\n %s ",buf);

scanf("%f", &dx);

printf("\n --------------------------"

"\n | xi | yi | ymax |"

"\n --------------------------");

ymax = -1.e20;

/* цикл расчёта выходного сигнала и поиска максимума */

for(xi = xn; xi <= xk; xi+=dx)

{

yi = sin(xi);

if(yi > ymax)

ymax = yi;

printf("\n |%5.2f | %4.2f | %4.2f |",xi, yi, ymax);

}

printf("\n --------------------------"

"\n ymax = %.2f \n", ymax);

getch();

}

0.38 1.96 0.11

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

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

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

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

ListBoxХi
ListBoxYi
ListBoxMax

 

Для ввода начального и конечного значений сигнала и шага его изменения планируем однострочные поля редактирования (EditXn, EditXk, EditDx). Вывод текущих расчетных значений сигналов xi, yi, максимального значения сигнала ymax реализуем в поля-списки (ListBoxXi, ListBoxYi, ListBoxMax). Вывод итогового максимального значения сигнала ymax – в статическое поле (PoleMax).

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

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

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

void TSumprDlgClient::Ok()

{

// INSERT>> Your code here.

float xn, xk, dx, /* описание */

xi, yi, ymax; /* локальных */

int i; /* переменных */

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

ListBoxXi->ClearList(); /*очистка */

ListBoxYi->ClearList(); /* полей*/

ListBoxMax->ClearList(); /*вывода*/

EditXn->GetText(buf, 10); /*ввод начального*/

xn = atof(buf); /* значения сигнала*/

EditXk->GetText(buf, 10); /*ввод конечного*/

xk = atof(buf); /* значения сигнала*/

EditDx->GetText(buf, 10); /*ввод шага*/

dx = atof(buf); /* изменения сигнала*/

ymax = -1.e20;

/* цикл расчёта выходного сигнала и поиска максимума */

for(xi = xn; xi <= xk; xi+=dx)

{

yi = sin(xi);

if(yi > ymax)

ymax = yi;

sprintf(buf,"%11.3f",xi); /* вывод текущих*/

ListBoxXi->AddString(buf); /*значений xi*/

sprintf(buf,"%11.3f",yi); /* вывод текущих*/

ListBoxYi->AddString(buf); /*значений yi*/

sprintf(buf,"%11.3f",ymax); /* вывод текущих*/

ListBoxMax->AddString(buf); /*значений ymax*/

}

sprintf(buf,"%s %11.3f","Максимальное значение сигнала yi",ymax); /* вывод максимального*/

PoleMax->SetText(buf); /*значения функции*/

}

0.38 1.96 0.11

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

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





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


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


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

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

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

2758 - | 2317 -


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

Ген: 0.009 с.