Algoritmi Elementari Agenda Operazioni Elementari Somma dei primi

  • Slides: 26
Download presentation
Algoritmi Elementari

Algoritmi Elementari

Agenda Operazioni Elementari • Somma dei primi n numeri naturali • Fattoriale • Zero

Agenda Operazioni Elementari • Somma dei primi n numeri naturali • Fattoriale • Zero di una funzione • Conversione di base (da decimale a binario) • • Operazioni su Vettori Massimo in un vettore Ricerca lineare Somma di due vettori Prodotto scalare

Somma de primi N Numeri Naturali Problema: Dato un Valore N in ingresso, calcolare

Somma de primi N Numeri Naturali Problema: Dato un Valore N in ingresso, calcolare la somma dei numeri naturali tra 1 ed N Input: • N Output: • 1+2+3+…. +N Elementi di Programmazione

Somma de primi N Numeri Naturali

Somma de primi N Numeri Naturali

Somma de primi N Numeri Naturali • Chi Non gambe…. ha testa ha •

Somma de primi N Numeri Naturali • Chi Non gambe…. ha testa ha • E’ possibile ottimizzare almeno il ciclo?

Somma de primi N Numeri Naturali • Chi Non gambe…. ha testa ha •

Somma de primi N Numeri Naturali • Chi Non gambe…. ha testa ha • E’ possibile ottimizzare almeno il ciclo? 1 • Con N>1 • … quando N=2 entra, somma 1 e poi esce…

Calcolo del Fattoriale Problema: Dato un Valore N in ingresso, calcolare il valore di

Calcolo del Fattoriale Problema: Dato un Valore N in ingresso, calcolare il valore di N! Input: • N Output: • F=N!=N*(N-1)*(N-2)… Elementi di Programmazione

Calcolo del Fattoriale

Calcolo del Fattoriale

