[ zana2 @ 01.12.2006. 20:36 ] @
Date su sledeće funkcije u jeziku koji liči na C f(x) { return g(x= x*2);} g(x) { y=1; h(y); return x+y+x;} h(x) { x= x+5; return 0;} main(){ print(f(7));} Sve funkcije mogu predavati argumente na 2 načina: po vrijednosti i po referenci. Kako treba predavati argumente u funkcijama f, g i h da bi rezultat izvršavanja datog programa bio: a) 29 b) 34 2. Napisati KS gramatiku G tako da je L(G) skup svih formula iskaznog računa. Koristiti logičke veznike AND, OR i NOT, konstante TRUE i FALSE i promjenljive. Promjenljivoj se može dodijeliti vrijednost pomoću operatora =. Podrazumijevani prioritet veznika može se promijeniti uvođenjem zagrada. (a) Prikazati sintaksno drvo za ulazni niz x=TRUE y=FALSE z= (x OR not y) AND FALSE OR NOT X. (b) Napisati bison/yacc datoteku koja implementira kalkulator logičkih izraza. Vaš program treba da učitava podatke sa komandne linije ili iz datoteke koja se zadaje kao komandni parametar i treba da štampa rezultat na komandnu liniju. Potrebno je obraditi greške. Imena promjenljivih definišu se kao u jeziku Decaf. (c) Dodati atribute pravilima gramatike G tako da početni simbol grmatike ima atribut koji je pokazivač na korijen apstraktnog sintaksnog drveta koje odgovara datom logičkom programu. 3. Dat je sljedeći C++ program. Prikazati izgled memorije kada se to traži od vas. Potrebo je nacrtati dvije slike. Na svakoj slici prikazati šta se nalazi na steku a šta na heapu. Pokazivače prikazati strelicama. Memoriju koja postane nedostupna označiti simbolom ???. void Tuesday(int *lei, int *eric, int mehran){ eric[2] = 9; mehran = eric[0] + *(eric + 2) / 2; eric[1] = lei[0]; *lei = 5; lei = new int[mehran]; // Nacrtati stanje memorije u ovom trenutku } int Monday(int *x, int *y, int *z){ int arr[4] = {0, 1, 2, 3}; int i; z = y; y = &(x[1]); x = new int[*z]; for(i = 0; i < *z; i++) { *(x + i) = *(arr + i) * 2; } *y = *z + 4; Tuesday(z, y, *x); x[1] = 13; return (*z + x[2]); } int main(){ int mehran, *eric, justin = 4, lei; lei = 3; eric = new int[justin]; justin = Monday(eric, &lei, &mehran); // Nacrtati stanje memorije u ovom trenutku return 0; } 4. Napisati međuprogramsku reprezentaciju za sljedeći C program: float m[13]; /*zadatak 2*/ int IsEven(int x){ if (0 == (x%2)) return 1; return 0; } int niz(float x,float y){ int i,j; float a; j=16; for(i=1;i<=12; i++, j = 3){ a=IsEven(x); m=m[i1]* (x+2.0) 2*a1; } if(m[12]=<1) return 0; return 1; } |