Corso di Fondamenti di Informatica

Slides:



Advertisements
Presentazioni simili
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Advertisements

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
VETTORI: DEFINIZIONI Se ad una grandezza fisica G si associa una direzione ed un verso si parla di vettori: ✔ Le grandezze fisiche possono essere di due.
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
NUMERI RELATIVI I numeri relativi comprendono i numeri positivi, negativi e lo 0 Esempio: +10, -5, +3, 0, -2 I numeri relativi si possono trovare all’interno.
POTENZE
x : variabile indipendente
© 2007 SEI-Società Editrice Internazionale, Apogeo
SUMMERMATHCAMP TARVISIO, AGOSTO 2017
Giovanni Finaldi Russo Pietro Bruno
Definizione di logaritmo
x : variabile indipendente
Le primitive di una funzione
Richiami di Algebra Matriciale
10. Programmazione Ricorsiva Ing. Simona Colucci
x : variabile indipendente
22) Funzioni (prima parte)
Approcci nella soluzione di un problema
Informatica per Scienze Geologiche LT a.a
Elevamento a potenza di G. CALVI
Process synchronization
Quick Sort: Esempio Si consideri il seguente vettore, v, di n=10 elementi: i=inf j=sup Scegliamo come pivot.
Richiami di Algebra Matriciale
I RADICALI Definizione di radicali Semplificazione di radicali
iterazione o ricorsione nel pensare per OGGETTI
{ } Multipli di un numero M4 ESEMPIO 0, 4, 8, 12, 16, 20, 24, …
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Corso Java Matrici.
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
Scrivere programmi corretti
Ricorsione 16/01/2019 package.
Le primitive di una funzione
Alberi n-ary Lezioni di C.
Process synchronization
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
I RADICALI ARITMETICI.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Java Matrici.
POTENZA con numeri relativi (esponente +)
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
comprensione e modifica di codice
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
NUMERI RELATIVI ..., -2, -1, 0, 1, 2, ... formano l’insieme dei numeri interi Sono chiamati anche numeri relativi, in quanto il loro valore dipende dal.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
MergeSort Usa la tecnica del divide et impera:
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Matrici e determinanti
Process synchronization
Richiami di Algebra Matriciale
Corso di Fondamenti di Informatica
Process synchronization
Ricerca 01/08/2019 package.
Corso di Fondamenti di Informatica
Algoritmi di ordinamento
Corso di Fondamenti di Informatica
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Corso di Fondamenti di Informatica Macroarea di Ingegneria 2018/19 Tutor: prof. Francesco De Vincenzi

MATLAB: esercizio Dati un vettore e una matrice di dimensioni qualsiasi, trovare le coordinate (riga e colonna) del punto in cui il vettore si trova all’interno della matrice. 2 1 2 3 4 5 7 7 3 4 3

MATLAB: esercizio Suddivido il problema in sottoproblemi Verificare se due vettori sono uguali Cercare la posizione di un vettore in un vettore più grande Cercare la posizione di un vettore in una riga di una matrice = 7 3 4 ? 7 3 4 7 3 4 2 5 7 3 4 8 1 6 4 2 3 9 5 7 8 7 3 4

MATLAB: esercizio Oppure… function uguali = confrontaVettori(A1,A2) lung1=length(A1); lung2=length(A2); if(lung1~=lung2) uguali=false; else uguali=true; for i=1:1:lung1 if A1(i)~=A2(i) end Oppure… function uguali = confrontaVettori2(A1,A2) uguali=length(A1)==length(A2) && min(A1==A2); end

MATLAB: esercizio function pos = cercaSottoVettore(A1,A2) %A1 vettore da cercare [3 4 5] %A2 vettore in cui cercare [1 2 3 4 5 6 7 8 9] lung1=length(A1); lung2=length(A2); if(lung1>lung2) pos=0; % 0 posizione non valida, la uso per else % indicare che il vettore non c’è pos=0; for i=1:lung2-lung1+1 if confrontaVettori(A1,A2(i:i+lung1-1)) pos=i; break; end

MATLAB: esercizio function [riga,colonna] = posVettoreInMatrice(V,M) dimensioni=size(M); for i=1:dimensioni(1) posVettore= cercaSottoVettore(V,M(i,:)); if posVettore>0 riga=i; colonna=posVettore; break; end

MATLAB: esercizio Dato un vettore, cercare la posizione dell’elemento minimo 7 3 2 4 1 5 6 La posizione è la 6 function p = posMinimo( V) minimo=intmax('int64'); for i=1:length(V) if V(i)<minimo minimo=V(i); p=i; end

MATLAB: esercizio Se n=2 Se n=3 7 3 2 4 1 5 6 7 3 2 4 1 5 6 Dato un vettore V e un numero n, cercare la posizione del sottovettore di V lungo n la cui somma degli elementi sia minima. Esempio: Se n=2 7 3 2 4 1 5 6 La posizione è la 5. Infatti 3+1 dà somma 4 Se n=3 7 3 2 4 1 5 6 La posizione è la 4. Infatti 4+3+1 dà somma 8

