Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интегрирование Главы 7-8.doc
Скачиваний:
1
Добавлен:
12.11.2018
Размер:
2.29 Mб
Скачать

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

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

Таблица 8.1

Обозначение в алгоритме

Пр

n

мi

цi

спi

Осп

ПФ

i

Обозначение в программе

pr

n

m[i]

c[i]

sp[i]

osp

pf

i

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

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

Программа решения по схеме алгоритма (рис. 8.4)

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include <windows.h>

main( )

{

float pr, m[20], c[20], /* описание */

sp[20], osp, pf; /* локальных */

int i, n; /* переменных и массивов */

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

clrscr( );

CharToOem(" Введите процент отчислений Пр (проц.): ",buf);

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

scanf("%f", &pr);

CharToOem(" Введите размер массивов (n<=20): ",buf);

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

scanf("%d", &n); /* ввод фактического размера массивов */

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

{

CharToOem(" Введите массу (кг) и цену (р./кг) партии № ", buf);

printf("\n %s %d",buf,i+1);

scanf("%f%f", &m[i], &c[i]);

}

osp=0.;

printf("\n---------------------------------------------------");

CharToOem("| N | Масса | Цена | Стоимость | Прибыль |", buf);

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

CharToOem("|партии| кг | р. | р. | р. |",

buf);

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

printf("\n---------------------------------------------------");

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

{

sp[i] = m[i] * c[i];

osp += sp[i];

printf("\n | %2d | %6.1f | %5.1f | %9.1f |%11.1f|",

i+1, m[i], c[i], sp[i], osp);

}

printf("\n---------------------------------------------------");

pf = osp * pr / 100.;

CharToOem("Процент прибыли = ",buf);

printf("\n\n\n %s %.1f",buf,pr);

CharToOem("Прибыль фабрики, р. (ПФ)=",buf);

printf("\n\n %s %.1f",buf, pf);

getch();

}

пояснения

18.6

– процент отчислений

4

– размер массивов

536 51.8

– масса и цена первой партии

304 52

– масса и цена второй партии

120 84.3

– масса и цена третьей партии

22 177.8

– масса и цена четвертой партии

Программа решения задачи по схеме алгоритма (рис. 8.5)

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include <windows.h>

#define N 20 /* увеличенный размер массивов */

main( )

{

float pr, m[N], c[N], /* описание */

sp[N], osp, pf; /* локальных */

int i, n; /* переменных и массивов */

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

clrscr( );

CharToOem(" Введите процент отчислений Пр (проц.): ",buf);

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

scanf("%f", &pr);

CharToOem(" Введите размер массивов (n<=20): ",buf);

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

scanf("%d", &n); /* ввод фактического размера массивов */

printf("\n---------------------------------------------------");

CharToOem("| N | Масса | Цена | Стоимость | Прибыль |", buf);

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

CharToOem("|партии| кг | р. | р. | р. |",

buf);

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

printf("\n---------------------------------------------------");

osp=0.;

for( i=0 ; i<n ; i++ ) /* заголовок цикла ввода и расчёта */

{

CharToOem(" Введите массу (кг) и цену (р./кг) партии № ",buf);

printf("\n %s %d",buf,i+1);

scanf("%f%f", &m[i], &c[i]);

sp[i] = m[i] * c[i];

osp += sp[i];

printf("\n | %2d | %6.1f | %5.1f | %9.1f |%11.1f|",

i+1, m[i], c[i], sp[i], osp);

}

printf("\n---------------------------------------------------");

pf = osp * pr / 100.;

CharToOem("Процент прибыли = ",buf);

printf("\n\n\n %s %.1f",buf,pr);

CharToOem("Прибыль фабрики, р. (ПФ)=",buf);

printf("\n\n %s %.1f",buf, pf);

getch();

}

пояснения

18.6

– процент отчислений

4

– размер массивов

536 51.8

– масса и цена первой партии

304 52

– масса и цена второй партии

120 84.3

– масса и цена третьей партии

22 177.8

– масса и цена четвертой партии

Результаты решения по каждому из вариантов представлены в приложении 8.1 (а, б).

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

