Mazamin

Transpose Array V2

Jan 20th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 16
  4. #define MAX_STR_LEN 64
  5.  
  6. FILE * my_fopen(char *);
  7. void get_array(int [MAX][MAX], int *, int *);
  8. void put_array(int [][MAX], int, int);
  9. void transpose_array(int [][MAX], int *, int *);
  10.  
  11. main()
  12. {
  13.     int array[MAX][MAX], rows=0, columns;
  14.     get_array(array, &rows, &columns);
  15.     transpose_array(array, &rows, &columns);
  16.     put_array(array, rows, columns);
  17.     return 0;
  18. }
  19.  
  20. FILE * my_fopen(char * mode){
  21.     FILE * fp;
  22.     char filename[MAX_STR_LEN];
  23.     printf("Insert %s file name: ", (mode[0]=='r')?("input"):("output"));
  24.     scanf("%s", filename);
  25.     if((fp=fopen(filename, mode))==NULL)
  26.         abort();
  27.     return fp;
  28. }
  29.  
  30. void get_array(int array[MAX][MAX], int * r, int * c){
  31.     int i, j, temp;
  32.     FILE * fp=my_fopen("r");
  33.     fscanf(fp, "%d", c);
  34.     while(feof(fp)==0)
  35.         if(1==fscanf(fp, "%d", &temp))
  36.             ++*r;
  37.     *r/=*c;
  38.     rewind(fp);
  39.     fscanf(fp, "%d", &temp);
  40.     for(i=0;i<*r;i++)
  41.         for(j=0;j<*c;j++)
  42.             fscanf(fp, "%d", &array[i][j]);
  43.     fclose(fp);
  44. }
  45.            
  46. void transpose_array(int array[][MAX], int * m, int * n)
  47. {
  48.     int i, j;
  49.     *m^=*n^=*m^=*n;
  50.     for(i=0;i<*m;i++)
  51.         for(j=i+1;j<*n;j++)
  52.             array[i][j]^=array[j][i]^=array[i][j]^=array[j][i];
  53. }
  54.  
  55. void put_array(int array[][MAX], int r, int c){
  56.     int i, j;
  57.     FILE * fp=my_fopen("w");
  58.     for(i=0;i<r;i++)
  59.         for(j=0;j<c;j++)
  60.             fprintf(fp, "%d%c", array[i][j], (j==c-1)?('\n'):('\t'));
  61.     fclose(fp);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment