Составление алгоритма решения. Математическая формулировка и выбранный метод решения позволяют запланировать следующие действия:
Математическая формулировка и выбранный метод решения позволяют запланировать следующие действия:
· обнуление будущих одномерных массивов SКолi и SМi;
· создание основного цикла ввода элементов Кil и расчета SКолi, ввода элементов Мij и расчета SМi (параллельно вложенными циклами);
· создание циклов вывода исходных матриц Кil и Мij и полученных одномерных массивов SКолi и SМi.
Схема алгоритма выполнена в один шаг (рис. 9.8).
Программирование задачи
Планируемая алгоритмом методика вывода результатов позволяет организовать вывод исходных данных в форме двумерных массивов (количеств Kil и масс Mij изделий), а результаты решения – в виде одномерных массивов (суммарные количества Sколi и массы SMi изделий по каждому магазину).
Идентификация переменных представлена в табл. 9.3.
Таблица 9.3
Имя в алгоритме | N | T | P | i | j | l | Kil | Mij | Sмi | Sколi |
Имя в программе | n | t | p | i | j | l | k[i][l] | m[i][j] | sm[i] | skol[i] |
На основании схемы алгоритма и таблицы идентификации составим программы решения задачи.
Классический вариант программирования задачи
#include <stdio.h> /* директивы */
#include <conio.h> /* препроцессора */
#include <math.h>
Рис. 9.8. Схема алгоритма решения задачи 9.3
#include <windows.h>
#define N 20 /* увеличенные */
#define P 30 /* размеры */
#define T 30 /* массивов */
main( ) /* заголовок головной функции */
{
float m[N][P], sm[N]; /* описатели массивов */
int i, j, l, n, t, p,skol[N],k[N][T]; /* и переменных */
char buf[50]; /*описание символьного массива*/
clrscr( );
CharToOem(" Введите число магазинов N ",buf); /* запрос */
printf("\n %s (N<=%d):",buf,N); /* и */
scanf("%d", &n); /* ввод */
CharToOem("Введите максим. ассортимент хлебных изделий", buf); /* запрос */
printf("\n %s (T<=%d):",buf,T); /* и */
scanf("%d", &t); /* ввод */
CharToOem("Введите максим. ассортимент конд. изделий", buf); /* запрос */
printf("\n %s (P<=%d):",buf,P); /* и */
scanf("%d", &p); /*ввод*/
printf("\n N=%d P=%d T=%d ", n, p, t);
for(i = 0 ; i < n ; i++ )
{
sm[i]=0.;
skol[i]=0;
}
for( i = 0 ; i < n ; i++ ) /*заголовок цикла перебора № магазина*/
{
CharToOem("Введите данные для магазина № ",buf);
printf("\n %s %d:",buf,i+1);
for( l = 0 ; l < t ; l++ ) /*заголовок цикла перебора номера
хлебного изделия*/
{
CharToOem("Введите текущее количество хлебного изделия"
" (наим.",buf);
printf("\n %s %d)(%d,%d):",buf,l+1,i+1,l+1);
scanf("%f", & k[i][l]);
skol[i]= skol[i] +k[i][l];
}
for( j = 0 ; j < p ; j++ ) /*заголовок цикла перебора номера
кондитерского изделия*/
{
CharToOem("Введите текущую массу конд. "
" изделия (наим.",buf);
printf("\n %s %d) (%d,%d):",buf,j+1,i+1,j+1);
scanf("%f", & m[i][j]);
sm[i] =sm[i]+ m[i][j];
}
}
CharToOem("Масса кондитерских изделий ",buf);
printf("\n %s \n",buf);
for( i = 0; i < n; i++) /*заголовок внешнего цикла
вывода m[i][j] */
{
for( j = 0 ; j < p ; j++ ) /*заголовок внутреннего цикла
вывода m[i][j]*/
printf(" %5.2f", m[i][j]);
printf("\n");
}
CharToOem("Количество хлебных изделий ",buf);
printf("\n %s \n",buf);
for( i = 0 ; i < n ; i++ ) /* заголовок внешнего цикла
вывода k[i][j] */
{
for( l = 0 ; l < t ; l++ ) /*заголовок внутреннего
цикла вывода k[i][j] */
printf(" %3d", k[i][l]);
printf("\n");
}
CharToOem("Суммарное количество хлебных изделий"
" по каждому магазину",buf);
printf("\n %s \n",buf);
for( i = 0 ; i < n ; i++ ) /* заголовок цикла вывода sk[i] */
{
printf(" %d \n", skol[i]);
}
CharToOem("Суммарная масса кондитерских изделий"
" по каждому магазину",buf);
printf("\n %s \n",buf);
for( i = 0 ; i < n ; i++ ) /* заголовок цикла вывода sm[i] */
{
printf(" %5.2f \n", sm[i]);
}
getch( );
}
2 5 4 – количество магазинов, ассортименты;
125 138 239 212 92 – количества изделий в первый магазин;
25.9 23.2 38.1 15.4 – массы изделий в первый магазин;
83 65 58 42 34 – количества изделий во второй магазин;
56.2 14.8 56.1 17.8 – массы изделий во второй магазин.
Под закрывающей скобкой приведены исходные данные для решения задачи.
Результаты решения представлены в приложении 9.5.