[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]
[volume]
[parte]
Capitolo 422. Algoritmi elementari con la shell POSIX
Questo capitolo raccoglie degli esempi di programmazione per lo studio elementare degli algoritmi, realizzati in forma di script per una shell POSIX. Questi esempi sono ottenuti ricostruendo un lavoro didattico del 1983, realizzato allora con degli script ARCS, un linguaggio del sistema operativo CMS (Computer management system) Burroughs.
422.1
ARCS0: ricerca del valore più grande tra tre numeri interi
#!/bin/sh
##
## ARCS0 1983-07-02
##
## Trovare il più grande fra tre numeri interi, diversi tra loro.
##
echo -n "inserisci il primo numero "
read a
echo -n "inserisci il secondo numero "
read b
echo -n "inserisci il terzo numero "
read c
if [ $a -gt $b ]
then
if [ $a -gt $c ]
then
echo "il numero maggiore è $a"
else
echo "il numero maggiore è $c"
fi
else
if [ $b -gt $c ]
then
echo "il numero maggiore è $b"
else
echo "il numero maggiore è $c"
fi
fi
|
|
422.2
ARCS1: moltiplicazione di due numeri interi
##
## ARCS1 1983-07-06
##
## Moltiplicazione di due numeri.
##
echo -n "inserisci il primo numero - 0 per finire "
read x
echo -n "inserisci il secondo numero - 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
z=0
while [ $y -ne 0 ]
do
z=$(($z + $x))
y=$(($y - 1))
done
echo "il risultato è $z"
echo -n "inserisci il primo numero - 0 per finire "
read x
echo -n "inserisci il secondo numero - 0 per finire "
read y
done
|
|
422.3
ARCS2: valore assoluto della differenza tra due valori
#!/bin/sh
##
## ARCS2 1983-07-06
##
## Valore assoluto della differenza tra due numeri.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
if [ $x -lt $y ]
then
u=$x
x=$y
y=$u
fi
z=$(($x - $y))
echo "|x-y| = $z"
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.4
ARCS3: somma tra due numeri
#!/bin/sh
##
## ARCS3 1983-07-07
##
## Somma tra due numeri.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
while [ $y -ne 0 ]
do
x=$(($x + 1 ))
y=$(($y - 1))
done
echo "x+y = $x"
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.5
ARCS4: prodotto tra due numeri
#!/bin/sh
##
## ARCS4 1983-07-07
##
## Prodotto tra due numeri.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
z=0
t=$y
while [ $t -ne 0 ]
do
u=$z
v=$x
while [ $v -ne 0 ]
do
u=$(($u + 1))
v=$(($v - 1))
done
z=$u
t=$(($t - 1))
done
echo "x*y = $z"
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.6
ARCS5: quoziente
#!/bin/sh
##
## ARCS5 1983-07-07
##
## Quoziente.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
if [ $y -eq 0 ]
then
echo "x / 0 = indefinito"
else
z=0
if [ $x -ge $y ]
then
u=$x
until [ $u -le 0 ]
do
u=$(($u - $y))
if [ $u -ge 0 ]
then
z=$(($z + 1))
fi
done
echo "x / y = $z"
else
echo "x / y = $z"
fi
fi
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.7
ARCS6: verifica della parità di un numero
#!/bin/sh
##
## ARCS6 1983-07-07
##
## Verifica della parità di un numero.
##
echo -n "inserisci x 0 per finire "
read x
until [ $x -eq 0 ]
do
y=$((($x / 2) * 2))
if [ $x -ne $y ]
then
echo "il numero $x è dispari"
else
echo "il numero $x è pari"
fi
echo -n "inserisci x 0 per finire "
read x
done
|
|
422.8
ARCS7: fattoriale
#!/bin/sh
##
## ARCS7 1983-07-08
##
## Fattoriale di un numero.
##
echo -n "inserisci il numero 99 per finire "
read n
until [ $n -eq 99 ]
do
z=1
k=0
while [ $k -ne $n ]
do
k=$(($k + 1))
z=$(($z * $k))
done
echo "$n! = $z"
echo -n "inserisci il numero 99 per finire "
read n
done
|
|
422.9
ARCS8: coefficiente binomiale
#!/bin/sh
##
## ARCS8 1983-07-08
##
## Coefficiente binomiale.
##
## /n\ = n*(n-1)*...*(n-k+1) / k!
## \k/
##
echo -n "inserisci n 999 per finire "
read a
echo -n "inserisci k 999 per finire "
read b
until [ $a -eq 999 ] && [ $b = 999 ]
do
if [ $b -eq 0 ]
then
echo "il coefficiente binomiale di n su 0 è 1"
else
k1=0
z1=1
while [ $k1 -ne $b ]
do
k1=$(($k1 + 1))
z1=$((z1 * k1))
done
y=$z1
k2=$(($a - $b))
z2=1
while [ $k2 -ne $a ]
do
k2=$(($k2 + 1))
z2=$(($z2 * $k2))
done
x=$z2
z=$(($x / $y))
echo "il coefficiente binomiale è $x/$y"
echo "che se viene calcolato con approssimazione"
echo "di una unità, dà $z"
fi
echo -n "inserisci n 999 per finire "
read a
echo -n "inserisci k 999 per finire "
read b
done
|
|
422.10
ARCS10: massimo comune divisore
#!/bin/sh
##
## ARCS10 1983-07-09
##
## M.C.D.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
z=$x
w=$y
while [ $z -ne $w ]
do
if [ $z -gt $w ]
then
z=$(($z - $w))
else
w=$(($w - $z))
fi
done
echo "il M.C.D. di $x e $y è $z"
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.11
ARCS11: massimo comune divisore
#!/bin/sh
##
## ARCS11 1983-07-09
##
## M.C.D.
##
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
until [ $x -eq 0 ] && [ $y -eq 0 ]
do
z=$x
w=$y
while [ $z -ne $w ]
do
while [ $z -gt $w ]
do
z=$(($z - $w))
done
while [ $w -gt $z ]
do
w=$(($w - $z))
done
done
echo "il M.C.D. di $x e $y è $z"
echo -n "inserisci x 0 per finire "
read x
echo -n "inserisci y 0 per finire "
read y
done
|
|
422.12
ARCS12: radice quadrata intera
#!/bin/sh
##
## ARCS12 1983-07-09
##
## radice quadrata intera
##
echo -n "inserisci il numero di cui vuoi la radice 0 per finire "
read x
until [ $x -eq 0 ]
do
z=0
t=0
until [ $t -ge $x ]
do
z=$(($z + 1))
t=$(($z * $z))
done
if [ $t -ne $x ]
then
z=$(($z - 1))
fi
echo "la radice intera di $x è $z"
echo -n "inserisci il numero di cui vuoi la radice 0 per finire "
read x
done
|
|
422.13
ARCS13: numero primo
#!/bin/sh
##
## ARCS13 1983-07-09
##
## il numero è primo?
##
echo -n "inserisci il numero 9999 per finire "
read x
until [ $x -eq 9999 ]
do
primo=1
k=2
while [ $k -lt $x ] && [ $primo -eq 1 ]
do
t=$(($x / $k))
t=$(($x - ($t * $k)))
if [ $t -eq 0 ]
then
primo=0
else
k=$(($k + 1))
fi
done
if [ $primo -eq 1 ]
then
echo "il numero $x è primo"
else
echo "il numero $x non è primo"
fi
echo -n "inserisci il numero 9999 per finire "
read x
done
|
|
422.14
ARCS14: numero primo
#!/bin/sh
##
## ARCS14 1983-07-09
##
## il numero è primo?
## questa versione non funziona correttamente con 0 e 1.
##
echo -n "inserisci il numero 9999 per finire "
read x
until [ $x -eq 9999 ]
do
primo=1
z=0
t=0
until [ $t -ge $x ]
do
z=$(($z + 1))
t=$(($z * $z))
done
if [ $t -ne $x ]
then
z=$(($z - 1))
else
primo=0
fi
k=2
while [ $k -lt $x ] && [ $primo -eq 1 ]
do
t=$(($x / $k))
t=$(($x - ($t * $k)))
if [ $t -eq 0 ]
then
primo=0
else
k=$(($k + 1))
fi
done
if [ $primo -eq 1 ]
then
echo "il numero $x è primo"
else
echo "il numero $x non è primo"
fi
echo -n "inserisci il numero 9999 per finire "
read x
done
|
|
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome algoritmi_elementari_con_la_shell_posix.htm
[successivo]
[precedente]
[inizio]
[fine]
[indice generale]
[indice ridotto]
[translators]
[docinfo]
[indice analitico]