summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgeno <gabriele.genovese2@studio.unibo.it>2024-05-28 10:43:29 +0200
committergeno <gabriele.genovese2@studio.unibo.it>2024-05-28 10:43:29 +0200
commite59f9fd477eccea7d69ea874186a124e3fc10a4c (patch)
tree7bb7e03bfc9fc795a1951c3f39fcdb79ea0fba10
parentf05d888a0b621ca4e99e2b0fb6e23c097006fe41 (diff)
updated readme and added exercises
-rw-r--r--README.md3
-rw-r--r--resources/README.txt (renamed from README.txt)4
-rw-r--r--resources/es1.md27
-rw-r--r--resources/es2.md12
-rw-r--r--resources/es3.md70
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))
+
+=====