diff options
author | geno <gabriele.genovese2@studio.unibo.it> | 2024-05-28 10:43:29 +0200 |
---|---|---|
committer | geno <gabriele.genovese2@studio.unibo.it> | 2024-05-28 10:43:29 +0200 |
commit | e59f9fd477eccea7d69ea874186a124e3fc10a4c (patch) | |
tree | 7bb7e03bfc9fc795a1951c3f39fcdb79ea0fba10 | |
parent | f05d888a0b621ca4e99e2b0fb6e23c097006fe41 (diff) |
updated readme and added exercises
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | resources/README.txt (renamed from README.txt) | 4 | ||||
-rw-r--r-- | resources/es1.md | 27 | ||||
-rw-r--r-- | resources/es2.md | 12 | ||||
-rw-r--r-- | resources/es3.md | 70 |
5 files changed, 113 insertions, 3 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f03a1c --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# CLP Project + +Project for the AA 2023/2024 **Complementi di programmazione**'s course of the Master Degree in Computer Science. diff --git a/README.txt b/resources/README.txt index 0bcbb1d..7d6390d 100644 --- a/README.txt +++ b/resources/README.txt @@ -19,6 +19,4 @@ genera alberi sintattici!) * i programmi della cartella progs sono 870. Li abbiamo presi da un database di programmi semplici e riusciamo a parsarli tutti. Le sottocartelle dont_care e unparsable_programs contengono programmi con feature che lasciam perdere (classi o lambdas) e programmi che non riusciamo a parsare (abbiamo semplificato la sintassi per avere alberi piu` semplici: non -abbiam capito perche` non riusciamo ad analizzarli...) - -Marco Bertoni, Cosimo Laneve
\ No newline at end of file +abbiam capito perche` non riusciamo ad analizzarli...)
\ No newline at end of file diff --git a/resources/es1.md b/resources/es1.md new file mode 100644 index 0000000..84267d7 --- /dev/null +++ b/resources/es1.md @@ -0,0 +1,27 @@ +ESERCIZIO 1 + +Definire l'analisi semantica per Python3 che verifica + 1.a) presenza di variabili non inizializzate + 1.b) presenza di variabili multiple nei parametri formali delle funzioni + 1.c) altro (?) + +Per quanto riguarda 1.a), questo programma e` sbagliato + +x = 2 +y = z +def f(x, y): + return x+y + +print(f(5,3) + x + y) + +Per quanto riguarda 1.b) questo programma e` sbagliato + +x = 2 ; y = 3 + +def f(x, x): + return x+y + +print(f(5,3)+ x + y) + + +SUGGERIMENTO: Fare riferimento alla funzione checkSemantics in SimpleLan2
\ No newline at end of file diff --git a/resources/es2.md b/resources/es2.md new file mode 100644 index 0000000..00c61e0 --- /dev/null +++ b/resources/es2.md @@ -0,0 +1,12 @@ +ESERCIZIO 2 + +2.a Concordare con il docente una delle tre ottimizzazioni nelle slide CodeOptimizations.pdf +e implementare quella assegnata. + +[Occorrerà una funzione che stampi il codice python rappresentato dall'albero sintattico] + +2.b Quindi prendere 5 codici tra quelli che si trovano nella cartella del progetto, perturbarli +in maniera tale da poter applicare l'ottimizzazione del punto 2.a e poi verificare con +chatGPT se il riconoscimento dei due codici (quello ottimizzato e quello no) cambia o meno. +Le perturbazioni di sopra devono essere di tipologia differente, se possibile. + diff --git a/resources/es3.md b/resources/es3.md new file mode 100644 index 0000000..4f38f0c --- /dev/null +++ b/resources/es3.md @@ -0,0 +1,70 @@ +ESERCIZIO 3 + +Generare codice intermedio per il seguente frammento di Python: + + * costanti intere e booleane + * le espressioni sono solo espressioni aritmetiche (operatori +,-,*,/,% ; / e` la + divisione intera); espressioni booleane (and, or, not); espressioni di confronto + (>,<, >=, <=, !=, ==) + * i comandi sono (a) assegnamento (unico formato possibile "a = exp"), + (b) condizionale, (c) invocazione di funzioni, (d) blocchi, ma senza dichiarazioni di + funzioni [quindi non ci sono funzioni annidate] + * ci sono funzioni ricorsive ma non mutuamente ricorsive + * ATTENZIONE: e` possibile accedere a variabili non locali. + + +ESEMPI DI CODICI DA VERIFICARE + +def prime_num(num, div): + if (num >=1): + if (div*div <= num/2): + if (num % div) == 0: + return False + else: + return prime_num(num,div+1) + else: + return True + else: + return False + +print(prime_num(29,2)) + +===== + +num = 29 + +def prime_numBIS(div): + if (num >=1): + if (div*div <= num/2): + if (num % div) == 0: + return False + else: + return prime_numBIS(div+1) + else: + return True + else: + return False + +print(prime_numBIS(2)) + +===== + +def fibonacci(n): + if ((n == 0) or (n == 1)): + return 1 + else: + return (fibonacci(n-1) + fibonacci(n-2)) + +print(fibonacci(6)) + +===== + +def fibonacciIT(n,a,b): + if ((n == 0) or (n == 1)): + return a + else: + return (fibonacciIT(n-1, a+b, a)) + +print(fibonacciIT(6,1,1)) + +===== |