Я пишу фрагмент кода, который использует структуру и 5 предопределенных функций, у меня возникают проблемы при передаче значений входного 2d-массива по выбранному индексу в новый 2d-массив.
Я включил свои функции и код для функции, с которой у меня возникают трудности.
struct matrix
{
char name;
int mValues[10][10];
int ncols;
int nrows;
};
void matrixInput(struct matrix *matA);
void matrixDisplay(struct matrix matA);
void matrixTrace(struct matrix matA, int *trace);
void matrixDeterminant(struct matrix m1, struct matrix *m2, int * determinant);
///function body
void matrixDeterminant(struct matrix m1, struct matrix *m2, int * determinant)
{
int i, j, k, l;
FILE* fin;
fin = fopen("marks.txt", "r");
if(((m1.nrows)>2))
{
printf("\n\nFinding the deterinamt now.\n");
if(fin!=NULL)
{
do
{
printf("Please assign a letter to name your matrix A - Z : ");
scanf(" %c", &((*m2).name));
}
while((((*m2).name)<'A') || ((*m2).name)>'Z');
do
{
printf("\n\nEnter the row where you want to start the 2x2 matrix.\nNumber needs to be between 1 and %d : ", ((m1).nrows-1));
scanf("%d", &k);
}
while((k) >= ((m1).nrows));
do
{
printf("\n\nEnter the column where you want to start you 2x2 mtrix.\nNumber needs to be between 1 and %d : ", ((m1).ncols-1));
scanf("%d", &l);
}
while((l) >= ((m1).ncols));
}
for(i=0; i<2; i++,k++)
{
printf("Row %d:\t", i+1);
for(j=0; j<2; j++,l++)
{
((*m2).mValues[i][j]) = ((m1).mValues[k-1][l-1]);
printf("%d\t",((*m2).mValues[i][j]));
}
printf("\n");
}
}
/// Input/Output
Please assign a letter to name your matrix A - Z : H
Please enter the number of rows in matrix H > 1 < 10 :8
Please enter the number of cols in matrix H > 1 < 10 :8
Matrix H has 8 rows and 8 columns and contains:
Row 1: 55 7 40 30 32 45 43 77
Row 2: 72 1 20 65 85 40 46 22
Row 3: 45 77 88 32 30 55 59 99
Row 4: 72 37 33 18 44 73 44 12
Row 5: 88 2 11 55 7 40 30 32
Row 6: 24 73 13 99 99 22 45 77
Row 7: 88 32 22 11 98 34 38 37
Row 8: 33 18 44 73 22 45 77 88
Trace of matrix H = 317
Finding the deterinamt now.
Please assign a letter to name your matrix A - Z : F
Enter the row where you want to start the 2x2 matrix.
Number needs to be between 1 and 7 : 3
Enter the column where you want to start you 2x2 mtrix.
Number needs to be between 1 and 7 : 3
Row 1: 88 32
Row 2: 44 73 // This has shifted 2 columns.
Process returned 0 (0x0) execution time : 14.807 s
Press ENTER to continue.
Первая функция позволяет имени пользователя и определять размеры матрицы, которая затем заполняется из файла .txt, содержащего целые числа 10x10.
Вторая функция отображает матрицу итретий вычисляет след.
Четвертая функция просит пользователя выбрать матрицу 2x2, которая является подмножеством исходной матрицы.Содержимое матрицы 2x2 должно храниться в новой структурной матрице вместе с ее именем и размером.
То, что я «думаю», что я сделал, это спросить пользователя, где запустить подматрицу и сохранить значения в k и l, затем я использую эти значения в качестве индекса.
Там, где я считаю, что моя проблема возникает в передаче этих значений в новую матрицу, во вложенных циклах for я увеличил i и j, чтобы проиндексировать новую матрицу, а l и k, чтобы проиндексировать матрицу, которой я передаю значенияот.
ПРИМЕЧАНИЕ. Я никогда не видел, чтобы 2 значения увеличивались в цикле for раньше, поэтому я ожидаю, что он не выполняет то, что, как мне кажется, он делает, поскольку строка 2 подматрицы сместила 2 столбца.
Любая помощь будет оценена.