Telaryon

2 dimenziós tömb alapok + malloc és calloc + inputbuffer

Mar 17th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void beolvas(int *mx, int sor, int oszlop);
  5. void kiir(int *mx, int sor, int oszlop);
  6. int *osszead(int *mx1, int *mx2, int sor, int oszlop);
  7. int *osszeszoroz(int *mx1 , int *mx2, int sor1, int oszlop1, int oszlop2);
  8.  
  9. //main fuggveny
  10. int main(void){
  11.     int t1[2][3]={ 1, 2, 3,
  12.                    4, 5, 6 };
  13.     int t2[2][3];
  14.     int t3[3][4]={ 1, 1, 1, 1,
  15.                    2, 2, 2, 2,
  16.                    3, 3, 3, 3 };
  17.     int *eredmeny;
  18.     int sor1=2;
  19.     int sor2=2;
  20.     int sor3=3;
  21.     int oszlop1=3;
  22.     int oszlop2=3;
  23.     int oszlop3=4;
  24.  
  25.     printf("Az elso matrix: \n");
  26.     kiir(t1, sor1, oszlop1);
  27.  
  28.     printf("A masodik matrix : \n");
  29.     beolvas(t2, sor2, oszlop2);
  30.     kiir(t2, sor2, oszlop2);
  31.  
  32.     if(sor1==sor2 && oszlop1==oszlop2)
  33.         eredmeny=osszead(t1, t2, sor1, oszlop1);
  34.     printf("A ket matrix osszeadva: \n");
  35.     kiir(eredmeny, sor1, oszlop1);
  36.     free(eredmeny);
  37.  
  38.     if(oszlop2==sor3)
  39.         eredmeny=osszeszoroz(t2, t3, sor2, oszlop2, oszlop3);
  40.     printf("A ket matrix osszeszorozva: \n");
  41.     kiir(eredmeny, sor2, oszlop3);
  42.     free(eredmeny);
  43.  
  44.     return 0;
  45. }
  46.  
  47. void beolvas(int *mx, int sor, int oszlop){
  48.     char inbuf[100];
  49.     char ch;
  50.     int i;
  51.     int j;
  52.     int k;
  53.     int inbufm = 100;
  54.     int jo;
  55.  
  56.     for(i=0; i<sor; i++){
  57.         for(j=0; j<oszlop; j++){
  58.             jo=1;
  59.             do{
  60.                 jo=1;
  61.                 printf("%d. sor %d. oszlop eleme: ", i+1, j+1);
  62.                 scanf("%s", inbuf);
  63.                 if(sscanf(inbuf, "%d", &mx[i*oszlop+j]) !=1){
  64.                     printf("Hibas adat!\n");
  65.                     jo=0;
  66.                 }
  67.             }while(!jo);
  68.         }
  69.     }
  70.     return ;
  71. }
  72.  
  73. void kiir(int *mx, int sor, int oszlop){
  74.     int i;
  75.     int j;
  76.     for(i=0; i<sor; i++){
  77.         for(j=0; j<oszlop; j++){
  78.             printf("%d. sor %d. oszlop eleme: %d\n", i+1, j+1, mx[i*oszlop+j]);
  79.         }
  80.     }
  81.     return ;
  82. }
  83.  
  84. int * osszead(int *mx1, int *mx2, int sor, int oszlop){
  85.     int i;
  86.     int j;
  87.     int *e;
  88.     e=(int *)malloc(sor*oszlop*sizeof(int));
  89.     if(e==NULL){
  90.         printf("Nincs eleg memoria!\n");
  91.         exit(EXIT_FAILURE);
  92.     }
  93.     for(i=0; i<sor; i++){
  94.         for(j=0; j<oszlop; j++){
  95.             e[i*oszlop+j] = mx1[i*oszlop+j]+mx2[i*oszlop+j];
  96.         }
  97.     }
  98.     return e;
  99. }
  100.  
  101. int *osszeszoroz(int *mx1 , int *mx2, int sor1, int oszlop1, int oszlop2){
  102.     int i;
  103.     int j;
  104.     int k;
  105.     int sum;
  106.     int *e;
  107.  
  108.     e=calloc(sor1*oszlop2, sizeof(int));
  109.     if(e==NULL){
  110.         printf("Nincs eleg memoria!\n");
  111.         exit(EXIT_FAILURE);
  112.     }
  113.     for(i=0; i<sor1; i++){
  114.         for(j=0; j<oszlop2; j++){
  115.             sum=0;
  116.             for(k=0; k<oszlop1; k++){
  117.                 sum += mx1[i*oszlop1+k] * mx2[i*oszlop2+j];
  118.             }
  119.             e[i*oszlop2+j] = sum;
  120.         }
  121.     }
  122.     return e;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment