Не могу понять в чем причина. Должно выводить матрицу и вектор размерностью которую задаешь сам. Подскажите ошибку пожалуйста.
// 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");
}
Когда запускаю программу, я могу ввести размерность, но не выводит матрицу и вектор.
Ваша функция PrintMatrix принимает три аргумента:
По Вашей задумке, если я верно разобрался в коде, функция ProcessInitialization имеет аргумент int Size, который хранит количество строк/столбцов матрицы. Но дело в том, что вы передаёте копию переменной Size, и при выходе из функции, разумеется, получаете значение переменной, которое было до вызова функции. Вам нужно изменить объявление и реализацию функции ProcessInitialization следующим образом:
void ProcessInitialization(double* &pMatrix, double* &pVector, double*
&pResultVector, int &Size)
Как Видите, я исправил крайний аргумент int Size следующим образом:
int &Size
, добавив ему передачу по ссылке. В результате, после этого исправления, код начинает выдавать результат:
Отследите в отладчике переменную Size: вы передаете ее в процедуру инициализации по значению, поэтому ее новое значение сохраняется только внутри процедуры, и в main() она всегда равна 0 (ваша инициализация в момент объявления).
Используйте передачу переменной по ссылке.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне нужно составить через спецификации запрос, в котором я исключу из выборки несколько ID
Использую библиотеку FrescoВыкидывает ошибку: