Студопедия

Главная страница Случайная страница

Разделы сайта

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






Листинг 6.4






 

#include < fstream.h>

#include < iomanip.h>

 

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 < ncol; j++) fin > > 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++) // контрольный ввод

{

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

cout < < “| ” < < 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. Параллельно с написанием программы задать тестовые примеры, которые проверяют все ветви алгоритма и возможные диапазоны значений исход­ных данных. Исходные данные удобнее формировать в файле (по крайней мере, при отладке), не забывая проверять в программе успешность его от­крытия.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.