Листинг 6.4

#include

#include

int main()

{

setlocale( LC_ALL, "Russian" );

ifstream fin(“input.txt” , ios :: in | ios :: nocreate);

if (!fin)

{

cout << “ Файл input.txt не найден.” << endl; return 1;

}

int nrow, ncol;

fin >> nrow >> ncol; // ввод размерности массива

int i, j;

int **a = new int *[nrow]; /* выделение памяти под массив */

for(i = 0; i < nrow; i++) a[i] = new int [ncol];

for (i = 0; i < nrow; i++) // ввод массива

for (j = 0; j > a[i][j];

long *sum = new long [nrow] /* массив сумм элементов строк */

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

{

sum[i] = 0;

for (j = 0; j < ncol; j++) sum[i] += a[i][j];

}

for (i = 0; i < nrow; i++) // контрольный ввод

” << sum[i] << endl;

cout << endl;

long buf_sum;

int nmin, buf_a;

for (i = 0; i < nrow - 1; i++) // упорядочивание

{

nmin = i;

for (j = i + 1; j < nrow; j++)

if (sum[j] < sum[nmin]) nmin = j;

buf_sum = sum[i]; sum[i] = sum[nmin]; sum[nmin] = buf_sum;

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

{

buf_a = a[i][j]; a[i][j] = a[nmin][j]; a[nmin][j] = buf_a;

}

}

for (i = 0; i < nrow; i++) /* вывод упорядоченной матрицы */

{

for (j = 0; j < ncol; j++) cout << setw(4) << a[i][j] << “ ”;

cout << endl;

}

return 0;

}

В программе используются две буферные переменные: buf_sum, через которую осу­ществляется обмен двух значений сумм, имеет такой же тип, что и сумма, а для обмена значений элементов массива определена переменная buf_a того же типа, что и элементы массива.

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

Для контроля вместе с исходным массивом рядом с каж­дой строкой выводится сумма её элементов, отделенная вертикальной чертой.

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



Рекомендации по порядку создания программы.

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

2. Записать алгоритм сначала в общем виде, стремясь разбить его на простую по­следовательность шагов, а затем детализировать каждый шаг.

3. Написать программу. При написании программы рекомендуется:

- давать переменным понятные имена;

- не пренебрегать содержательными комментариями;

- использовать промежуточную печать вычисляемых величин в удобном формате;

- при написании вложенных циклов следить за отступами;

- операторы инициализации накапливаемых в цикле величин задавать непосредственно перед циклом, в котором они вычисляются.

4. Параллельно с написанием программы задать тестовые примеры, которые проверяют все ветви алгоритма и возможные диапазоны значений исход­ных данных. Исходные данные удобнее формировать в файле (по крайней мере, при отладке), не забывая проверять в программе успешность его от­крытия.


7968381271994895.html
7968464907564787.html
    PR.RU™