MATLAB: esercizio Suddivido il problema in sottoproblemi Prelevare da un vettore un sottovettore di lunghezza generica n Applicare la somma a tutti i sottovettori di lunghezza n, trovando la posizione di quello che dà somma più piccola n=3 2 5 7 3 4 7 3 4 14 15 2 5 7 3 4 14 9

MATLAB: esercizio function s = sottoVettore(V,inizio,lung) s=V(inizio:inizio+lung-1); end function sm = sottoVettoreMinimo( V, n) lung=length(V); minimo= intmax('int64'); %massimo valore possibile per un int64 for i=1:lung-n+1 sommaSottovettore=sum(sottoVettore(V,i,n)); if sommaSottovettore<minimo minimo=sommaSottovettore; sm=i; end

MATLAB: esercizio Se n=2 2 5 7 3 4 1 6 8 Data una matrice M e un numero n, trovare la posizione (elemento in alto a sinistra) della sottomatrice nxn con la somma minima. Se n=2 2 5 7 3 4 1 6 8 La posizione è (2,2) e contiene la somma 8 che è la più bassa possibile.

MATLAB: esercizio Costruisco due funzioni “di servizio”: La prima mi estrae da una matrice una sottomatrice quadrata di lato n in posizione (i,j) La seconda produce la somma di tutti gli elementi di una matrice function s = sottoMatrice(M,i,j,n) s=M(i:i+n-1,j:j+n-1); end function s = sommaElementiMatrice(M) s=sum(sum(M)); end

MATLAB: esercizio function [riga,colonna] = posSottomatriceMinima(M,n) minimo=intmax('int64'); dimensioni=size(M); for i=1:dimensioni(1)-n+1 for j=1:dimensioni(2)-n+1 sommaSottomatrice=sommaElementiMatrice(sottoMatrice(M,i,j,n)); if sommaSottomatrice<minimo minimo=sommaSottomatrice; riga=i; colonna=j; end

Una funzione che richiama se stessa!? MATLAB: La ricorsione function s = funzione(…) … funzione(…) end Una funzione che richiama se stessa!?

MATLAB: La ricorsione La ricorsione è una tecnica di scrittura di funzioni. Si può applicare quando l’insieme dei valori su cui è applicabile la funzione (dominio) gode di due proprietà: L’insieme è ordinato (si può sempre dire se un elemento è o non è più piccolo di un altro) Esiste un elemento più piccolo di tutti (elemento “base”)

MATLAB: La ricorsione Esempio del DOMINO . . . . . . Primo elemento di un insieme ordinato. È il caso “base”, per il quale bisogna avere un trattamento particolare. Elemento generico di un insieme ordinato. Il suo comportamento dipende dal comportamento dell’elemento precedente

MATLAB: La ricorsione 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … Possiamo applicare la ricorsione a: L’insieme dei numeri naturali 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … 2) L’insieme degli elementi di un vettore 1 2 3 4 5 6 7 8 9 10 …

Funzione che calcola il doppio di un numero naturale (>=0) MATLAB: Esempio Funzione che calcola il doppio di un numero naturale (>=0) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … Il doppio di un qualsiasi numero è il doppio del precedente aumentato di 2 Il doppio di 0 è 0.

MATLAB: Esempio function d = doppio(n) Esempio di chiamata: if n==0 disp("caso base"); d=0; else disp(n); d=doppio(n-1)+2; end Esempio di chiamata: doppio(5)= doppio(4)+2= doppio(3)+2+2 doppio(2)+2+2+2= doppio(1)+2+2+2+2= doppio(0)+2+2+2+2+2= 0+2+2+2+2+2=10

Funzione che verifica se un numero è pari MATLAB: Esempio Funzione che verifica se un numero è pari 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … Un numero è pari se il precedente è dispari e viceversa. 0 è pari.

MATLAB: Esempio function p = pari(n) Esempio di chiamata: if n==0 p=true; else p=not(pari(n-1)); end Esempio di chiamata: pari(5)= not(pari(4))= not(not(pari(3)))= not(not(not(pari(2))))= not(not(not(not(pari(1)))))= not(not(not(not(not(pari(0))))))= not(not(not(not(not(true)))))= not(not(not(not(false))))= not(not(not(true)))= not(not(false))= not(true)= false

function risultato = prodottoRicorsivo (a, b) if(a==1) risultato=b; else risultato=b+prodottoRicorsivo(a-1,b); end

%Calcolare a elevato a b %con b>=0 function p = potenzaRicorsiva (a, b) if(b==0) p=1; else p=a*potenzaRicorsiva(a,b-1); end