Calcolo del Fattoriale int main(void) { int n, f; printf("Inserisci un numero: "); fflush(stdout);

Calcolo del Fattoriale int main(void) { int n, f; printf("Inserisci un numero: "); fflush(stdout); scanf ("%d", &n); f=n; while(n>2) { n--; f*=n; } printf("Fattoriale: %d", f); return EXIT_SUCCESS; }

Zeri di una funzione Metodo di Bisezione Problema: Data l'equazione f(x)=0, assunto che f(x)

Zeri di una funzione Metodo di Bisezione Problema: Data l'equazione f(x)=0, assunto che f(x) sia definita e continua in un intervallo [a, b], assunto che f(a)*f(b)<0 e che la funzione è una funzione polinomiale di ordine n: f(x)= a+a 1*x 1+a 2*x 2+a. . *x. . +an*xn Calcolare almeno uno zero della funzione nell’intervallo [a, b] Input: • N ed i parametri ai Output: • x: f(x)=0 Per semplicità fissiamo N=2 Elementi di Programmazione

Zeri di una funzione Metodo di Bisezione Metodo Risolutivo: Suddividiamo [a, b] in due

Zeri di una funzione Metodo di Bisezione Metodo Risolutivo: Suddividiamo [a, b] in due intervalli. I’=[a, z] I’’=[z, b] z=(a+b)/2 Se f(z)=0, abbiamo trovato la soluzione. Altrimenti si sceglie I’ se f(a)*f(z)<0 I’’ se f(z)*f(b)<0 E si procede nuovamente. L’algoritmo termina quando f(z)<Ɛ Elementi di Programmazione

Zeri di una funzione Metodo di Bisezione

Zeri di una funzione Metodo di Bisezione

Zeri di una funzione Metodo di Bisezione • Il Codice riporta solo la parte

Zeri di una funzione Metodo di Bisezione • Il Codice riporta solo la parte di elaborazione • (Niente I/O) fl=(a+a 1*low+a 2*low); fh=(a+a 1*high+a 2*high); do { z=(low+high)/2; fz=(a+a 1*z+a 2*z*z); if((fz*fl)<0) { high=z; fh=fz; } else { low=z; fl=fz; } i++; } while((fz>0. 001)&&(i<20));

Esercizio per casa • Volendo applicare il metodo ad un qualsiasi polinomio • Come

Esercizio per casa • Volendo applicare il metodo ad un qualsiasi polinomio • Come cambia il diagramma di flusso? • Come cambia il codice? • Realizzare un programma che calcola lo zero di una funzione per un polinomio di ordine n qualsiasi.

Conversione di base Problema: Dato un numero rappresentato in base b calcolare la rappresentazione

Conversione di base Problema: Dato un numero rappresentato in base b calcolare la rappresentazione dello stesso numero in base B Input: • Il numero in base b Output: • Il numero in base B Per semplicità fissiamo b=2 B=10 Elementi di Programmazione

Conversione di base unsigned int peso = 1; n 2 = n; n 10=0;

Conversione di base unsigned int peso = 1; n 2 = n; n 10=0; while (n 2 > 0) { cifra = n 2 % 10; if (cifra > BASE 1) { printf(“Errore"); return 1; } n 10 = n 10 + cifra * peso; peso = peso * base; n 2 = n 2 / 10; }

Esercizio per casa • Realizzare un programma che effettua la conversione di base richiedendo

Esercizio per casa • Realizzare un programma che effettua la conversione di base richiedendo in ingresso sia la base del numero in ingresso che quella del numero in uscita.

Massimo in un vettore Problema: Dato un vettore di N elementi, trovare il massimo

Massimo in un vettore Problema: Dato un vettore di N elementi, trovare il massimo Input: • N ed i valore del vettore Output: • Il massimo del vettore Elementi di Programmazione

Massimo in un vettore for (i=0; i<N; i++){ printf("Elemento %d: ", i); fflush(stdout); gets(tmp);

Massimo in un vettore for (i=0; i<N; i++){ printf("Elemento %d: ", i); fflush(stdout); gets(tmp); V[i]=atof(tmp); } max=V[0]; for (i=0; i<N; i++){ if(max<V[i]) { max=V[i]; } }

Ricerca in un vettore Problema: Dato un vettore di N elementi ed un elemento

Ricerca in un vettore Problema: Dato un vettore di N elementi ed un elemento E, trovare la posizione di quell’elemento Input: • N ed i valore del vettore • Elemento da cercare E Output: • La posizione del vell’elemento nel vettore Elementi di Programmazione

Ricerca in un vettore • C’è un errore. • Quale?

Ricerca in un vettore • C’è un errore. • Quale?

Ricerca in un vettore i=0; while ((el!=V[i])&&(i<N)){ i++; } if(i>=N) printf("Elemento assenten"); else printf("Posizione:

Ricerca in un vettore i=0; while ((el!=V[i])&&(i<N)){ i++; } if(i>=N) printf("Elemento assenten"); else printf("Posizione: %d", i);

Somma di due vettori Problema: Dati due vettori V 1 e V 2 calcolare

Somma di due vettori Problema: Dati due vettori V 1 e V 2 calcolare il vettore dato dalla somma dei suoi elementi Input: • V 1 e V 2 Output: • V=V 1+V 2: Ɐi V[i]=V 1[i]+V 2[i] Elementi di Programmazione

Somma di due vettori

Somma di due vettori

Prodotto scalare di due vettori Problema: Dati due vettori V 1 e V 2

Prodotto scalare di due vettori Problema: Dati due vettori V 1 e V 2 calcolare il prodotto scalare di due vettori Input: • V 1 e V 2 Output: • v=V 1*V 2= ∑i V 1[i]*V 2[i] Elementi di Programmazione

Inversione di un vettore Problema: Dato un vettore V generare il vettore V 2

Inversione di un vettore Problema: Dato un vettore V generare il vettore V 2 i cui elementi hanno posti invertiti rispetto a V Esempio: V 1= [1, 2, 3, 4] V 2=[4, 3, 2, 1] Input: • V Output: • V 2 Elementi di Programmazione