Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#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. Параллельно с написанием программы задать тестовые примеры, которые проверяют все ветви алгоритма и возможные диапазоны значений исходных данных. Исходные данные удобнее формировать в файле (по крайней мере, при отладке), не забывая проверять в программе успешность его открытия.
Дата публикования: 2015-10-09; Прочитано: 191 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!