Программирование задачи при использовании графического интерфейса предварим его разработкой. Ввод процента отчислений и размера массивов планируем в однострочные поля редактирования (EditPr, EditN). Ввод массы и цены партии – в многострочные поля редактирования (EditMi, EditCi) Вывод номера и расчетных значений стоимости и прибыли планируем в поля-списки (ListBoxN, ListBoxSp, ListBoxOsp). Вывод прибыли фабрики – в однострочное поле редактирования (EditPf).

ListBoxN

ListBoxSp

ListBoxOsp

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

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

Программа решения задачи по схеме алгоритма (рис. 8.4)

#include<stdio.h>

#include<stdlib.h>

void TSumprDlgClient::Ok()

{

// INSERT>> Your code here.

float pr, m[20], c[20], /* описание */

sp[20], osp, pf; /* локальных */

int i, n; /* переменных и массивов */

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

ListBoxN->ClearList();

ListBoxSp->ClearList();

ListBoxOsp->ClearList();

EditPr->GetText(buf,10);

pr=atof(buf);

EditN->GetText(buf,10);

n=atoi(buf);

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

{

EditMi->GetLine(buf, 20, i);

m[i]=atof(buf); /* ввод значения массы*/

EditCi->GetLine(buf, 20, i);

c[i]=atof(buf); /* ввод значения стоимости*/

}

osp=0.;

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

{

sp[i] = m[i] * c[i];

osp += sp[i];

sprintf(buf,"%3d",i+1);

ListBoxN->AddString(buf); /* вывод текущих значений i*/

sprintf(buf,"%9.1f",sp[i]);

ListBoxSp->AddString(buf); /*вывод значений sp*/

sprintf(buf,"%11.1f",osp);

ListBoxOsp->AddString(buf); /* вывод значений osp*/

}

pf = osp * pr / 100.;

sprintf(buf,"%5.2f",pf);

EditPf->SetText(buf); /* вывод прибыли фабрики*/

}

пояснения

18.6

– процент отчислений

4

– размер массивов

536 51.8

– масса и цена первой партии

304 52

– масса и цена второй партии

120 84.3

– масса и цена третьей партии

22 177.8

– масса и цена четвертой партии

Программа решения задачи по схеме алгоритма (рис. 8.5)

#include<stdio.h>

#include<stdlib.h>

#define N 20 /* увеличенный размер массивов */

….

void TSumprDlgClient::Ok()

{

// INSERT>> Your code here.

float pr, m[N], c[N], /* описание */

sp[N], osp, pf; /* локальных */

int i, n; /* переменных и массивов */

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

ListBoxN->ClearList();

ListBoxSp->ClearList();

ListBoxOsp->ClearList();

EditPr->GetText(buf,10);

pr=atof(buf);

EditN->GetText(buf,10);

n=atoi(buf);

osp=0.;

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

/* массивов, расчёта и вывода*/

{

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

m[i]=atof(buf); /* значения массы*/

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

c[i]=atof(buf); /* значения стоимости*/

sp[i] = m[i] * c[i];

osp += sp[i];

sprintf(buf,"%3d",i+1);

ListBoxN->AddString(buf); /* вывод текущих значений i*/

sprintf(buf,"%9.1f",sp[i]);

ListBoxSp->AddString(buf); /* вывод текущих значений sp*/

sprintf(buf,"%11.1f",osp);

ListBoxOsp->AddString(buf); /* вывод текущих значений osp*/

}

pf = osp * pr / 100.;

sprintf(buf,"%5.2f",pf);

EditPf->SetText(buf); /* вывод прибыли фабрики*/

}

пояснения

18.6

– процент отчислений

4

– размер массивов

536 51.8

– масса и цена первой партии

304 52

– масса и цена второй партии

120 84.3

– масса и цена третьей партии

22 177.8

– масса и цена четвертой партии

В программах использованы различные варианты описания размеров массивов. В первой (третьей) дано описание увеличенного размера массивов напрямую, во второй (четвертой) – посредством подставляющей директивы препроцессора #define с макроопределением N = 20. Это позволяет использовать в качестве фактического размера переменную n, что делает программу универсальной, т.е. пригодной для работы с любым размером, не превышающим заданный, напрямую (20), либо через директиву #define N = 20.

Результаты решения по каждому из вариантов представлены в приложении 8.2 (а, б).