|
Somma (N numeri) |
|
Se N è uguale a 1 allora la Sommatoria è il valore del numero,
Altrimenti: Aggiungere all'ultimo elemento la Somma (dei primi N-1 numeri). |
long x[]; |
long somma(int n) { if (n==0) return x[0]; else return somma(n-1) + x[n]; } |
| int main(int argc, char *argv[]) {
. . . printf("%ld", somma(9)); . . . } |
| bn = | b · b · ... · b |
| ← n volte → |
|
Potenza (b, n) |
|
Se n è uguale a 0 (e b≠0) allora la potenza è 1,
Altrimenti: Moltiplicare b per la Potenza (b, n-1). |
int potenza(long base, int esponente) { if (esponente==0) return 1; else return potenza(base, esponente-1)*base; } |
| int main(int argc, char *argv[]) {
. . . printf("%ld", Potenza(3L, 4)); . . . } |
|
Scomporre (n) |
|
determinare un divisore, e il relativo quoziente, di n, se il divisore è diverso sia da 1 che da n allora { scomporre il divisore scomporre il quoziente } Altrimenti se il dividendo n è diverso da 1 allora n è un fattore primo. |
|
void scomponi (int n) { int i, quoziente, resto; i=1; do { ++i; quoziente = n/i; resto = n % i; } while (resto!=0); if (i!=n) { scomponi(quoziente); scomponi(i); } else { if (n!=1) printf("%d un fattore primo\n", n); } } |
| calcola il Massimo Comun Divisore tra m ed n: |
|
Se m è uguale ad n allora n è il Massimo Comun Divisore altrimenti se m>n calcola il Massimo Comun Divisore tra m-n e n altrimenti calcola il Massimo Comun Divisore tra m e n-m |
|
int MCD(int m, int n) { if (m==n) return m; else { if (m>n) return MCD(m-n, n); else return MCD(m, n-m); } } |
| Convertire il numero N da base 10 a base B: |
|
Se il numero N ≠ 0 allora Converti il quoziente (N / B) nella base B il resto tra N e B è la prossima cifra di N in base B |
|
void cambiaBase(int N, int base) { if (N!=0) { cambiaBase(N/base, base); cout << N%base << endl; } } |
| Permutare un elenco di N elementi: |
|
se l'elenco contiene almeno un elemento allora estrarre un elemento e posizionarlo in testa all'elenco permutare gli N-1 elementi restanti altrimenti la permutazione è vuota |
|
void permuta (int lista[], int a, int z) { int scambio, k; if ((z - a) >= 1) { for (k = z; k >= a; k--) { scambio = lista[k]; lista[k] = lista[z]; lista[z] = scambio; permuta (lista, a, z-1); scambio = lista[k]; lista[k] = lista[z]; lista[z] = scambio; } } else /* Visualizza l'array (è una permutazione) */ } |
|
int main (int argc, char *argv[]) { int i; int lista[]; int NElem=4; . . . permuta (lista, 0, NElem-1); . . . } |
| Combinare un elenco di N elementi a gruppi di k elementi: |
|
se k=0 le combinazioni sono vuote, mentre se k=N l'unica combinazione possibile è costituita dagli elementi stessi.
altrimenti: Ognuno degli elementi dell'insieme, fino a quello in posizione N-k+1, è il primo elemento di una combinazione i restanti N-1 elementi sono una combinazione a gruppi di k-1. |
| 1 | #include <string.h> |
| 2 | int Combinazione[10]; |
| 3 | int NrElem; |
| 4 | int qta; |
| 5 | void mostraComb(char Elementi[]) { |
| 6 | int i = 0; |
| 7 | for(i = 0; i < 3; i++) { |
| 8 | printf(" %c", Elementi[Combinazione[i]]); |
| 9 | } |
| 10 | printf("\n"); |
| 11 | } |
| 12 | void Combina(char Elementi[], int k, int Primo) { |
| 13 | if(k == 0 || k == NrElem) { |
| 14 | printf("\nOttenuta una combinazione: "); |
| 15 | mostraComb(Elementi); |
| 16 | return; |
| 17 | } |
| 18 | for (int j=Primo; j<NrElem-k+1; j++) { |
| 19 | Combinazione[qta] = j; |
| 20 | qta++; |
| 21 | Combina(Elementi, k-1, j+1); |
| 22 | qta--; |
| 23 | } |
| 24 | } |
| 25 | int main() { |
| 26 | char Elementi[10]; |
| 27 | int Gruppi = 3; |
| 28 | int i; |
| 29 | qta=0; |
| 30 | printf("\nInserire gli elementi da combinare: "); |
| 31 | gets(Elementi); |
| 32 | NrElem = strlen(Elementi); |
| 33 | i=0; |
| 34 | Combina(Elementi, Gruppi, i); |
| 35 | system("PAUSE"); |
| 36 | return 0; |
| 37 | } |
|
cercare il minimo nell'array V tra gli estremi inizio e fine
se l'array contiene un solo elemento Allora: il minimo è V[inizio]. Altrimenti:
|