Esame di Elementi di Informatica e Programmazione per Ing. Biomedica
Tempo a disposizione: 120 minuti (due ore)""" Copiare questo file in CognomeMatricola.py usando il proprio cognome e il proprio numero di matricola.
Se il cognome contiene spazi, apostrofo o altri caratteri non alfabetici, ignorarli; se contiene lettere accentate, usare la corrispondente lettera non accentata.
Usare solo il cognome, senza il nome, seguito dal numero di matricola.
Durante lo svolgimento della prova, modificare soltanto il file CognomeMatricola.py! Quello e' il file che verra' valutato dal docente.
La comprensione del testo e' parte integrante dell'esame.
Non cancellare dal file nessuna delle righe inizialmente presenti, potete cancellare soltanto codice scritto da voi.
Se cancellate codice per sbaglio, potete ricopiarlo dal testo originario.
Alcune sezioni di codice sono gia' presenti e non possono essere modificate.
Le sezioni mancanti e da scrivere sono identificate dai commenti # Inizio scrivere qui e # Fine scrivere qui.
Si consiglia di completare le sezioni mancanti nell'ordine in cui si presentano nel file, anche se non e' strettamente necessario.
Attenzione: nel codice gia' presente non sono stati utilizzati caratteri di tabulazione per l'indentazione, sono tutti spazi singoli e si consiglia di fare altrettanto.
Descrizione del tema d'esame
Lo scopo e' quello di progettare la classe Polynomial, i cui esemplari rappresentano polinomi di una variabile (in forma normale).
Breve ripasso di matematica
Un polinomio di una sola variabile e' una somma algebrica di monomi di una stessa variabile.
Negli esempi, la variabile verra' chiamata x ma il suo nome e' ininfluente nel problema.
Per le espressioni matematiche si usera' qui la sintassi di Python: in particolare, * per la moltiplicazione e ** per l'elevamento a potenza.
Un monomio della variabile x e' univocamente determinato da un coefficiente moltiplicativo (un numero di tipo float o int, positivo o negativo) e da un esponente della variabile (un numero intero non negativo).
Un monomio (ovviamente) non puo' avere coefficiente uguale a zero.
L'esponente di un monomio viene anche chiamato grado del monomio stesso.
Un monomio di grado zero e' una costante, uguale al suo coefficiente.
Un monomio di grado uno con coefficiente k e' uguale a k*x.
Un monomio di grado due con coefficiente k e' uguale a k*(x**2) [le parentesi tonde non sono sintatticamente necessarie] e cosi' via.
Il grado di un polinomio e' uguale, per definizione, al grado massimo dei suoi monomi.
Il cosiddetto "polinomio nullo" e' uguale alla costante zero e non ha monomi (avrebbe il solo monomio di grado zero con coefficiente zero, ma i monomi non possono avere coefficiente zero).
Il grado del polinomio nullo si definisce uguale a zero.
Un polinomio si dice in forma normale se non contiene due monomi aventi lo stesso grado, oppure, detto in altro modo ma equivalentemente, se tutti i suoi monomi hanno gradi diversi.
Il polinomio nullo e', per definizione, in forma normale."""
Rappresentazione della classe Polynomial
## Un esemplare di questa classe rappresenta # un polinomio di una variabile in forma normale.
## Un tale polinomio viene qui memorizzato mediante un dizionario di coppie: # ogni monomio e' rappresentato da una coppia, # dove la chiave e' l'esponente del monomio e il valore e' il suo coefficiente.
# Si osservi che, se il polinomio non fosse in forma normale, questa rappresentazione # non sarebbe possibile, perche', essendoci almeno due monomi dello stesso grado (cioe' # con lo stesso esponente), ci dovrebbero essere due coppie con la stessa chiave, # situazione non ammessa in un dizionario.
# Inoltre, non si possono scambiare i ruoli di chiave e valore, perche' # e' lecito che ci siano monomi con lo stesso coefficiente # (mentre le chiavi di un dizionario devono essere univoche).
# Molto importante: # come detto, in un polinomio non possono essere presenti "monomi con coefficiente # uguale a zero", quindi nel dizionario che lo rappresenta non possono esserci coppie # con valore uguale a zero.
Esempi di polinomi e dizionari
## Esempi di polinomi e dei dizionari che li rappresentano, all'interno di un oggetto # di tipo Polynomial:
- 4*(x**3)-7.8*(x**2)+5 {3:4, 2:-7.8, 0:5}
- -4.1*(x**3) {3:-4.1}
- 3*x-2 {1:3, 0:-2}
- 21 {0:21}
- 0 {} <-- questo e' il "polinomio nullo"
Classe Polynomial
#class Polynomial :
## Non si possono aggiungere variabili di classe # Non si possono aggiungere variabili di esemplare # Non si possono aggiungere metodi
Costruttore
### Crea un polinomio nullo.
#def __init__(self) :
# Metodo completo, non modificare ma analizzare self._mon = dict() # il nome della variabile e' un'abbreviazione di "monomials" # perche', come spiegato nel commento iniziale, ogni coppia # di questo dizionario rappresenta uno dei monomi del polinomio
Metodo getCoeff
## Restituisce il coefficiente del monomio che ha l'esponente specificato.
# Solleva ValueError se l'esponente non e' un numero intero oppure se e' negativo.
# @param expon l'esponente del monomio che si vuole ispezionare (intero non negativo)
# @return il coefficiente del monomio ispezionato # (zero se tale monomio non e' presente nel polinomio)
#def getCoeff(self, expon) :
# Metodo completo, non m