Advertisement
ayawaska

Ex1_sadna.c

May 2nd, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.72 KB | None | 0 0
  1. /* Id 200541001
  2. Name: Aviad Hemo*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7. #define N 3
  8. typedef struct dataStrc{
  9.     int i;
  10.     int j;
  11.     int data;
  12.  
  13. }dataStrc;
  14.  
  15. typedef struct node {
  16.     dataStrc node_data;
  17.     struct node *next;
  18.  
  19. }link;
  20.  
  21. int * powerArray(int);
  22. int **multiply_mat(int matA[][N], int matB[][N]);
  23. void matrix_input(int mat[][N]);
  24. void matrix_output(int **mat);
  25. void free_matrix (int **mat, int n);
  26. int threesome(int **mat, int, int);
  27. link * insretNode(link *list,int ,int );
  28. int ** create_din_mat(int, int);
  29. void print_list(link *list);
  30. void free_list(link *list);
  31. void display_arr(int *,int);
  32.  
  33.  
  34. void main(){
  35.  
  36.     int  num, input = 1,rowA,colsA,size,min=1,max=10,i,j;
  37.     int *p1,**din_mat,*arr;
  38.     int matA[N][N],matB[N][N],**matrixC;
  39.     link *head;
  40.     head = (link *) malloc(sizeof(link));
  41.     head->next=NULL;
  42.  
  43.  
  44.     while (input != 0) {
  45.  
  46.         printf("\n -- Menu Selection -- \n");
  47.         printf("0) Quit\n");
  48.         printf("1) PowerArray\n");
  49.         printf("2) Matrix multiplication \n");
  50.         printf("3) Threesome \n");
  51.         scanf_s("%d", &input);
  52.  
  53.         switch (input){
  54.  
  55.         case 0:
  56.         default:
  57.             printf("Goodbye...\n");
  58.             input = 0;
  59.             break;
  60.  
  61.         case 1:
  62.             printf("Your cohise: 'powerArray'\n");
  63.             printf("Enter a vlaue to powerArray function\n");
  64.             scanf_s("%d",&num);
  65.             p1 = powerArray(num);
  66.             free(p1);
  67.             break;
  68.  
  69.         case 2:
  70.             printf("Your choise: 'multiply_mat'\n");
  71.             matrix_input(matA);
  72.             matrix_input(matB);
  73.             matrixC=multiply_mat(matA,matB);
  74.             matrix_output(matrixC);
  75.             free_matrix(matrixC,N);
  76.             break;
  77.  
  78.         case 3:
  79.             printf("please enter row and cols for matrix\n");
  80.             scanf_s("%d%d",&rowA,&colsA);
  81.             din_mat = create_din_mat(rowA,colsA);
  82.             size = threesome(din_mat,rowA,colsA);
  83.             arr= (int *) malloc(size * sizeof(int));
  84.             for(i=0;i<rowA;i++)
  85.                 for(j=0;j<colsA;j++)
  86.                 {
  87.                     srand((unsigned)time(NULL));
  88.                     din_mat[i][j] = (rand() % (max-min)) + min;
  89.                 }
  90.             display_arr(arr,size);
  91.             print_list(head);
  92.             free_list(head);
  93.             free(arr); 
  94.             free_matrix(din_mat,rowA);
  95.             break;
  96.  
  97.  
  98.         }//switch//
  99.     }//While//
  100.  
  101. }//MAIN//
  102.  
  103. int * powerArray(int num){
  104.     int i;
  105.     int *p1;
  106.     p1 = (int *) malloc(num * sizeof(int));
  107.     if (p1)
  108.     {
  109.         p1[0] = 1;
  110.         for(i = 1;i < num;i++)
  111.             p1[i] = p1[i-1] * 2;
  112.         for(i=0; i<num; i++)
  113.  
  114.             printf("%d\t",p1[i]);
  115.  
  116.     }
  117.     return p1;
  118.  
  119. }//powerArray//
  120.  
  121. int ** multiply_mat(int matA[][N], int matB[][N]){
  122.     int **multi,i,j,k,sum=0;
  123.     multi = (int **)malloc(N*sizeof(int));
  124.     for(i=0;i<N;i++)
  125.         multi[i]= (int*)malloc(N*sizeof(int));
  126.  
  127.     for(i=0;i<N;i++)
  128.         for(j=0;j<N;j++){
  129.             for(k=0;k<N;k++)
  130.             {
  131.                 sum+=matA[i][k]*matB[k][j];
  132.             }
  133.             multi[i][j]=sum;
  134.             sum=0;
  135.         }
  136.         return multi;
  137.  
  138. }//multiply_mat//
  139.  
  140. void matrix_input(int mat[N][N]){
  141.     int i,j;
  142.     printf("please enter values to matrix\n");
  143.     for(i=0; i<N; i++)
  144.         for(j=0; j<N;j++)
  145.             scanf_s("%d",&mat[i][j]);
  146.  
  147.  
  148. }//matrix_input//
  149.  
  150. void matrix_output(int **mat){
  151.  
  152.     int i,j;
  153.     for(i=0;i<N;i++)
  154.     {
  155.         for(j=0;j<N;j++)
  156.             printf("%d\t",mat[i][j]);
  157.         printf("\n");
  158.     }
  159.  
  160. }//matrix_output//
  161. void free_matrix (int **matrix, int n){
  162.     int i;
  163.     for(i=0;i<n;i++)
  164.         free(matrix[i]);
  165.     free(matrix);
  166.  
  167. }//free_matrix//
  168.  
  169. int threesome(int **mat, int row, int cols){
  170.     int i,j,k=0,count=0;
  171.     link *list;
  172.     dataStrc *dataArr;
  173.     for(i=0;i<row;i++)
  174.         for(j=0;j<cols;j++)
  175.         {
  176.             if(mat[i][j]==i+j)
  177.             {
  178.                 count++;
  179.             }
  180.         }
  181.         if(count>0){
  182.             list = (link*)malloc(sizeof(link));
  183.             list->next=NULL;
  184.             dataArr = (dataStrc *)malloc(count*sizeof(dataStrc));
  185.             for(i=0;i<row;i++)
  186.                 for(j=0;j<cols;j++)
  187.                 {
  188.                     if(mat[i][j]==i+j)
  189.                     {
  190.                         dataArr[k].data=i+j;
  191.                         dataArr[k].j=j;
  192.                         dataArr[k].i=i;
  193.                         insretNode(list,i,j);
  194.                         k++;
  195.                     }
  196.                 }
  197.         }
  198.         return count;
  199.             return 0;
  200.  
  201. }//threesome//
  202.  
  203. link * insretNode(link *list,int i,int j){
  204.  
  205.     link *newLink = (link *)malloc(sizeof(link));
  206.     newLink->node_data.i=i;
  207.     newLink->node_data.j=j;
  208.     newLink->node_data.data=i+j;
  209.     list = newLink;
  210.     return list;
  211.  
  212. }//insertNode//
  213. int ** create_din_mat(int row,int cols){
  214.  
  215.     int i,j;
  216.     int **matA;
  217.    
  218.     matA = (int**) malloc(row * sizeof(int));
  219.         for(i=0;i<row;i++)
  220.             matA[i] = (int*) malloc(cols * sizeof(int));
  221.         return matA;
  222.  
  223. }//din_mat//
  224.  
  225. void print_list(link *head){
  226.  
  227.     link *temp;
  228.     temp = head;
  229.     while(temp){
  230.         printf("i=%d-> j=%d-> data=%d-> ",temp->node_data.i,temp->node_data.j,temp->node_data.i+temp->node_data.j);
  231.         temp=temp->next;
  232.     }//while//
  233. }//print_list//
  234.  
  235. void free_list(link *list){
  236.     link *to_free=list;
  237.     while(to_free != NULL){
  238.         list = list->next;
  239.         free(to_free);
  240.         to_free = list;
  241.     }//while//
  242. }//frree_list//
  243.  
  244. void display_arr(int *arr,int n){
  245.     int i;
  246.     for(i=0;i<n;i++)
  247.         printf("%d\t",arr+i);
  248.     printf("\n");
  249.  
  250.  
  251. }//display_din_array//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement