[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 532.   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.

532.1   ARCS0: ricerca del valore più grande tra tre numeri interi

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS0.sh>.

#!/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

532.2   ARCS1: moltiplicazione di due numeri interi

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS1.sh>.

##
## 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

532.3   ARCS2: valore assoluto della differenza tra due valori

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS2.sh>.

#!/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

532.4   ARCS3: somma tra due numeri

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS3.sh>.

#!/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

532.5   ARCS4: prodotto tra due numeri

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS4.sh>.

#!/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

532.6   ARCS5: quoziente

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS5.sh>.

#!/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

532.7   ARCS6: verifica della parità di un numero

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS6.sh>.

#!/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

532.8   ARCS7: fattoriale

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS7.sh>.

#!/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

532.9   ARCS8: coefficiente binomiale

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS8.sh>.

#!/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

532.10   ARCS10: massimo comune divisore

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS10.sh>.

#!/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

532.11   ARCS11: massimo comune divisore

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS11.sh>.

#!/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

532.12   ARCS12: radice quadrata intera

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS12.sh>.

#!/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

532.13   ARCS13: numero primo

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS13.sh>.

#!/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

532.14   ARCS14: numero primo

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/ARCS14.sh>.

#!/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 2007.02 --- Copyright © 2000-2007 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] [indice analitico]

Valid ISO-HTML!

CSS validator!