Advertisement
sellmmaahh

OR-2013-ZAD3

Aug 12th, 2015
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.75 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3.  
  4. int brojoSlov(char c)
  5. {
  6.     return (c>= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c>= '0' && c <= '9') || c == '_';
  7. }
  8. int brojJe(char c)
  9. {
  10.     return (c >= '0' && c <= '9') || c == '-';
  11. }
  12. int Dodjela (char *kod, char *ime)
  13. {
  14.     char *p=ime;
  15.     char *s=kod;
  16.  
  17.     while (*s!='\0')
  18.     {
  19.         if (*s==*p)
  20.         {
  21.  
  22.             /* Ovdje sam poboljšao ovdjete, teško je ispitati sto sve moze
  23.             biti ispred varijable da bude dobar kod: mogu svi operatori,
  24.             sve zagrade, ... (trebalo bi dokumentaciju citati.
  25.  
  26.             Lakse je ispitati da li je ispred nesto sto NE smije biti, a
  27.             ne smije biti neki znak koji moze biti u imenu varijable jer
  28.             bi to znacilo da to nije nasa varijable nego neka druga. Tome
  29.             sluzi funkcija brojoSlov*/
  30.             if ((s==kod) || !brojoSlov(*(s-1))) //poboljsani uvjeti
  31.             {
  32.                 while (*s==*p)
  33.                 {
  34.                     s++;
  35.                     p++;
  36.                     if (*p=='\0') break;
  37.                 }
  38.                 if (*s=='=' && brojJe(*(s+1))) //moze == biti
  39.                 {
  40.                     s++;
  41.                     int negativan = 0; // false
  42.                     if(*s=='-')
  43.                     {
  44.                         negativan = 1; //true;
  45.                         s++;
  46.                     }
  47.  
  48.                     /*Pravljenje broja je sablon i nauci ga, a bezveze
  49.                     ti je pamtiti neke duzine broja kada mozes odmah da
  50.                     ga pravis kako se kreces kroz string*/
  51.                     int broj = 0;
  52.                     while (*s>='0' && *s<='9')
  53.                     {
  54.                         broj = broj*10 + (*s - '0');
  55.                         s++;
  56.                     }
  57.                     if(negativan == 1) //ako je negativan, napravi ga negativnim
  58.                         broj *= -1;
  59.  
  60.                     //s--
  61.                     /*Da se ovdje ne zavrsava program, tj. da se dalje nastavlja
  62.                     ispitivanje stringa trebalo bi uraditi s-- jer ce se s++ uraditi
  63.                     u svakom slucaju, a vec s pokazuje iza posljednjeg braja*/
  64.                     return broj;
  65.                 }
  66.                 else
  67.                 {
  68.                     p = ime; //Ako vec imas pomocno p, onda ga samo vratis na pocetak tj. na ime
  69.                 }
  70.             }
  71.         }
  72.         s++;
  73.     }
  74.  
  75.     return 0; //nije pronadjeno, ne znam sto treba vratiti
  76. }
  77.  
  78.  
  79.  
  80. int main ()
  81. {
  82.     char s[]="int x; x++; x==2; xs=32 sx=12 _x=11 for (x=-15; x<30; x++) x*=2;";
  83.     char p[]="x";
  84.     printf("%d\n",Dodjela(s,p));
  85.  
  86.     printf("%d\n",Dodjela(s,"xs"));
  87.  
  88.     printf("%d\n",Dodjela(s,"_x"));
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement