Advertisement
Numulix

Binarna stabla: Recnik

Dec 24th, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h.>
  3. #include <string.h>
  4.  
  5. typedef struct rec{
  6.     char srpska[100], engleska[100], francuska[100];
  7.     struct rec *leva;
  8.     struct rec *desna;
  9. } rec;
  10.  
  11. void ispisMenija(){
  12.     printf("Unesite opciju:\n");
  13.     printf("(1) Ucitavanje recnika\n");
  14.     printf("(2) Ispis reci na jeziku\n");
  15.     printf("(3) Prevod recenice\n");
  16.     printf("(0) Izlaz\n");
  17. }
  18.  
  19.  
  20. rec* napraviRec(char srpska[], char engleska[], char francuska[]){
  21.     rec *novi = (rec*)malloc(sizeof(rec));
  22.     strcpy(novi->srpska,srpska);
  23.     strcpy(novi->engleska,engleska);
  24.     strcpy(novi->francuska,francuska);
  25.     novi->leva = NULL;
  26.     novi->desna = NULL;
  27.  
  28.     return novi;
  29. }
  30.  
  31.  
  32. rec* ubaciUStablo(rec* koren, rec* nova)
  33. {
  34.     if(koren == NULL) return nova;
  35.     if(strcmp(koren->srpska,nova->srpska) == 1){
  36.         koren->leva = ubaciUStablo(koren->leva,nova);
  37.     }
  38.     else if(strcmp(koren->srpska,nova->srpska) == -1){
  39.         koren->desna = ubaciUStablo(koren->desna,nova);
  40.     }
  41.     return koren;
  42. }
  43.  
  44. void nalepiRec(rec* koren, rec* nova)
  45. {
  46.     if (koren == NULL) return;
  47.     if(strcmp(koren->srpska,nova->srpska) == 1){
  48.         pretraziStablo(koren->leva,nova);
  49.     }
  50.     else if(strcmp(koren->srpska,nova->srpska) == -1){
  51.         pretraziStablo(koren->desna,nova);
  52.     }
  53.     if(strcmp(koren->engleska,"") == 0){
  54.         strcpy(koren->engleska,nova->engleska);
  55.     } else{
  56.         strcpy(koren->francuska,nova->francuska);
  57.     }
  58.  
  59. }
  60.  
  61. void pretraziStablo(rec* koren, char rec[])
  62. {
  63.     if (koren == NULL) return;
  64.     if(strcmp(koren->srpska,rec) == 1){
  65.         pretraziStablo(koren->leva,rec);
  66.     }
  67.     else if(strcmp(koren->srpska,rec) == -1){
  68.         pretraziStablo(koren->desna,rec);
  69.     }
  70.     return koren;
  71. }
  72.  
  73. void ispisiStablo(rec* koren, char jezik[])
  74. {
  75.     if (koren == NULL) return;
  76.     ispisiStablo(koren->leva,jezik);
  77.     ispisiRec(koren,jezik);
  78.     ispisiStablo(koren->desna,jezik);
  79. }
  80.  
  81. void ispisiRec(rec* koren, char jezik[]){
  82.     if(strcmp(jezik,"en") == 0){
  83.         printf("%s-%s", koren->srpska,koren->engleska);
  84.     } else{
  85.         printf("%s-%s", koren->srpska,koren->francuska);
  86.     }
  87.  
  88. }
  89.  
  90. char* prevedi(rec* koren, char recenica[], char jezik[])
  91. {
  92.     char prevod[100];
  93.  
  94. }
  95.  
  96. int main(){
  97.  
  98.     rec *koren = NULL;
  99.     int opcija;
  100.     ispisMenija();
  101.     scanf("%d",&opcija);
  102.     do{
  103.         if(opcija==1){
  104.             char fileName1[100], fileName2[100];
  105.             char linija[100], srpska[100], engleska[100], francuska[100];
  106.             char *token;
  107.             int flag;
  108.  
  109.             printf("Unesite ime 1. fajla: ");
  110.             scanf("%s",&fileName1);
  111.             FILE* f1 = fopen(fileName1,"r");
  112.             fgets(linija,100,f1);
  113.  
  114.             if(strcmp(linija,"en") == 0) flag = 1;
  115.             else flag = 0;
  116.  
  117.             while(fgets(linija,100,f1) != NULL){
  118.                 token = strtok(linija,"-");
  119.                 strcpy(srpska,token);
  120.                 token = strtok(NULL,"-");
  121.                 if(flag){
  122.                     strcpy(engleska,token);
  123.                     strcpy(francuska,"");
  124.                 } else {
  125.                     strcpy(francuska,token);
  126.                     strcpy(engleska,"");
  127.                 }
  128.                 rec* nova = napraviRec(srpska,engleska,francuska);
  129.                 koren = ubaciUStablo(koren,nova);
  130.  
  131.             }
  132.             fclose(f1);
  133.  
  134.             printf("Unesite ime 2. fajla: ");
  135.             scanf("%s",&fileName2);
  136.  
  137.             FILE* f2 = fopen(fileName2,"r");
  138.  
  139.             fgets(linija,100,f1);
  140.             while(fgets(linija,100,f1) != NULL){
  141.                 token = strtok(linija,"-");
  142.                 strcpy(srpska,token);
  143.                 token = strtok(NULL,"-");
  144.                 if(flag){
  145.                     strcpy(francuska,token);
  146.                     strcpy(engleska,"");
  147.                 } else {
  148.                     strcpy(engleska,token);
  149.                     strcpy(francuska,"");
  150.                 }
  151.                 rec* nova = napraviRec(srpska,engleska,francuska);
  152.                 nalepiRec(koren,nova);
  153.  
  154.  
  155.             }
  156.             fclose(f2);
  157.         }
  158.  
  159.         if(opcija == 2)
  160.         {
  161.             char jezik[100];
  162.             printf("Unesite jezik: ");
  163.             scanf("%s",jezik);
  164.  
  165.             ispisiStablo(koren,jezik);
  166.         }
  167.  
  168.         if(opcija == 3)
  169.         {
  170.             char prevod[100], recenica[100], jezik[100];
  171.             char *token;
  172.             printf("Unesite recenicu:\n");
  173.             scanf("%s",recenica);
  174.             printf("Unesite jezik:\n");
  175.             scanf("%s",jezik);
  176.  
  177.             prevod = "";
  178.  
  179.             strtok(recenica," ");
  180.             while(token != NULL){
  181.                 rec* pom = pretraziStablo(koren,token);
  182.                 if (pom == NULL){
  183.                     strcat("Nepoznato ",prevod)
  184.                 }else{
  185.                     if (strcmp(jezik,"en") == 0) strcat(prevod,pom->engleska);
  186.                     else strcat(prevod,pom->francuska);
  187.                     strcat(prevod," ");
  188.                 }
  189.                 token = strtok(NULL," ");
  190.             }
  191.  
  192.             printf("%s\n",prevod);
  193.         }
  194.         ispisMenija();
  195.     }while(opcija);
  196.  
  197.  
  198.     return 0;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement