Privacy Policy Cookie Policy Termini e Condizioni

Websites: classicistranieri.com - classicistranieri.it - englishwikipedia.com - wikipediaforschools.org - wikipediazim.com - wikisourcezim.com - 

projectgutenbergzim.com - projectgutenberg.net - projectgutenberg.es - ebooksgratis.com - gutenbergaustralia.com - radioascolto.com

Many of our downloadable files are also provided as a .RAR archive (What is this?). We encourage you to download RAR for your operative system here!


a2 --- Algoritmi elementari con la shell POSIX - Mirrored by classicistranieri.com

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [violazione licenza] [translators] [docinfo] [indice analitico] [volume] [parte]


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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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

379.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.01.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>, <daniele·giacomini (ad) poste·it>


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] [violazione licenza] [translators] [docinfo] [indice analitico]

Valid ISO-HTML!

CSS validator!