Allego la traccia dell'esame, primo appello del 25/05/22.
Il compito era su Javascript e typescript .
Esercizio 1.
Si definisca una classe Solido che rappresenti un generico solido. A partire dalla classe Solido, si costruisca una gerarchia di classi che contenga le classi Parallelepipedo, Cubo e Sfera, in modo da consentire la rappresentazione dei solidi corrispondenti.
La classi Parallelepipedo, Cubo e Sfera dovranno fornire:
un costruttore, che presi i dati necessari alla rappresentazione del solido, generi un istanza della classe che rappresenti il solido;
un metodo superficie, che restituisca la superficie totale del solido rappresentato;
un metodo volume, che restituisca il volume totale del solido rappresentato.
Per i dati necessari e le formule di superficie/volume, si faccia riferimento a quanto riportato sotto:
Parallelepipedo: necessari larghezza l, altezza h e profondità p; superficie calcolata come S = 2*(l+p)*h + 2*l*p; volume calcolato come V = l*p*h.
Cubo: necessario lato x; superficie calcolata come S = 6*x^2; volume calcolato come V = x^3.
Sfera: necessario raggio ; superficie calcolata come S = 12.56*r^2; volume calcolato come V = 4.19*r^3. (NB: Le costanti moltiplicative sono ottenute approssimando pi greco con 3.14, per semplicità).
Infine, si definisca una funzione sommaSuperficiParallelepipedi che, dato in input un array di solidi, calcoli la somma delle superfici di tutti i parallelepipedi in esso contenuti. Se non ci sono parallelepipedi, restituisce 0.
ATTENZIONE: Saranno considerate migliori le soluzioni che terranno conto del fatto che Cubo sia un caso speciale di Parallelepipedo, in cui l, h e p sono tutti uguali al lato x del Cubo.
Esercizio 2.
Si consideri una struttura dati ad albero binario, i cui nodi sono oggetti con quattro proprietà: sx e dx, che riferiscono rispettivamente al figlio sinistro e al figlio destro del nodo stesso; val e piccolo, due valori interi. Le proprietà sx e dx sono opzionali.
Si scriva in TS una funzione contaMin(T) che, dato un albero binario T come argomento, calcoli per ogni nodo t in T (inclusa la radice) il minimo dei val memorizzati nel sotto-albero di cui t è radice (t incluso). Questo minimo deve essere scritto in piccolo. La funzione restituisce il valore piccolo della radice di T.
Nota: Si assuma che il valore di piccolo in ogni nodo in T sia inizialmente infinito.
Esempio:
let Qd = {val: 2, piccolo: Infinity, sx: {val: 4, piccolo: Infinity, sx: {val: 6, piccolo: Infinity}, dx: {val: 6, piccolo: Infinity, dx:{val: 8, piccolo: Infinity}}}, dx: {val: 7, piccolo: Infinity, sx: {val: 8, piccolo: Infinity}}};
contaMin(Qd) -> 2
Qd -> {val: 2, piccolo: 2, sx: {val: 4, piccolo: 4, sx: {val: 6, piccolo: 6}, dx: {val: 6, piccolo: 6, dx:{val: 8, piccolo: 8}}}, dx: {val: 7, piccolo: 7, sx: {val: 8, piccolo: 8}}}
Esercizio 3.
Un gancio è una sequenza (array) di 3 numeri avente la prima e l'ultima cifra uguali, e la cifra centrale differente. Se la cifra centrale dell'array è più piccola rispetto alle altre due, abbiamo un gancio ascendente; altrimenti, un gancio discendente. Ad esempio:
[3, 7, 3]: discendente
[1, -1, 1]: ascendente
Si scriva una funzione gancio(a), con a un array di numeri, che restituisca un oggetto avente, nell'ordine, quattro proprietà: num, il cui valore è il numero di ganci totali presenti in a; asc, il cui valore è il numero di ganci ascendenti presenti in a; des, il numero di ganci discendenti presenti in a; gan, un array contenente tutte le sequenze che sono ganci, nell'ordine in cui compaiono in a
Esempio:
a: [3, 7, 3, 2, 1, 5, 1, 2, 2, -2, 2]
gancio(a) -> {num: 3, asc: 1, des: 2, gan: [[3, 7, 3], [1, 5, 1], [2, -2, 2]]}
Esercizio 4.
Definiamo il peso moltiplicativo di un intero positivo n, il numero di volte che bisogna sostituire n con il prodotto delle sue cifre fino a che n non diventa un intero a singola cifra.
Si scriva una funzione pesoMol(n), con n un intero positivo, che restituisce il peso moltiplicativo di n.
Esempio:
pesoMol(77) -> 4
// 7 x 7 = 49
// 4 x 9 = 36
// 3 x 6 = 18
// 1 x 8 = 8
Testi compiti scritti
Vai a
- Generale
- ↳ Discussioni
- ↳ Discussions (in english)
- ↳ I rappresentanti rispondono
- ↳ Parliamone
- ↳ Mercatino
- ↳ Tirocini
- ↳ Annunci
- ↳ Announcements (in english)
- ↳ Eventi
- I anno
- ↳ Algebra Lineare
- ↳ Analisi Matematica
- ↳ Fondamenti dell'Informatica
- ↳ Laboratorio I
- ↳ Programmazione e Algoritmica
- II anno
- ↳ Architetture e Sistemi Operativi
- ↳ Calcolo Numerico
- ↳ Calcolo Numerico - Vecchio Ordinamento
- ↳ Laboratorio II
- ↳ Paradigmi di Programmazione
- ↳ Ricerca Operativa
- ↳ Ricerca Operativa - Vecchio Ordinamento
- ↳ Statistica
- ↳ Statistica - Vecchio Ordinamento
- III anno
- ↳ Basi di Dati
- ↳ Basi di Dati - Vecchio Ordinamento
- ↳ Introduzione all'Intelligenza Artificiale
- ↳ Introduzione all'Intelligenza Artificiale - Vecchio Ordinamento
- ↳ Ingegneria del Software
- ↳ Ingegneria del Software - Vecchio Ordinamento
- ↳ Reti e Laboratorio III
- Complementari
- ↳ Algebra
- ↳ Cloud Computing
- ↳ Cloud e Green Computing
- ↳ Computer Grafica
- ↳ Crittografia
- ↳ Elementi di Calcolabilità e Complessità
- ↳ Elementi di Calcolabilità e Complessità - Vecchio Ordinamento
- ↳ Esperienze di programmazione
- ↳ Fisica
- ↳ Fisica - Vecchio Ordinamento
- ↳ Gestione di Reti
- ↳ Green Computing
- ↳ Interazione Uomo-Macchina
- ↳ Laboratorio di Basi di Dati
- ↳ Laboratorio di Web Scraping
- ↳ Sicurezza di Sistemi ICT
- ↳ Sviluppo di Applicazioni Mobili
- ↳ Sviluppo di Applicazioni Web
- ↳ Teoria dell'Informazione
- Vecchio Ordinamento
- ↳ I anno
- ↳ [ALL] Algoritmica e Laboratorio
- ↳ [AM] Analisi matematica
- ↳ [FIS] Fisica
- ↳ [LPP] Logica per la programmazione
- ↳ [MDAL] Matematica discreta e algebra lineare
- ↳ [PRL] Programmazione I e laboratorio
- ↳ II anno
- ↳ [AE] Architettura degli elaboratori
- ↳ [BD] Basi di dati
- ↳ [CPS] Calcolo delle probabilità e statistica
- ↳ [CN] Calcolo numerico
- ↳ [IS] Ingegneria del software
- ↳ [PR2] Programmazione II
- ↳ [RO] Ricerca Operativa
- ↳ [SOL] Sistemi operativi e laboratorio
- ↳ III anno
- ↳ [ECC] Elementi di calcolabili e complessità
- ↳ [PI] Programmazione di interfacce
- ↳ [IIA] Introduzione all'intelligenza artificiale
- ↳ [RCL] Reti di calcolatori e laboratorio
- ↳ Advanced databases
- ↳ Advanced programming
- ↳ Advanced software engineering
- ↳ Algorithm design
- ↳ Algorithm engineering
- ↳ Artificial intelligence fundamentals
- ↳ Bioinformatics
- ↳ Competitive programming and contests
- ↳ Computational mathematics for learning and data analysis
- ↳ Data mining
- ↳ Human language technologies
- ↳ ICT infrastructures
- ↳ ICT risk assessment
- ↳ Information Retrieval
- ↳ Intelligent Systems for pattern recognition
- ↳ Laboratory for innovative software
- ↳ Languages, compilers and interpreters
- ↳ Machine learning
- ↳ Mobile and cyber-physical systems
- ↳ Parallel and distributed systems: paradigms and models
- ↳ Peer to peer systems and blockchains
- ↳ Principles for software composition
- ↳ Smart applications
- ↳ Software validation and verification
- Links
- ↳ HomePage Dipartimento
- ↳ Portale Esami