Не верный вывод массива В - C (СИ)
Формулировка задачи:
Всем доброго дня! Есть программка на Си, нормально работает только массив В не правильно считает, может кто подскажет:
#include < stdio.h >
#include < iomanip >
using namespace std;
void printMatrix (double arr[ ][ 4 ],double brr[][4],double s=0)
{setlocale(LC_ALL, "Russian");
printf("Массив А(Первый массив)");
printf("\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%3.1f", arr[ i ][ j ]);
printf(" ");
s=s+arr[i][j];
brr[i][j]=arr[i][j]/s;
}
printf("\n");
}
printf("Сумма элементов массива");
printf("\n");
printf("%.1f",s);
printf("\n");
printf("Массив B(Второй преобразованный массив)");
printf("\n");
for (int i=0;i<4;i++)
{
for (int j=0;j<4;j++)
{printf("%2.2f",brr[i][j]);
printf(" ");
}
printf("\n");
}
printf("\n");
}
int main ( void )
{
double arr[ 4 ][ 4 ] = {{1.0,2.1,0.6,4.0,},{5.0,6.0,12.4,6.1},{-9.6,-9.1,11.0,6.4},{1.3,1.4,15.0,16.0}};
double brr[4][4];
printMatrix( arr, brr );
system( "pause > nul" );
return 0;
}Решение задачи: «Не верный вывод массива В»
textual
Листинг программы
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
printf("%3.1f", arr[ i ][ j ]);
printf(" ");
s=s+arr[i][j];
//brr[i][j]=arr[i][j]/s; //тут мы еще не знаем сумму всех элементов
}
printf("\n");
}
//добавить цикл
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
brr[i][j]=arr[i][j]/s; //а тут мы уже знаем сумму всех элементов и формируем новую матрицу
}
}
Объяснение кода листинга программы
- В коде есть два вложенных цикла for. Первый цикл идет по элементам первого столбца матрицы, а второй - по элементам второго столбца.
- Внутри циклов происходит печать элементов матрицы с форматированием до 3 знаков после запятой. Затем элемент матрицы суммируется в переменную s.
- В первой части кода не выполняется деление элементов матрицы на сумму, поскольку значение переменной s еще не определено.
- Во второй части кода происходит деление каждого элемента матрицы на значение переменной s, которое уже определено. Результат сохраняется в новой матрице brr.