Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int num=0;
- int PROCESS2(int *, int);
- int PROCESS1(char * f ){
- FILE *f1;
- char m[16];
- int c=0;
- int ind=0;
- unsigned int *k;
- int n =0;
- int *outmass;
- int agzi;
- int NumOfMassiveElem=0;
- setlocale(0, "");
- if((f1=fopen(f,"r"))==NULL){
- return 1;
- }
- while(fgets(m, 16, f1)){
- if(n==0){
- if(m[0]>48 && m[0]<58){
- num= m[0]-48;
- if(m[1]>47 && m[1]<58 && num!=1 || num==1 && m[1]>54 && m[1]<58 || m[2]>47 && m[2]<58){
- return 2;
- }
- else if(num==1){
- if(m[1]>47 && m[1]<55 ){
- num = num*10+m[1]-48;
- }
- else{
- return 3;
- }
- }
- }
- else if(m[0]==48){
- return 3;
- }
- else {
- return 4;
- }
- c= num+2;
- if(num >1 && num<9){
- k = (unsigned int *) calloc(num, 1);
- }
- else if(num<17){
- k = (unsigned int *) calloc(num, 2);
- ind=1;
- }
- }
- else if (n>1 && n <c){
- int i;
- k[n-2] = 0;
- for(i=0; i<(num+1); i++)
- {
- if(i<num){
- if(m[i]!='-' && m[i]!='1'){
- return 5;
- }
- else if(m[i]=='1') {
- if(ind==0){
- int a = 1;
- int z= 0;
- while (z<(8-i-1)){
- a *=2; z++;
- }
- k[n-2] += a;
- }
- else if(ind==1){
- int a = 1;
- int z= 0;
- while (z<(16-i-1)){
- a *=2; z++;
- }
- k[n-2] += a;
- }
- }
- }
- else if(i==num){
- if(m[i]!=10 && m[i]!=0){
- return 6;
- }
- }
- }
- printf(" %d", k[n-2]);
- }
- else if(n==c){
- return 7;
- }
- n++;
- }
- fclose (f1);
- if(n<(num+2)){
- return 8;
- }
- printf("\n");
- printf("Matrix in OP:\n");
- int j=0;
- if(ind==0){
- int w [8];
- int f;
- int v;
- int a1;
- for(f=0; f<num; f++){
- a1=k[f];
- for(j=0; j<8; j++){
- w[j] = a1%2;
- a1=a1/2;
- }
- for(j=7; j>-1; j--){
- printf(" %d", w[j]);
- }
- printf("\n");
- }
- }
- else if(ind==1){
- int w [16];
- int f;
- int v;
- int a1;
- for(f=0; f<num; f++){
- a1=k[f];
- for(j=0; j<16; j++){
- w[j] = a1%2;
- a1=a1/2;
- }
- for(j=15; j>-1; j--){
- printf(" %d", w[j]);
- }
- printf("\n");
- }
- }
- PROCESS2(k,num);
- //printf("\n");
- //for(agzi=0;agzi<IndexOfOutMassive;agzi++){
- // printf("%d ", out[agzi]);
- //}
- //for(agzi=0;agzi<16;agzi++){
- // printf("%d", agz[agzi]);
- //}
- return 0;
- }
- int PROCESS2(int *MassiveForParse, int LengthOfMatrix){
- int agz;
- int iter;
- int bitshift;
- int IndexOfOutMassive=0;
- if(num < 9){ //If length of matrix <= 8
- int out[num*8];
- for(iter=0; iter < LengthOfMatrix; iter++){
- for(bitshift=1; bitshift < 9; bitshift++){
- if((MassiveForParse[iter] >> bitshift)%2 == 1){
- out[IndexOfOutMassive] = iter+1;
- out[IndexOfOutMassive+1] = 8-bitshift;
- IndexOfOutMassive += 2;
- printf("%d -> %d", iter+1, 8-bitshift);
- printf("\t");
- }
- }
- printf("\n");
- }
- for(agz=0;agz<IndexOfOutMassive;agz++){
- printf("%d ", out[agz]);
- }
- PROCESS4(out,IndexOfOutMassive);
- } else { //If length of matrix <=16 && >8
- int out[num*16];
- for(iter=0; iter < LengthOfMatrix; iter++){
- for(bitshift=1; bitshift < 17; bitshift++){
- if((MassiveForParse[iter] >> bitshift)%2 == 1){
- out[IndexOfOutMassive] = iter+1;
- out[IndexOfOutMassive+1] = 16-bitshift;
- IndexOfOutMassive += 2;
- printf("%d -> %d", iter+1, 16-bitshift);
- printf("\t");
- }
- }
- printf("\n");
- }
- for(agz=0;agz<IndexOfOutMassive;agz++){
- printf("%d ", out[agz]);
- }
- PROCESS4(out,IndexOfOutMassive);
- }
- return 0;
- }
- int PROCESS4(int mass[], int Index){
- int i;
- printf("\n");
- for(i=0;i<Index;i+=2){
- printf("%d -> %d \n", mass[i], mass[i+1]);
- }
- return 0;
- }
- int PROCESS3( int *k, int num, int dl){
- int i=0;
- int n=0;
- // f=fopen("res.txt","w");
- // fprintf(f, "Ñïèñîê äóã");
- // fprintf(f,"Èñõîäíàÿ âåðøèíà | Âõîäíàÿ âåðøèíà");
- // if(dl==8){
- //
- // for(i=0; i<num; i++){
- // fprintf(f, " ");
- // if(n==0){
- // n=1;
- // }
- // else if(n==1){
- // n=0;
- // fprintf(f, "\n");
- // }
- // }
- // return 1;
- // }
- // else if (dl==16){
- // for(i=0; i<num; i++){
- // fprintf(f, " ");
- // if(n==0){
- // n=1;
- // }
- // else if(n==1){
- // n=0;
- // fprintf(f, "\n");
- // }
- // }
- // return 1;
- // }
- // return 0;
- }
- int main(void)
- {
- char *file;
- setlocale(0,"");
- printf("Enter file with matrix: ");
- scanf("%s", file);
- printf("\n");
- int i = PROCESS1(file);
- printf("\n");
- if(i == 0){
- printf("It's OK 1");
- }
- else if(i==1){
- printf ("File not exist!!!\n");
- }
- else if(i==2){
- printf("Length of matrix > 16.");
- }
- else if(i==3){
- printf("Length of matrix < 1.");
- }
- else if(i==4){
- printf("Length of matrix not integer!!");
- }
- else if(i==5){
- printf("Matrix need consist: '-' and '1'.");
- }
- else if(i==6){
- printf("Неверный формат записи матрицы! После %d элементов не должно быть символов", num);
- }
- else if(i==7){
- printf("Неверный формат записи матрицы! После %d строк матрицы не должно быть символов", num);
- }
- else if(i==8){
- printf("Недостаточно данных для матрицы с заданной размерностью %d", num);
- }
- printf("\n");
- return 0;
- }
Add Comment
Please, Sign In to add comment