#c
#c
Вопрос:
Я пытаюсь создать программу, в которой сумма строк и столбцов подсчитывается индивидуально, строки получаются хорошими, но столбцы дают странные результаты. Предполагается, что правильный результат будет выглядеть следующим образом (пример матрицы):
9 1 2 4
2 2 8 0
3 3 3 3
Sum of row 0 is 16
Sum of row 1 is 12
Sum of row 2 is 12
Sum of column 0 is 14
Sum of column 1 is 6
Sum of column 2 is 13
Sum of column 3 is 7
Но у меня получается
Sum of row 0 is 16
Sum of row 1 is 12
Sum of row 2 is 12
Sum of column 0 is 565359518
Sum of column 1 is 32772
Sum of column 2 is 13
Sum of column 3 is 7
#include <iostream>
using namespace std;
int main()
{
int value[3][4];
int sum = 0;
int row, col;
int i, j;
for (int i = 0; i < 3; i ) {
for (int j = 0; j < 4; j ) {
cout << "Enter a value : " << endl;
cin >> value[i][j];
}
}
cout << "Value of the array: " << endl;
for (int i = 0; i < 3; i ) {
for (int j = 0; j < 4; j ) {
cout << value[i][j] << " ";
}
cout << endl;
}
void row_sum(int value[i][j]);
{
int i, j, sum = 0;
for (i = 0; i < 3; i ) {
for (j = 0; j < 4; j ) {
sum = sum value[i][j];
}
cout
<< "Sum of the row "
<< i << " is " << sum
<< endl;
sum = 0;
}
void col_sum(int value[i][j]);
{
int i, j, sum = 0;
for (i = 0; i < 4; i ) {
for (j = 0; j < 4; j ) {
sum = sum value[j][i];
}
cout
<< "Sum of the column "
<< i << " is " << sum
<< endl;
sum = 0;
}
}
return 0;
}
}
(Первоначально это было i = 3, но я изменил его на 4, потому что я думал, что это было неправильно с кодом, но столбец по-прежнему дает странные результаты.)
Комментарии:
1. col sum отсчитывается
i
(илиj
) до 4. Это выходит за рамки дозволенного. Один из них должен быть равен 3 только в зависимости от порядка, который вы считываете из матрицы.2. Кроме того, как написано, у вас есть встроенные функции в функциях? Это не ПАСКАЛЬ, где это законно. Параметр, который вы передаете в свои суммы для значения, должен быть объявлен с постоянными размерами для вашего массива 2 dim. Честно говоря, я не вижу компиляции приведенного выше кода.
3. о, точки с запятой в конце имен функций. Вау. Это будет компилироваться, но на самом деле не имеет функций. Вау, никогда раньше этого не видел. Я предполагаю, что тогда имена этих функций становятся прямыми объявлениями…
4. @MichaelDorgan Я использовал этот пример: geeksforgeeks.org /…
5. @Blazer234 Да, но то, что вы, похоже, упустили из этого примера, так это то, что эти функции определяются вне
main
, а затем вызываются (с аргументами) из него.
Ответ №1:
Я собираюсь сделать то, чего не должен, но вы приложили к этому достаточно усилий, и я хочу показать вам, в чем проблемы с ответом, который работает:
#include <iostream>
using namespace std;
// Use Constants to declare the size of your array to make it easier to iterate in loops.
// Also allows the compiler to know at compile-time the array sizes of functions.
const int ColSize = 4;
const int RowSize = 3;
// Forward declare functions here so that main() knows what they are.
void col_sum(int value[RowSize][ColSize]);
void row_sum(int value[RowSize][ColSize]);
int main()
{
// Replace those nasty magic number 3 and 4s here with constants
int value[RowSize][ColSize];
// Notice I have removed all the unused vars here (i,j,sum, etc.)
// Replace magic numbers
for (int i = 0; i < RowSize; i ) {
for (int j = 0; j < ColSize; j ) {
cout << "Enter a value : " << endl;
cin >> value[i][j];
}
}
cout << "Value of the array: " << endl;
// Replace magic numbers
for (int i = 0; i < RowSize; i ) {
for (int j = 0; j < ColSize; j ) {
cout << value[i][j] << " ";
}
cout << endl;
}
// Actually call the functions...
row_sum(value);
col_sum(value);
return 0;
}
// Make actual functions to be called using our constants.
void row_sum(int value[RowSize][ColSize])
{
// Notice I have removed all the repeated vars here (i,j,sum, etc.)
// They are all declared within the for loops
// Replace magic numbers
for (int i = 0; i < RowSize; i ) {
int sum = 0; // Moved the sum 0 here as we only need it once.
for (int j = 0; j < ColSize; j ) {
sum = value[i][j];
}
cout
<< "Sum of the row "
<< i << " is " << sum
<< endl;
}
}
void col_sum(int value[RowSize][ColSize])
{
// Notice I have removed all the repeated vars here (i,j,sum, etc.)
// They are all declared within the for loops
// Replace magic numbers
for (int i = 0; i < ColSize; i ) {
int sum = 0; // Moved the sum 0 here as we only need it once.
for (int j = 0; j < RowSize; j ) {
sum = sum value[j][i];
}
cout
<< "Sum of the column "
<< i << " is " << sum
<< endl;
}
}
Обратите внимание, как константы значительно упрощают изменение размера циклов for, управление памятью и упрощают чтение кода. Также посмотрите, как объявляются и используются функции.