Я работаю над программой, которая берет матрицу из входного файла следующим образом. где первая строка представляет параметры матрицы - строки, столбцы, 0 для изменения нечетных столбцов и 1 для изменения четных столбцов
5 5 0
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
, и теперь мне нужно взять нечетные кломун (пример: 7 4 1) и распечатать его в обратном направлении, поэтому это будет выглядеть так (1 4 7), если бы у меня была матрица 3x3, она выглядела бы так:
1 2 3
4 5 6
7 8 9
выходная матрица с нечетными столбцами, напечатанными назад
7 2 9
4 5 6
1 8 3
, и это код, который у меня есть до сих пор
int r = 0, c = 0, odds = 0,n = 0,i,j;
FILE *fp,*fp2;
fp = fopen(argv[1],"r");
fp2 = fopen(argv[2],"w");
if(!fp){
printf("file doesnt exist\n");
}
if(!fp2){
printf("file doesnt exist\n");
}
fscanf(fp,"%d %d %d", &r, &c, &odds);
n = r *c;
int* matrix= (int*)malloc(r*c* sizeof(int));
for(int i = 0; i < n; i++)
{
fscanf(fp,"%d",&matrix[i]);
}
if(odds == 0){
for(int i = 0; i < n; i++){
if(i%2==0){
matrix[i] = i;
}
}
}else if(odds == 1){
for(int i = 0; i < n; i++){
if(i%2!=0){
matrix[i] = ;
}
}
}
for(i = 0;i < n; i++)
{
if(i % s == 0 ){
fprintf(fp2,"\n");
}
fprintf(fp2,"%d ",matrix[i]);
}
fclose(fp);
fclose(fp2);
return 0;
}
и моя проблема заключается в обратном использовании cols, что должно произойти здесь
if(odds == 0){
for(int i = 0; i < n; i++){
if(i%2==0){
matrix[i] = i;
}
}
}else if(odds == 1){
for(int i = 0; i < n; i++){
if(i%2!=0){
matrix[i] = ;
}
}
}
1-й, если для печати четные столбцы в обратном направлении и 2-й - для нечетных столбцов, и, как вы можете видеть, матрица в моей программе представлена обычным массивом, который был не моей идеей, а учителями, поэтому он должен работать следующим образом
1 2 3|4 5 6|7 8 9 ----> 7 2 9|4 5 6|1 8 3
Хорошо, я только что узнал об индексировании карты, так что теперь каждая позиция в массиве представлена в виде матрицы [j + (i * r)], поэтому, например, первая позиция в матрице 3x3 выше будет выглядеть примерно так: matrix [1+ (0 *) 3)], 4-е место будет матрица [1+ (1 * 3)] et * 102 7 * ...
Итак, теперь мой вопрос заключается в том, как проиндексировать противоположное положение в столбце.
обновление кода:
for(int i = 0; i < r; i++){
for(int j = 1; j < c; j++){
if(i%2!=0){
matrix[j+i*r] = ....;
}
}
}