Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Id 200541001
- Name: Aviad Hemo*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define N 3
- typedef struct dataStrc{
- int i;
- int j;
- int data;
- }dataStrc;
- typedef struct node {
- dataStrc node_data;
- struct node *next;
- }link;
- int * powerArray(int);
- int **multiply_mat(int matA[][N], int matB[][N]);
- void matrix_input(int mat[][N]);
- void matrix_output(int **mat);
- void free_matrix (int **mat, int n);
- int threesome(int **mat, int, int);
- link * insretNode(link *list,int ,int );
- int ** create_din_mat(int, int);
- void print_list(link *list);
- void free_list(link *list);
- void display_arr(int *,int);
- void main(){
- int num, input = 1,rowA,colsA,size,min=1,max=10,i,j;
- int *p1,**din_mat,*arr;
- int matA[N][N],matB[N][N],**matrixC;
- link *head;
- head = (link *) malloc(sizeof(link));
- head->next=NULL;
- while (input != 0) {
- printf("\n -- Menu Selection -- \n");
- printf("0) Quit\n");
- printf("1) PowerArray\n");
- printf("2) Matrix multiplication \n");
- printf("3) Threesome \n");
- scanf_s("%d", &input);
- switch (input){
- case 0:
- default:
- printf("Goodbye...\n");
- input = 0;
- break;
- case 1:
- printf("Your cohise: 'powerArray'\n");
- printf("Enter a vlaue to powerArray function\n");
- scanf_s("%d",&num);
- p1 = powerArray(num);
- free(p1);
- break;
- case 2:
- printf("Your choise: 'multiply_mat'\n");
- matrix_input(matA);
- matrix_input(matB);
- matrixC=multiply_mat(matA,matB);
- matrix_output(matrixC);
- free_matrix(matrixC,N);
- break;
- case 3:
- printf("please enter row and cols for matrix\n");
- scanf_s("%d%d",&rowA,&colsA);
- din_mat = create_din_mat(rowA,colsA);
- size = threesome(din_mat,rowA,colsA);
- arr= (int *) malloc(size * sizeof(int));
- for(i=0;i<rowA;i++)
- for(j=0;j<colsA;j++)
- {
- srand((unsigned)time(NULL));
- din_mat[i][j] = (rand() % (max-min)) + min;
- }
- display_arr(arr,size);
- print_list(head);
- free_list(head);
- free(arr);
- free_matrix(din_mat,rowA);
- break;
- }//switch//
- }//While//
- }//MAIN//
- int * powerArray(int num){
- int i;
- int *p1;
- p1 = (int *) malloc(num * sizeof(int));
- if (p1)
- {
- p1[0] = 1;
- for(i = 1;i < num;i++)
- p1[i] = p1[i-1] * 2;
- for(i=0; i<num; i++)
- printf("%d\t",p1[i]);
- }
- return p1;
- }//powerArray//
- int ** multiply_mat(int matA[][N], int matB[][N]){
- int **multi,i,j,k,sum=0;
- multi = (int **)malloc(N*sizeof(int));
- for(i=0;i<N;i++)
- multi[i]= (int*)malloc(N*sizeof(int));
- for(i=0;i<N;i++)
- for(j=0;j<N;j++){
- for(k=0;k<N;k++)
- {
- sum+=matA[i][k]*matB[k][j];
- }
- multi[i][j]=sum;
- sum=0;
- }
- return multi;
- }//multiply_mat//
- void matrix_input(int mat[N][N]){
- int i,j;
- printf("please enter values to matrix\n");
- for(i=0; i<N; i++)
- for(j=0; j<N;j++)
- scanf_s("%d",&mat[i][j]);
- }//matrix_input//
- void matrix_output(int **mat){
- int i,j;
- for(i=0;i<N;i++)
- {
- for(j=0;j<N;j++)
- printf("%d\t",mat[i][j]);
- printf("\n");
- }
- }//matrix_output//
- void free_matrix (int **matrix, int n){
- int i;
- for(i=0;i<n;i++)
- free(matrix[i]);
- free(matrix);
- }//free_matrix//
- int threesome(int **mat, int row, int cols){
- int i,j,k=0,count=0;
- link *list;
- dataStrc *dataArr;
- for(i=0;i<row;i++)
- for(j=0;j<cols;j++)
- {
- if(mat[i][j]==i+j)
- {
- count++;
- }
- }
- if(count>0){
- list = (link*)malloc(sizeof(link));
- list->next=NULL;
- dataArr = (dataStrc *)malloc(count*sizeof(dataStrc));
- for(i=0;i<row;i++)
- for(j=0;j<cols;j++)
- {
- if(mat[i][j]==i+j)
- {
- dataArr[k].data=i+j;
- dataArr[k].j=j;
- dataArr[k].i=i;
- insretNode(list,i,j);
- k++;
- }
- }
- }
- return count;
- return 0;
- }//threesome//
- link * insretNode(link *list,int i,int j){
- link *newLink = (link *)malloc(sizeof(link));
- newLink->node_data.i=i;
- newLink->node_data.j=j;
- newLink->node_data.data=i+j;
- list = newLink;
- return list;
- }//insertNode//
- int ** create_din_mat(int row,int cols){
- int i,j;
- int **matA;
- matA = (int**) malloc(row * sizeof(int));
- for(i=0;i<row;i++)
- matA[i] = (int*) malloc(cols * sizeof(int));
- return matA;
- }//din_mat//
- void print_list(link *head){
- link *temp;
- temp = head;
- while(temp){
- printf("i=%d-> j=%d-> data=%d-> ",temp->node_data.i,temp->node_data.j,temp->node_data.i+temp->node_data.j);
- temp=temp->next;
- }//while//
- }//print_list//
- void free_list(link *list){
- link *to_free=list;
- while(to_free != NULL){
- list = list->next;
- free(to_free);
- to_free = list;
- }//while//
- }//frree_list//
- void display_arr(int *arr,int n){
- int i;
- for(i=0;i<n;i++)
- printf("%d\t",arr+i);
- printf("\n");
- }//display_din_array//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement