Termen de predare: 12.01.2014, ora 23:55
Tema de casă se trimit sub forma unei arhive ZIP.
Arhiva va fi uploadă folosind un serviciu public de sharing (Google Drive, Dropbox etc.). Trebuie să trimiteți link-ul către locația de unde putem downloada tema de casă.
Trimiterea temei de casă se face prin completarea acestui formular.
Dacă două teme seamănă suficient de mult vor fi considerate copiate.
Toate întrebările despre temă se vor purta public pe grupul acesta. Toți cei care au trimis tema de casă nr. 1 au fost înscriși cu adresa de e-mail de pe care au trimis tema.
Arhiva trebuie să conțină:
Realizati arborele sintactic pentru limbajul ATM Basic descris mai jos:
Declaratiile de variabile pot aparea doar la inceputul programului sau ai functiilor. Ele incep cu cuvantul VAR.
VAR @sir - variabila string VAR #ni, %nf - variabila intreaga, respectiv fractionara
Expresiile folosite pot fi:
If arata in felul urmator: (atentie ELSEIF si ELSE pot lipsi)
IF conditie THEN instructiuni ELSEIF conditie THEN instructiuni ELSE instructiuni ENDIF
While arata in felul urmator:
WHILE conditie DO instructiuni ENDWHILE
FOR arata in felul urmator: (atentie STEP poate lipsi, dupa step urmeaza un numar intreg pasul de incrementare)
FOR #variabila FROM numar TO numar STEP numar DO instructiuni ENDFOR
Functiile se declara in felul urmator.
SUB nume lista_parametrii instructiuni ENDSUB
Functiile nu intorc valori.
Apelul de functie arata in felul urmator:
CALL nume_functie lista_parametrii
(1p) Implementati ridicarea la putere in expresii (1p) Implementati restrangeti expresiile constante (1p) Implementati valoare de intoarcere a functiilor
Aici sunt cateva exemple de programe care ar trebui sa functioneze
VAR #nr SUB prim #n VAR #i, #divizori #divizori = 0 IF #n <> 0 AND #n <> 1 THEN FOR #i FROM 2 TO #n/2 STEP 1 DO IF #n MOD #i = 0 THEN #divizori=#divizori+1 ENDIF ENDFOR ELSE #divizori = 1 ENDIF IF #divizori = 0 THEN PRINT #n, " este prim" ELSE PRINT #n, " nu este prim" ENDIF ENDSUB FOR #nr FROM 1 TO 10 STEP 1 DO CALL prim #nr ENDFOR
VAR #nr SUB perfect #n VAR #i, #s #s = 0 FOR #i FROM 1 TO #n/2 STEP 1 DO IF #n MOD #i = 0 THEN #s=#s+#i ENDIF ENDFOR IF #s = #n THEN PRINT #n, " este perfect" ELSE PRINT #n, " nu este perfect" ENDIF ENDSUB FOR #nr FROM 1 TO 10 STEP 1 DO CALL perfect #nr ENDFOR
Fisirele pentru corectare se afla pe GitHub la acesta adresa https://github.com/alexandruradovici/atm-basic/blob/master/README.md.