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

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

ListBoxKil
Программирование задачи с графическим интерфейсом - student2.ru Программирование задачи с графическим интерфейсом - student2.ru
ListBoxMij
Программирование задачи с графическим интерфейсом - student2.ru

Для ввода числа магазинов, максимального ассортимента хлебных и кондитерских изделий планируем однострочные поля редактирования (EditN, EditT, EditP). Для ввода количества хлебных изделий и массы кондитерских изделий (в ассортименте) для каждого магазина используем многострочные поля редактирования (EditKil, EditMij).

Вывод текущих количеств хлебных изделий и масс кондитерских изделий (в ассортименте) для каждого магазина, суммарного количества хлебных изделий и суммарной массы кондитерских изделий по каждому магазину реализуем в поля-списки (ListBoxKil, ListBoxMij, ListBoxSK, ListBoxSM). Их расположение задаем так, чтобы значения суммарных количеств (масс) располагались правее соответствующих строк с текущими значениями слагаемых.

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

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

#include<stdio.h>

#include<stdlib.h>

#include <string.h>

#define N 20 /* увеличенные */

#define P 30 /* размеры */

#define T 30 /* массивов */

void TSumprDlgClient::Ok()

{

// INSERT>> Your code here.

float m[N][P], sm[N], pk,pm; /* описатели массивов */

int i, j, l, n, t, p,skol[N],k[N][T]; /* и переменных */

char buf[20], buf1[60]=""; /*описание символьного массива*/

ListBoxKil->ClearList();/*очистка поля вывода*/

ListBoxSK->ClearList();/*очистка поля вывода*/

ListBoxMij->ClearList();/*очистка поля вывода*/

ListBoxSM->ClearList();/*очистка поля вывода*/

EditN->GetText(buf, 10); /*ввод количества*/

n = atoi(buf); /* магазинов*/

EditT->GetText(buf, 10); /*ввод макс. ассортим.*/

t = atoi(buf); /* хлебопродуктов*/

EditP->GetText(buf, 10); /*ввод макс. ассортим.*/

p = atoi(buf); /* конд. изделий*/

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

{

sm[i]=0.;

skol[i]=0;

}

for( i = 0; i < n; i++)/* заголовок цикла перебора № магазина*/

{

for( l = 0 ; l < t ; l++ )

{

EditKil->GetLine(buf, 20, i*t+l); /* ввод элементов */

k[i][l]=atoi(buf); /* массива K*/

skol[i]= skol[i] +k[i][l];

}

for( j = 0 ; j < p ; j++ )

{

EditMij->GetLine(buf, 20, i*p+j); /*ввод элементов*/

m[i][j]=atof(buf); /* массива M*/

sm[i] =sm[i]+ m[i][j];

}

}

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

{

sprintf(buf1," %s "," ");

for( l = 0 ; l < t ; l++ ) /* внутрен. цикл вывода kij */

{

sprintf(buf," %3d ",k[i][l]); /* вывод текущих */

strcat(buf1, buf); /* склеенных */

}

ListBoxKil->AddString(buf1); /*значений kil*/

}

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

{

sprintf(buf1," %s "," ");

for( j = 0 ; j < p ; j++ ) /* внутренний цикл вывода mij*/

{

sprintf(buf," %6.2f ",m[i][j]); /* вывод текущих */

strcat(buf1, buf); /* склеенных */

}

ListBoxMij->AddString(buf1); /*значений mij */

}

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

{

sprintf(buf," %3d ",skol[i]); /* вывод текущих*/

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

}

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

{

sprintf(buf," %6.2f ",sm[i]); /* вывод текущих*/

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

}

}

2 5 4 – количество магазинов, ассортименты;

125 138 239 212 92 – количества изделий в первый магазин;

83 65 58 42 34 – количества изделий во второй магазин;

25.9 23.2 38.1 15.4 – массы изделий в первый магазин;

56.2 14.8 56.1 17.8 – массы изделий во второй магазин.

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

Описатели вводимых массивов показывают, что количество магазинов максимально может быть равно пятнадцати, а ассортимент включать до десяти наименований. В запросах на ввод текущих значений расстояний и масс и при выводе таблицы результатов индексы магазина и продукта увеличены на единицу. Это позволяет перейти от принятой в Cи/Си++ формы обозначения индексов (от 0) к принятой в математике (от 1).

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

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