Guest User

Untitled

a guest
Jul 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.11 KB | None | 0 0
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6.  
  7. /********************************************/
  8. /*raspredelitev operatorji*/
  9. int sort(char *opr){
  10.   if(strcmp(opr,"mod")==0)
  11.     return 3;
  12.     else if((strcmp(opr,"-")==0)||(strcmp(opr,"+")==0))
  13.     return 5;
  14.     else if((strcmp(opr,"min")==0) || (strcmp(opr,"max")==0))
  15.     return 7;
  16.    
  17.     return -1;
  18. }
  19.  
  20. /***********************************************/
  21. /* resitev problem na rekuzicni nacin*/
  22. int resitev(char **izvor,int i){
  23.     int j;
  24.     int k=0;
  25.     for (j=0;j<i;j++) {
  26.         if (sort(izvor[k])<=sort(izvor[j]))
  27.             k=i;
  28.     }
  29.     /* kopiranje vrednosti iz ivor v nova tabela x1*/
  30.     char **x1 = malloc(sizeof(char*)*k);
  31.     for(j=0;j<k;j++){
  32.         x1[j] = malloc(sizeof(char)*4);
  33.         strcpy(x1[j], izvor[j]);
  34.     }
  35.     /* kopiranje vrednosti iz ivor v nova tabela x2*/
  36.     char **x2 = malloc(sizeof(char*)*(i-k-1));
  37.     int m=0;
  38.     for(j=k+1; j<i; j++,m++){
  39.         x2[m]=malloc(sizeof(char)*4);
  40.         strcpy(x2[m],izvor[j]);
  41.     }
  42.     /*rekurzivno izvajanje problem*/
  43.     int xx1=resitev(x1,k);
  44.     int xx2=resitev(x2,i-k-1);
  45.  
  46.     /*racunanje sortiran izraz*/
  47.     if(strcmp(izvor[k], "mod") == 0){
  48.         printf("%d,%s,%d",xx1," mod ",xx2);
  49.         return xx1%xx2;
  50.        
  51.             }
  52.     if(strcmp(izvor[k], "+") == 0){
  53.         return xx1+xx2;
  54.         printf("%d,%s,%d",xx1," + ",xx2);
  55.     }
  56.     if(strcmp(izvor[k], "-") == 0){
  57.             return xx1 - xx2;
  58.         printf("%d,%s,%d",xx1," - ",xx2);
  59.     }
  60.     if(strcmp(izvor[k], "max") == 0){
  61.             if(xx1>xx2)
  62.             return xx1;
  63.             return xx2;
  64.         printf("%d,%s,%d",xx1," max ",xx2);
  65.     }
  66.     if(strcmp(izvor[k], "min") == 0){
  67.             if(xx1>xx2)
  68.             return xx2;
  69.             return xx1;
  70.         printf("%d,%s,%d",xx1," min ",xx2);
  71.     }
  72.        
  73.         return -1;
  74.  
  75.  
  76.  
  77. }
  78.    
  79. /*******************************************/
  80. /*funkcija main kje se program izvaje*/
  81.  
  82. int main(){
  83.  
  84.   char **izvor=(char **)malloc(sizeof(char *)*1000);
  85.   char *p=(char *)malloc(sizeof(char));
  86.   int i=0;
  87.   printf(" Vnosi izraz z operatprje mod,+,-,min ali max int stevila ob 0-9\n");
  88.     while( scanf("%s",p)!=EOF){
  89.     p=(char *)malloc(4*sizeof(char));
  90.     izvor[i]=p;
  91.     i++;   
  92.    
  93.     }      
  94.     printf("%s",p);
  95.     resitev(izvor,i);
  96.     printf("Resitev izraz je %d \n",resitev(izvor,i));
  97. return 0;
  98. }
Add Comment
Please, Sign In to add comment