Advertisement
sellmmaahh

OR-dodjela

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