Es. 7. 08/05

Da aptiva.

Domenico ha proposto questa soluzione:

print"Scrivere una funzione che calcoli il prodotto scalare fra vettori e un programma che ne provi il funzionamento"
print"inserire le componenti del vettore a(es.a=[2,3,4])"
a=input("a=")
print"a=",a
print"inserire le componenti del vettore b(es.b=[2,3,4])"
b=input("b=")
print"b=",b
prod=a[(0)]*b[(0)]+a[(1)]*b[(1)]+a[(2)]*b[(2)]
print"il prodotto scalare tra i vettori a e b vale"
print"a*b=",prod

La soluzione e' da perfezionare. Il testo dice "calcoli il prodotto scalare fra vettori", non solo fra vettori di 3 elementi. Questo gruppo di esercizi e' stato proposto per fare esercitazioni sui confronti e sui cicli (in questo programma non ci sono ne' confronti ne' cicli...)

IL prossimo passo da fare per arrivare ad una soluzione sara' sostituire l'istruzione:

 prod=a[(0)]*b[(0)]+a[(1)]*b[(1)]+a[(2)]*b[(2)]

con un brano di codice sorgente che consenta di fare prodotti scalari fra vettori di ogni lunghezza (facendo uso sicuramente di un ciclo, se vuole anche di uno o piu' confronti... i due vettori devono avere la stessa lunghezza!)

Un dettaglio: le parentesi tonde nella istruzione qui sopra non servono. Poteva scrivere solamente:

 prod=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]


Domenico (02/06/2014 - Ore 18:32). ha proposto un altro metodo.

def prodotto_scalare(Ax,Ay,Az,Bx,By,Bz): #definisco la funzione che calcola il prodotto scalare fra due vettori
    return Ax*Bx+Ay*By+Az*Bz

Ax = input("Dammi la componente x del vettore A") #chiedo in ingresso le tre componenti del vettore A
Ay = input("Dammi la componente y del vettore A")
Az = input("Dammi la componente z del vettore A")

Bx = input("Dammi la componente x del vettore B")  #chiedo in ingresso le tre componenti del vettore B
By = input("Dammi la componente y del vettore B")
Bz = input("Dammi la componente z del vettore B")

risultato = prodotto_scalare(Ax,Ay,Az,Bx,By,Bz)  #metto nella variabile risultato il valore che mi restituisce la funzione prodotto_scalare

print risultato  #stampo il contenuto della variabile risultato

E' gia' molto migliore. Usa una funzione. Ma si puo' fare ancora meglio. Invece che usare 6 parametri se ne possono usare solo 2 di tipo lista e fare una funzione che possa funzionare con vettori di ogni dimensione, cioe' numero di componenti (l'unica restrizione per definire il prodotto scalare e' che abbiano la stessa lunghezza.

Come ho gia' fatto con Denis in un altro esercizio, propongo di "completare il codice" dove ho messo i puntini...

def prodotto_scalare(x,y):
  ...

print ("Calcolo della somma di due vettori")
s1=input ("Inserisci le coordinate del primo vettore separate da virgole ")
s2=input ("Inserisci le coordinate del secondo vettore separate da virgole ")
v1=s1.split(',')
v2=s2.split(',')
for i in range(len(v1)):
  v1[i]=int(v1[i])
for i in range(len(v2)):
  v2[i]=int(v2[i])
if len(v1) != len(v2):
  print("non si puo' fare il prodotto scalare di vettori di dimensioni diverse")
else:
  print("prodotto_scalare",prodotto_scalare(v1,v2))

e come nell'altro esercizio lascio anche la soluzione... ma codificata con rot13!

qrs cebqbggb_fpnyner(k,l):
        e=0
        y=yra(k)
        vs y == yra(k):
                sbe v va enatr(y):
                        e+=k[v]*l[v]
        erghea e
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti