- Rappresentazione Posizionale, Rappresentazione Binaria, Complemento a due, Linguaggi, Sintassi, Sematica.
- Linguaggi ad Alto Livello: Python (Interprete), C (Compilatore). IPython, vs Basso Livello
- Compilazione vs Interpretazione
- Esercitazione con Python:
- valori: interi, float, stringhe.
- assegnamento, operazioni aritmetiche.
- input/output, funzioni: input(), print()
- controllo del flusso, guardie booleane, if, while
- risoluzione equazione di secondo grado.
A lezione abbiamo usato ipython tramite terminale e editor esterno (Notepad++), un altro modo di procedere è usare un ambiente integrato dove l’editor e la console dell’interprete girano nella stesso programma, uno molto bello e comodo è Spyder, installato sempre con WinPython. Provatelo. Un altro modo infine è tramite i notebook, in questo modo l’interprete gira per conto suo, e l’interfaccia è fornita dal browser che si connette all’interprete e permette cose come questa (uno degli esempi che fa vedere come tramite librerie aggiuntive Python è comparabile ad ambienti come Matlab o Mathematica): SymPyNotebook, Matplotlib, etc.
Esercizi:
- Scrivere un programma Python che legge da input tre interi (a,b,c) e stampa il valore minimo e massimo.
- Scrivere un programma Python che valuta il polinomio:
$$3x^5+2x^4-5x^3-x^2+7x-6$$
in 100 punti distinti e equidistanti presi nell’intervallo $$[-1,1]$$ - Contare le operazioni di moltiplicazione che vengono eseguite nel programma sopra: considerate anche quelle svolte implicitamente dall’operatore di elevamento a potenza a**b, se usato.
- Adesso usando il metodo di Horner, sviluppare il polinomio sopra, come:
$$((((3x + 2)x – 5)x – 1)x + 7)x – 6$$
scrivere un programma che svolge la stessa operazione di sopra ma con questa espressione, calcolate il numero complessivo di moltiplicazioni, in questo caso, e confrontate. - Dopo aver scritto un programma per il calcolo del massimo comune divisore, modificatelo, in modo che prenda come input due interi, il numeratore e denominatore di una frazione, e stampi la stessa frazione ridotta ai minimi termini.
- Scrivete un programma che svolge la seguente operazione, somma 0.1+0.1+0.1 e stampa “bene” se il risultato è 0.3 altrimenti stampa “molto strano”. Cosa accade? Preparatevi ad una sorpresa.
- Scrivete un programma che calcola l’espressione $$(1+1/k)^k$$ per k = 10,20,…1000. Cosa sta succedendo? (provate a sottrarre da quella quantità math.exp(1)). Quale risultato di analisi state sfruttando?
Codice visto a lezione:
[python]
import math
a = float(input("Inserisci a: "))
b = float(input("Inserisci b: "))
c = float(input("Inserisci c: "))
print("Equazione",a,"x^2 + ",b,"x + ",c)
delta = b**2-4*a*c
if (delta > 0):
print("Due Soluzioni distinte:",end=" ")
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b – math.sqrt(delta)) / (2*a)
print(x1,x2)
elif (delta == 0):
x1 = (-b + math.sqrt(delta)) / (2*a)
print("Due soluzioni coincidenti: ",end="")
print(x1)
else:
print("Soluzioni Complesse")
print("Finito")
[/python]
Cicli while
[python]
# questo e’ un commento
# Iterazione (Ciclo) governato da un contatore.
i = 0
while i < 10:
print("ciclo %d" % i)
i = i + 1
[/python]
Verifica il funzionamento usando i pulsanti sotto: