Decrescita programmata

Matematica Senza Frontiere – 10/2/2015 n. 2 Annamaria si diverte con le successioni numeriche. Sceglie un numero intero naturale come primo numero della successione; calcola il successivo moltiplicando tra loro le cifre del numero. Procede analogamente con il numero ottenuto finché non ottiene un numero con una sola cifra. Ad esempio, iniziando da 68, ottiene … Leggi tutto

Categorie MSF

Aritmetica: potenza

Iterativa MN = Pot(M, N) = M*M*…*M (N fattori) Function PotIter(M, N: Integer): LongInt; Var   I, Risp: LongInt; Begin   Risp:=1;   For I:=1 to N Do       Risp:=Risp*M;   PotIter:=Risp; End; Ricorsiva M0 = 1, per N = 0 MN = M*MN-1, altrimenti oppure Pot(M, N) = 1, per N = … Leggi tutto

Aritmetica: prodotto

Iterativo M*N = 0, per N = 0 M*N = M+M+…+M (N addendi), altrimenti Function ProdIter(M, N: Integer): LongInt; Var   I : Integer;   Risp: LongInt; Begin   Risp:=0;   For I:=1 To N Do       Risp:=Risp+M;   ProdIter:=Risp; End; Oppure M*N = 0, per N = 0 M*N = INCREMENTAN(0, m), … Leggi tutto

Aritmetica: somma

Iterativa Osserva le diverse versioni M+N = M+1 … +1 (N volte) M+N = ((…((M+1)+1)…)+1) Somma(M, N) = Successivo(Successivo(…Successivo(M)…)) Somma(M, N) = SuccessivoN(M) Function SomIter(M, N: LongInt): LongInt; Var    I: LongInt; Begin    For I:=1 To N Do       Inc(M);         { M:=M+1; } { M:=Succ(M); }    SomIter:=M; End; … Leggi tutto

Algoritmo di Euclide

L’algoritmo di Euclide permette di calcolare il massimo comun divisore, MCD, tra due numeri interi. Vedi Wikipedia: Algoritmo di Euclide. Algoritmo Dati due numeri naturali a e b se b è zero allora la risposta è a altrimenti si divide a per b e si assegna ad r il resto della divisione se r=0 allora la … Leggi tutto

La torre di Hanoi

Il problema Nel tempio di Brahma si trova una piattaforma di ottone con tre perni di diamanti. Sul primo di tali perni sono infilati 64 dischi d’oro, di dimensioni decrescenti, che formano una torre. Si deve portare la torre sul terzo perno, spostando un solo disco alla volta e in modo che mai un disco … Leggi tutto

Contare i caratteri

I problemi con i testi (parole, frasi) sono diversi da quelli con i numeri… Quanti caratteri in un testo? Quante vocali, consonanti? Quante maiuscole, minuscole? Quante A, B, C, …, Z? Per contare quante volte compare ciascun lettera puoi cominciare così… Var    CONTATORI: Array[‘A’..’Z’] of Word; (* fino a ~65000*)    frase    : … Leggi tutto

Quick sort

Un algoritmo di ordinamento molto complicato: ricorsivo e difficile da ricordare ma ottimo: è quasi sempre molto veloce… Procedure QUICKSORT(var V: Vettore; Inf, Sup: Integer); Var   i, j: Integer;   Perno: Elemento; Begin1   If(Inf < Sup) Then       Begin         i:=Inf;         j:=Sup;     ... Leggi tutto

Merge Sort

Algoritmo intuitivo e ottimo. Utilizza l’algoritmo di fusione di sottosequenze ordinate. Procedure MERGESORT(Var V: Vettore; Inf, Sup: Integer); Var   Medio: Integer; Begin   If(Inf < Sup) Then       Begin         Medio:=(Inf+Sup) Div 2;         MERGESORT(V, Inf    , Medio);         MERGESORT(V, Medio+1, Sup ... Leggi tutto

Selection Sort

Algoritmo intuitivo e più veloce del bubble sort. Si può individuare il valore minimo in un array V e scambiarlo con il valore alla prima posizione. PosMin:=1; For j:=2 To N    If(V[j] < V[posMin]) Then       PosMin=j; SCAMBIA(V, 1, PosMin) In questo modo l'elemento alla posizione 1 occupa definitivamente il posto che ... Leggi tutto