나는 이와 같은 입력 파일에서 행렬을 가져 오는 프로그램을 작업 중입니다. 여기서 첫 번째 행은 행렬의 매개 변수를 나타냅니다. 행, 열, 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
이제 이상한 clomuns (예 : 7 4 1)를 가져 와서 거꾸로 인쇄해야합니다. 3x3 행렬이 있으면 다음과 같이 보일 것입니다 (1 4 7).
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 3|4 5 6|7 8 9 ----> 7 2 9|4 5 6|1 8 3
좋아, 방금지도 인덱싱에 대해 알아 냈으므로 이제 배열의 각 위치는 matrix [j + (i * r)]로 표시됩니다. 예를 들어 위의 3x3 행렬에서 첫 번째 위치는 다음과 같습니다. matrix [1+ (0 * 3)], 4 번째 위치는 행렬 [1+ (1 * 3)] 등이됩니다.
이제 내 질문은 열의 반대 위치를 인덱싱하는 방법입니다.
코드 업데이트 :
for(int i = 0; i < r; i++){
for(int j = 1; j < c; j++){
if(i%2!=0){
matrix[j+i*r] = ....;
}
}
}
두 경우 모두 matrix [i]를 행렬에서 더 위쪽에있는 요소로 대체하려고합니다.
n n
1 2 3
4 5 6
7 8 9
홀수 값을 대체하는이 예에서는 1과 7을 전환해야합니다. 인덱스의 차이는 6입니다. 그러나 이것은 행렬 차원에 따라 다릅니다. 일반 공식은 다음과 같습니다.
n^2 - n - r*(2n) + i
여기서 r은 현재 행입니다. 행렬을 뒤집기 때문에 (nn % 2) / 2까지만 행을 수행하면됩니다.
여기에 몇 가지 파이썬 코드가 있습니다.
for i in range(0,int((matrixdim-matrixdim%2)/2)*matrixdim):
if ((i-r)%2) == 0:
temp = matrix[i]
matrix[i] = matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i]
matrix[matrixdim*matrixdim - matrixdim - r*2*matrixdim + i] = temp
if ((i+1)%matrixdim) == 0:
r += 1
i, j 표기법 사용
for i in range(0,int((matrixdim-matrixdim%2)/2)):
for j in range(0, matrixdim):
pos = j + matrixdim*i
temp = matrix[pos]
if j%2 == even:
matrix[pos] = matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos]
matrix[matrixdim*matrixdim - matrixdim - i*2*matrixdim + pos] = temp
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다