11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Esempio A-16. Generare numeri primi utilizzando l’operatore modulo<br />

#!/bin/bash<br />

# primes.sh: Genera numeri primi, senza l’impiego degli array.<br />

# Script fornito da Stephane Chazelas.<br />

Appen<strong>di</strong>ce A. Script aggiuntivi<br />

# Qui *non* viene usato il classico algoritmo del "Crivello <strong>di</strong> Eratostene",<br />

#+ viene invece usato il metodo più intuitivo <strong>di</strong> verificare ogni numero<br />

#+ tramite i fattori (<strong>di</strong>visori), per mezzo dell’operatore modulo "%".<br />

LIMITE=1000 # Primi 2 - 1000<br />

Primi()<br />

{<br />

(( n = $1 + 1 )) # Salta all’intero successivo.<br />

shift # Parametro successivo nell’elenco.<br />

# echo "_n=$n i=$i_"<br />

if (( n == LIMITE ))<br />

then echo $*<br />

return<br />

fi<br />

for i; do # "i" viene impostato a "@",<br />

#+ i valori precedenti <strong>di</strong> $n.<br />

# echo "-n=$n i=$i-"<br />

(( i * i > n )) && break # Ottimizzazione.<br />

(( n % i )) && continue # Scarta i non-primi usando l’operatore modulo.<br />

Primi $n $@ # Ricorsività all’interno del ciclo.<br />

return<br />

done<br />

}<br />

Primi $n $@ $n # Ricorsività esterna al ciclo.<br />

# Accumula in successione i parametri posizionali.<br />

# "$@" è l’elenco dei numeri primi.<br />

Primi 1<br />

exit 0<br />

# Decommentate le righe 16 e 25 come aiuto per scoprire quello che succede.<br />

# Confrontate la velocità <strong>di</strong> questo algoritmo<br />

#+ rispetto al Crivello <strong>di</strong> Eratostene (ex68.sh).<br />

# Esercizio: per un’esecuzione ancor più veloce, riscrivete lo script<br />

#+ senza usare la ricorsività.<br />

+<br />

637

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!