Не выводит матрицу и вектор. С++ [закрыт]

114
23 ноября 2019, 04:00

Не могу понять в чем причина. Должно выводить матрицу и вектор размерностью которую задаешь сам. Подскажите ошибку пожалуйста.

// Function for simple initialization of matrix and vector elements
void DummyDataInitialization(double* pMatrix, double* pVector, int Size)
{
int i, j; // Loop variables 
for (i = 0; i < Size; i++)
{
pVector[i] = 1;
for (j = 0; j < Size; j++)
pMatrix[i * Size + j] = i;
}
}
// Function for memory allocation and data initialization
void ProcessInitialization(double* &pMatrix, double* &pVector, double* 
&pResultVector, int Size) {
// Setting the size of initial matrix and vector
do
{
printf("\nEnter size of the initial objects: ");
scanf("%d", &Size); 
printf("\nChosen objects size = %d", Size); 
if (Size <= 0)   
printf("\nSize of objects must be greater than 0!\n"); 
}
while (Size <= 0);
// Memory allocation
pMatrix = new double [Size * Size];
pVector = new double [Size];
pResultVector = new double [Size];

// Initialization of matrix and vector elements
DummyDataInitialization(pMatrix, pVector, Size);
}
// Function for formatted matrix output
void PrintMatrix(double* pMatrix, int RowCount, int ColCount)
{
int i, j; // Loop variables
for (i = 0; i < RowCount; i++)
{
 for (j = 0; j < ColCount; j++)
 printf("%7.4f ", pMatrix[i * ColCount + j]);
 printf("\n");
}
}

// Function for formatted vector output
void PrintVector(double* pVector, int Size)
{
 int i;
 for (i = 0; i < Size; i++)
 printf("%7.4f ", pVector[i]);
 printf("\n");
}
int main(int argc, char *argv[]) { 
double *pMatrix=NULL, *pVector=NULL,  *pResultVector=NULL;
int Size=0, RowCount=0, ColCount=0;
// Memory allocation and data initialization
ProcessInitialization(pMatrix, pVector, pResultVector, Size);
PrintMatrix( pMatrix, RowCount, ColCount);
PrintVector(pVector, Size);

 // Matrix and vector output   
 printf("Initial Matrix: \n");  
 PrintMatrix(pMatrix, Size, Size);   
 printf("Initial Vector: \n"); 
 PrintVector(pVector, Size);
 _getch();

  system("pause");
}

Когда запускаю программу, я могу ввести размерность, но не выводит матрицу и вектор.

Answer 1

Ваша функция PrintMatrix принимает три аргумента:

  • сама матрица
  • кол-во строк
  • кол-во столбцов

По Вашей задумке, если я верно разобрался в коде, функция ProcessInitialization имеет аргумент int Size, который хранит количество строк/столбцов матрицы. Но дело в том, что вы передаёте копию переменной Size, и при выходе из функции, разумеется, получаете значение переменной, которое было до вызова функции. Вам нужно изменить объявление и реализацию функции ProcessInitialization следующим образом:

void ProcessInitialization(double* &pMatrix, double* &pVector, double*
&pResultVector, int &Size)

Как Видите, я исправил крайний аргумент int Size следующим образом:

int &Size

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

Answer 2

Отследите в отладчике переменную Size: вы передаете ее в процедуру инициализации по значению, поэтому ее новое значение сохраняется только внутри процедуры, и в main() она всегда равна 0 (ваша инициализация в момент объявления).

Используйте передачу переменной по ссылке.

READ ALSO
Проясните использование alignof()

Проясните использование alignof()

Есть буфер, реализованный в виде

85
Spring Data JPA: Specification

Spring Data JPA: Specification

Мне нужно составить через спецификации запрос, в котором я исключу из выборки несколько ID

121
Android Error java.lang.NoClassDefFoundError при запуске

Android Error java.lang.NoClassDefFoundError при запуске

Использую библиотеку FrescoВыкидывает ошибку:

137
Не срабатывает PreUpdate в Spring Data

Не срабатывает PreUpdate в Spring Data

Есть вот такой класс:

116