%Funzione per calcolare il numero di divisori di un numero %Esempio di chiamata: divisoriRicorsiva (n, m) function d = divisoriRicorsiva (n, m) if m==1 d=1; else if mod(n,m)==0 d=1+divisoriRicorsiva(n,m-1); d=divisoriRicorsiva(n,m-1); end

Calcolare la somma degli elementi di un vettore MATLAB: Esempio Calcolare la somma degli elementi di un vettore 1 2 3 4 5 6 7 8 9 10 … La somma degli elementi di un vettore vuoto è 0. sommaV( ) = 0 2) La somma degli elementi di un vettore qualsiasi è la somma tra l’ultimo valore e la somma degli elementi del vettore ottenuto togliendo l’ultimo valore sommaV( ) = a b c d sommaV( ) + d a b c

+sommaV( ) = 4+2+3+1+ sommaV( )= MATLAB: Esempio function s = sommaV(V) lung=length(V); if(lung==0) s=0; else s=V(lung)+sommaV(V(1:lung-1)); end sommaV( ) = 1 3 2 4 1 3 2 4+sommaV( ) = 1 4+2+sommaV( ) = 4+2+3 1 3 +sommaV( ) = 4+2+3+1+ sommaV( )= 4+2+3+1+0=10

Contare il numero di occorrenze di un valore x in un vettore V MATLAB: Esempio Contare il numero di occorrenze di un valore x in un vettore V Il numero di occorrenze di un valore in un vettore vuoto è 0 2) In un vettore non vuoto confronto x col primo elemento e rilancio la ricerca sul resto del vettore x 0/1+ il numero di occorrenze di x nel resto del vettore 1 2 3 4 5 6 7 8 9 10

MATLAB: Esempio function n = contaOccorrenze(x, V) lung=length(V); if lung==0 n=0; else if V(1)==x n=1+contaOccorrenze (x,V(2:lung)); n=contaOccorrenze (x,V(2:lung)); end caso base caso ricorsivo

MATLAB: Esempio Dato un valore x ed un vettore V, produrre il vettore con i soli elementi di V maggiori di x Se il vettore è vuoto, il vettore risultato è vuoto 2) In un vettore non vuoto confronto x col primo elemento e rilancio la ricerca sul resto del vettore x Scarto l’elemento in prima posizione o lo concateno col risultato della funzione eseguita sul resto del vettore 1 2 3 4 5 6 7 8 9 10

MATLAB: Esempio caso base caso ricorsivo function R = maggiori (x, V) lung=length(V); if(lung==0) R=[]; else if(V(1)>x) R=[V(1) maggiori(x,V(2:lung))]; R=maggiori(x,V(2:lung)); end caso base caso ricorsivo

MATLAB: Ricorsione e matrici E’ possibile applicare la ricorsione anche a matrici, a patto di definire un ordinamento delle sue posizioni. 1 4 2 3 1,1 1,2 1,3 1,4 2,1 Sfruttando l’indice unico che in una matrice enumera gli elementi da sinistra a destra, dall’alto in basso Sfruttando il doppio indice riga/colonna

MATLAB: Ricorsione e matrici Sommare gli elementi di una matrice function somma = sommaMatriceRicorsiva (pos,M) dimensioni=size(M); numeroElementi=dimensioni(1)*dimensioni(2); if(pos>numeroElementi) somma=0; else somma=M(pos)+sommaMatriceRicorsiva(pos+1,M); end Viene fornito l’indice di partenza Chiamata: sommaMatriceRicorsiva(1,MAT)

MATLAB: Ricorsione e matrici function somma = sommaMatriceRicorsiva1 (r, c, M) dimensioni=size(M); if(r==dimensioni(1) & c==dimensioni(2)) somma=M(r,c); else r1=r; c1=c+1; if(c1>dimensioni(2)) c1=1; r1=r1+1; end somma=M(r,c)+sommaMatriceRicorsiva1(r1,c1,M); Vengono forniti gli indici di partenza Chiamata: sommaMatriceRicorsiva1(1,1,MAT)

MATLAB: Esercizi Scrivi una funzione ricorsiva che prende in input un numero intero non negativo n e calcola il suo quadrato n2 (sugg. n2 =n+n+….+n ) Scrivi una funzione ricorsiva che prende in input un numero intero non negativo n e calcola il suo fattoriale (il prodotto 1*2*3*…*n) Scrivi una funzione ricorsiva che prende in input un numero intero non negativo n e calcola la potenza 2n (sugg. n2 =2*2*….*2 ) Scrivi una funzione ricorsiva che prende in input un vettore V e calcola il prodotto dei suoi elementi Scrivi una funzione ricorsiva che prende in input un vettore V e conta quanti zeri ci sono Scrivi una funzione ricorsiva che prende in input un vettore V e trova il suo valore minimo Scrivi una funzione ricorsiva che prende in input due vettori e produce un valore booleano true se sono uguali(stessi valori nelle stesse posizioni) o false