Guest User

Untitled

a guest
Dec 16th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int num=0;
  5.  
  6.  
  7. int PROCESS2(int *, int);
  8. int PROCESS1(char * f ){
  9. FILE *f1;
  10. char m[16];
  11. int c=0;
  12. int ind=0;
  13. unsigned int *k;
  14. int n =0;
  15. int *outmass;
  16. int agzi;
  17. int NumOfMassiveElem=0;
  18. setlocale(0, "");
  19. if((f1=fopen(f,"r"))==NULL){
  20. return 1;
  21.  
  22. }
  23. while(fgets(m, 16, f1)){
  24. if(n==0){
  25.  
  26.     if(m[0]>48 && m[0]<58){
  27.     num= m[0]-48;
  28.  
  29.     if(m[1]>47 && m[1]<58 && num!=1 || num==1 && m[1]>54 && m[1]<58 || m[2]>47 && m[2]<58){
  30.  
  31.           return 2;
  32.          }
  33.     else if(num==1){
  34.         if(m[1]>47 && m[1]<55 ){
  35.     num = num*10+m[1]-48;
  36.     }
  37.     else{
  38.         return 3;
  39.     }
  40.          }
  41.  
  42.     }
  43.     else if(m[0]==48){
  44.     return 3;
  45.     }
  46.     else {
  47.    return 4;
  48.          }
  49.          c= num+2;
  50. if(num >1 && num<9){
  51.     k = (unsigned int *) calloc(num, 1);
  52.        }
  53. else if(num<17){
  54.     k = (unsigned int *) calloc(num, 2);
  55.     ind=1;
  56.      }
  57.  
  58. }
  59. else if (n>1 && n <c){
  60.         int i;
  61.  k[n-2] = 0;
  62.  
  63.   for(i=0; i<(num+1); i++)
  64.   {
  65.         if(i<num){
  66.                 if(m[i]!='-' && m[i]!='1'){
  67.           return 5;
  68.                 }
  69.                 else if(m[i]=='1') {
  70.                 if(ind==0){
  71.           int a = 1;
  72.           int z= 0;
  73.           while (z<(8-i-1)){
  74.                 a *=2; z++;
  75.         }
  76.         k[n-2] += a;
  77.  
  78.                 }
  79.                 else if(ind==1){
  80.          int a = 1;
  81.           int z= 0;
  82.           while (z<(16-i-1)){
  83.                 a *=2; z++;
  84.         }
  85.  
  86.         k[n-2] += a;
  87.                 }
  88.                 }
  89.           }
  90.           else if(i==num){
  91.  
  92.                 if(m[i]!=10 && m[i]!=0){
  93.         return 6;
  94.                   }
  95.         }
  96.   }
  97. printf(" %d", k[n-2]);
  98.  
  99. }
  100. else if(n==c){
  101.                 return 7;
  102. }
  103.  
  104.  n++;
  105.  
  106. }
  107.    fclose (f1);
  108. if(n<(num+2)){
  109.         return 8;
  110. }
  111. printf("\n");
  112. printf("Matrix in OP:\n");
  113. int j=0;
  114. if(ind==0){
  115.         int w [8];
  116.         int f;
  117.         int v;
  118.         int a1;
  119.         for(f=0; f<num; f++){
  120.                 a1=k[f];
  121.         for(j=0; j<8; j++){
  122.                 w[j] = a1%2;
  123.                 a1=a1/2;
  124.  
  125.  
  126.         }
  127.         for(j=7; j>-1; j--){
  128.                 printf(" %d", w[j]);
  129.  
  130.         }
  131.         printf("\n");
  132. }
  133.  
  134. }
  135. else if(ind==1){
  136.         int w [16];
  137.         int f;
  138.         int v;
  139.         int a1;
  140.         for(f=0; f<num; f++){
  141.                 a1=k[f];
  142.         for(j=0; j<16; j++){
  143.                 w[j] = a1%2;
  144.                 a1=a1/2;
  145.  
  146.  
  147.         }
  148.         for(j=15; j>-1; j--){
  149.                 printf(" %d", w[j]);
  150.  
  151.         }
  152.         printf("\n");
  153. }
  154.  
  155. }
  156.  
  157.  
  158. PROCESS2(k,num);
  159. //printf("\n");
  160. //for(agzi=0;agzi<IndexOfOutMassive;agzi++){
  161.  //   printf("%d ", out[agzi]);
  162. //}
  163. //for(agzi=0;agzi<16;agzi++){
  164. //    printf("%d", agz[agzi]);
  165. //}
  166. return 0;
  167.  
  168.  
  169. }
  170. int PROCESS2(int *MassiveForParse, int LengthOfMatrix){
  171.     int agz;
  172.     int iter;
  173.     int bitshift;
  174.     int IndexOfOutMassive=0;
  175.     if(num < 9){ //If length of matrix <= 8
  176.         int out[num*8];
  177.         for(iter=0; iter < LengthOfMatrix; iter++){
  178.             for(bitshift=1; bitshift < 9; bitshift++){
  179.                 if((MassiveForParse[iter] >> bitshift)%2 == 1){
  180.                 out[IndexOfOutMassive] = iter+1;
  181.                 out[IndexOfOutMassive+1] = 8-bitshift;
  182.                 IndexOfOutMassive += 2;
  183.                 printf("%d -> %d", iter+1, 8-bitshift);
  184.                 printf("\t");
  185.             }
  186.             }
  187.             printf("\n");
  188.         }
  189.         for(agz=0;agz<IndexOfOutMassive;agz++){
  190.             printf("%d ", out[agz]);
  191.         }
  192.             PROCESS4(out,IndexOfOutMassive);
  193.     } else { //If length of matrix <=16 && >8
  194.         int out[num*16];
  195.         for(iter=0; iter < LengthOfMatrix; iter++){
  196.             for(bitshift=1; bitshift < 17; bitshift++){
  197.                 if((MassiveForParse[iter] >> bitshift)%2 == 1){
  198.                     out[IndexOfOutMassive] = iter+1;
  199.                     out[IndexOfOutMassive+1] = 16-bitshift;
  200.                     IndexOfOutMassive += 2;
  201.                     printf("%d -> %d", iter+1, 16-bitshift);
  202.                     printf("\t");
  203.                 }
  204.             }
  205.             printf("\n");
  206.         }
  207.         for(agz=0;agz<IndexOfOutMassive;agz++){
  208.             printf("%d ", out[agz]);
  209.         }
  210.         PROCESS4(out,IndexOfOutMassive);
  211.     }
  212. return 0;
  213. }
  214.  
  215. int PROCESS4(int mass[], int Index){
  216.     int i;
  217.     printf("\n");
  218.     for(i=0;i<Index;i+=2){
  219.     printf("%d -> %d \n", mass[i], mass[i+1]);
  220.     }
  221.     return 0;
  222. }
  223. int PROCESS3( int *k, int num, int dl){
  224.         int i=0;
  225.         int n=0;
  226. //      f=fopen("res.txt","w");
  227. //      fprintf(f, "Ñïèñîê äóã");
  228. //      fprintf(f,"Èñõîäíàÿ âåðøèíà | Âõîäíàÿ âåðøèíà");
  229. //              if(dl==8){
  230. //
  231. //      for(i=0; i<num; i++){
  232. //      fprintf(f, "        ");
  233. //      if(n==0){
  234.  
  235. //      n=1;
  236. //      }
  237. //      else if(n==1){
  238.  
  239. //              n=0;
  240. //              fprintf(f, "\n");
  241. //      }
  242. //      }
  243.  
  244. //      return 1;
  245. //      }
  246. //      else if (dl==16){
  247. //              for(i=0; i<num; i++){
  248. //      fprintf(f, "        ");
  249. //      if(n==0){
  250.  
  251. //      n=1;
  252. //      }
  253. //      else if(n==1){
  254.  
  255. //              n=0;
  256. //              fprintf(f, "\n");
  257. //      }
  258. //      }
  259.  
  260. //      return 1;
  261. //      }
  262. //      return 0;
  263. }
  264.  
  265. int main(void)
  266. {
  267. char *file;
  268. setlocale(0,"");
  269.         printf("Enter file with matrix: ");
  270.         scanf("%s", file);
  271.         printf("\n");
  272.  int  i = PROCESS1(file);
  273. printf("\n");
  274. if(i == 0){
  275.      printf("It's OK 1");
  276.      }
  277. else if(i==1){
  278.      printf ("File not exist!!!\n");
  279.      }
  280. else if(i==2){
  281.      printf("Length of matrix > 16.");
  282.      }
  283. else if(i==3){
  284.      printf("Length of matrix < 1.");
  285.      }
  286.      else if(i==4){
  287.    printf("Length of matrix not integer!!");
  288.      }
  289.       else if(i==5){
  290.    printf("Matrix need consist: '-' and '1'.");
  291.      }
  292.           else if(i==6){
  293.         printf("Неверный формат записи матрицы! После %d элементов не должно быть символов", num);
  294.      }
  295.            else if(i==7){
  296.          printf("Неверный формат записи матрицы! После %d строк матрицы не должно быть символов", num);
  297.      }
  298.             else if(i==8){
  299.            printf("Недостаточно данных для матрицы с заданной размерностью %d", num);
  300.      }
  301.  
  302.      printf("\n");
  303.  
  304.         return 0;
  305. }
Add Comment
Please, Sign In to add comment