240 likes | 355 Vues
Algebra Lineare. Esercizi assegnati. Esercizi assegnati. Algortimi e codici C per: Prodotto scalare - vettore Prodotto scalare - matrice Prodotto matrice - vettore Prodotto matrice - matrice. Prodotto scalare - vettore.
E N D
Algebra Lineare Esercizi assegnati
Esercizi assegnati • Algortimi e codici C per: • Prodotto scalare - vettore • Prodotto scalare - matrice • Prodotto matrice - vettore • Prodotto matrice - matrice
Prodotto scalare - vettore Moltiplicando uno scalare aper un vettoreBsi ottiene un nuovo vettorei cui elementi sono il prodotto dello scalare per tutti gli elementi del vettore iniziale. read (a) for i = 1, n B(i) = a * B(i) endfor
Prodotto scalare - matrice Moltiplicando uno scalare aper una matriceBsi ottiene una nuova matrice i cui elementi sono il prodotto dello scalare per tutti gli elementi della matrice iniziale. read (a) for i = 1, n for j = 1, m B(i,j) = a * B(i,j) endfor endfor
Prodotto matrice - vettore Moltiplicando una matrice Aper un vettoreBsi ottiene un vettore C i cui elementi sono determi-nati dal prodotto della corrispondente riga diA per il vettoreB. for i = 1, n C(i) = 0 for j = 1, m C(i) = C(i) + A(i,j) * B(j) endfor endfor
Prodotto matrice - matrice Moltiplicando una matrice Aper una matriceBsi ottiene una matrice C i cui elementi sono determinati dal prodotto della corrispondente riga diA per la corrispondente colonna diB. for i = 1, n for k = 1, p C(i,k) = 0 for j = 1, m C(i,k) = C(i,k) + A(i,j) * B(j,k) endfor endfor endfor
Uso delle functions • Riduzione delle linee di codice • sequenze di istruzioni identiche da ripetere più volte in punti diversi del programma • Semplificazione della scrittura del codice • Trsportabilità (riutilizzazione) in altri programmi
Definizione di function • Definizione del Tipo • int, float, char, etc. • Attribuzione di un nome • p.e. main • Dichiarazione degli argomenti • p.e. main è priva di argomenti, per cui ( ) • Corpo della funzione • racchiuso tra { }
Dichiarazione di function • Nessaria se: • il codice della function segue il codice della main • il codice della function è in un file separato(opzione -c del compilatore) • Non necessaria se il codice della function precede il codice della main
Scambio dati function/main • Function riceve dati da main attraverso gli argomenti formali (tipizzati) • Main riceve un valore dello stesso tipo della function attraverso l’istruzionereturn • La function NON restituisce risultati mediante gli argomenti • Per restituire risultati attraverso gli argomenti si DEVONOusare i puntatori
Scoping (portata) delle variabili • Le variabili della function possono essere: • gli argomenti (parametri) con valori ricevuti da function chiamante • variabili locali, ossia variabili dichiarate ed utilizzate all’interno della function • In caso di omonimia con variabili esterne la function riconosce ed usa solo le definizioni locali • Le variabili locali sono sconosciute esternamente
Esempio di function 1 (1/4) #include <stdio.h> main () { float epsis, rmins, epsilons (), rminsi (); double epsid, rmind, epsilond (), rmindo (); rmins = rminsi (); rmind = rmindo(); epsis = epsilons (); epsid = epsilond (); printf ("\nL'r-min s.p.: %e \n", rmins); printf ("L'r-min d.p.: %e \n", rmind); printf ("\nL'eps.ma. s.p.: %e \n", epsis); printf ("L'eps.ma. D.p.: %e \n\n", epsid); } /* continua */
float rminsi () { float e, rmin; e = 1.; while (e != 0.) { rmin = e; e = rmin/2; } return rmin; } double rmindo () { double f, rmin; f = 1.; while (f != 0.) { rmin = f; f = rmin/2; } return rmin; } /* continua */ (2/4)
(3/4) float epsilons () { float a, b, epsi; a = 1.; do { b = 1.; epsi = a; a = epsi/2; b = b + a; } while (b != 1.); return epsi; } /* continua */
(4/4) double epsilond () { double c, d, epsi; d = 1.; do { c = 1.; epsi = d; d = epsi/2; c = c + d; } while (c != 1.); return epsi; }
Esempio di function 2 (main) #include <stdio.h> main () { float epsis, rmins, epsilons (), rminsi (); double epsid, rmind, epsilond (), rmindo (); rmins = rminsi (); rmind = rmindo(); epsis = epsilons (); epsid = epsilond (); printf ("\nL'r-min s.p.: %e \n", rmins); printf ("L'r-min d.p.: %e \n", rmind); printf ("\nL'eps.ma. s.p.: %e \n", epsis); printf ("L'eps.ma. D.p.: %e \n\n", epsid); }
Esempio di function 2 (sub 1/3) #include <stdio.h> float rminsi () { float e, rmin; e = 1.; while (e != 0.) { rmin = e; e = rmin/2; } return rmin; } double rmindo () { double f, rmin; f = 1.; while (f != 0.) { rmin = f; f = rmin/2; } return rmin; } /* continua */
Esempio di function 2 (sub 2/3) float epsilons () { float a, b, epsi; a = 1.; do { b = 1.; epsi = a; a = epsi/2; b = b + a; } while (b != 1.); return epsi; } /* continua */
Esempio di function 2 (sub 3/3) double epsilond () { double c, d, epsi; d = 1.; do { c = 1.; epsi = d; d = epsi/2; c = c + d; } while (c != 1.); return epsi; }
Esempio di function 3 (1/4) #include <stdio.h> void rminsi (float *rmin) { float e; e = 1.; while (e != 0.) { *rmin = e; e = *rmin/2; } } void rmindo (double *rmin) { double f; f = 1.; while (f != 0.) { *rmin = f; f = *rmin/2; } } /*continua */
Esempio di function 3 (2/4) void epsilons (float *epsi) { float a, b; a = 1.; do { b = 1.; *epsi = a; a = *epsi/2; b = b + a; } while (b != 1.); } /*continua */
Esempio di function 3 (3/4) void epsilond (double *epsi) { double c, d; d = 1.; do { c = 1.; *epsi = d; d = *epsi/2; c = c + d; } while (c != 1.); } /*continua */
Esempio di function 3 (4/4) main () { float epsis, rmins; double epsid, rmind; rminsi (&rmins); rmindo (&rmind); epsilons (&epsis); epsilond (&epsid); printf ("\nL'r-min s.p.: %e \n", rmins); printf ("L'r-min d.p.: %e \n", rmind); printf ("\nL'eps.ma. s.p.: %e \n", epsis); printf ("L'eps.ma. D.p.: %e \n\n", epsid); }