asmodeus94

konwersjaSystemyLiczbowe

Dec 2nd, 2014
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.13 KB | None | 0 0
  1. #!/bin/bash
  2. tabS=(A B C D E F)
  3. # tabK - tab kolekcji elementow
  4. function naInny {
  5.         case $2 in
  6.                 2) dzielonePrzez=2 ;;
  7.                 3) dzielonePrzez=8 ;;
  8.                 4) dzielonePrzez=16 ;;
  9.         esac
  10.         liczba=$1
  11.         x=0
  12.         unset tabK[*]
  13.         until [ $liczba -eq 0 ]
  14.         do
  15.                 tabK[x]=$[liczba % dzielonePrzez]
  16.                 liczba=$[liczba / dzielonePrzez]
  17.                 x=$[x+1]
  18.         done
  19.         if [ $2 -eq 4 ] ; then
  20.                 x=0
  21.                 for i in ${tabK[*]}
  22.                 do
  23.                         if [ $i -ge 10 ] && [ $i -le 15 ] ; then
  24.                                 tabK[x]=${tabS[$[i-10]]}
  25.                         fi
  26.                         x=$[x+1]
  27.                 done
  28.         fi
  29.         unset wynik
  30.         for(( x=$[${#tabK[*]}-1] ; x>=0 ; x-- ))
  31.         do
  32.                 wynik+=${tabK[x]}
  33.         done
  34.         export wynik
  35.  
  36. }
  37.  
  38. function naDziesietny {
  39.         case $2 in
  40.                 2) mnozoneZ=2 ;;
  41.                 3) mnozoneZ=8 ;;
  42.                 4) mnozoneZ=16 ;;
  43.         esac
  44.         liczba=$1
  45.         unset tabK[*]
  46.         dziesietnie=0
  47.         potegaZKolei=$[${#liczba}-1]
  48.         for(( x=0 ; x<${#liczba} ; x++ ))
  49.         do
  50.                 if [ $2 -eq 4 ] ; then
  51.                         case "${liczba:$x:1}" in
  52.                                 A|a) tabK[x]=10 ;;
  53.                                 B|b) tabK[x]=11 ;;
  54.                                 C|c) tabK[x]=12 ;;
  55.                                 D|d) tabK[x]=13 ;;
  56.                                 E|e) tabK[x]=14 ;;
  57.                                 F|f) tabK[x]=15 ;;
  58.                                 *) tabK[x]=${liczba:$x:1}
  59.                         esac
  60.                         else
  61.                                 tabK[x]=${liczba:$x:1}
  62.                 fi
  63.                 potegowanie=1
  64.                 for(( p=$potegaZKolei ; p>0 ; p-- ))
  65.                 do
  66.                         potegowanie=$[potegowanie * mnozoneZ]
  67.                 done
  68.                 dziesietnie=$[dziesietnie + potegowanie * ${tabK[x]}]
  69.                 potegaZKolei=$[potegaZKolei-1]
  70.         done
  71.         export dziesietnie
  72. }
  73. wybor=-1
  74. #dziesietnie, wynik - eksportowane z pliku 'funkcje'
  75. for(( ; ; ))
  76. do
  77.         clear
  78.         echo 'Z jakiego systemu chcesz przeliczac?'
  79.         echo '1 - z dziesietnego'
  80.         echo '2 - z dwojkowego'
  81.         echo '3 - z osemkowego'
  82.         echo '4 - szesnastkowego'
  83.         echo '5 - zakoncz skrypt'
  84.         f=0
  85.         until [ $f -eq 1 ]
  86.         do
  87.                 read -p "Wybierz opcje wpisujac odpowiednia cyfre: " wybor
  88.                 if [ 1 -le $wybor ] && [ $wybor -le 5 ] ; then
  89.                         f=1
  90.                         else
  91.                                 echo 'Podano nieprawidlowa wartosc'
  92.                 fi
  93.         done
  94.         if [ $wybor -eq 5 ] ; then
  95.                 clear
  96.                 break
  97.                 else
  98.                         zKtorego=$wybor
  99.         fi
  100.         case $wybor in
  101.                 1) slownieZJakiego=dziesietnego ;;
  102.                 2) slownieZJakiego=binarnego ;;
  103.                 3) slownieZJakiego=osemkowego ;;
  104.                 4) slownieZJakiego=szesnastkowego ;;
  105.         esac
  106.         read -p "Podaj liczbe do konwersji: " liczba
  107.         clear
  108.         echo 'Na jaki system chcesz przeliczyc'
  109.         echo '1 - na dziesietny'
  110.         echo '2 - na dwojkowy'
  111.         echo '3 - na osemkowy'
  112.         echo '4 - na szesnastkowy'
  113.         echo '5 - zakoncz skrypt'
  114.         f=0
  115.         until [ $f -eq 1 ]
  116.         do
  117.                 read -p "Wybierz opcje wpisujac odpowiednia cyfre: " wybor
  118.                 if [ 1 -le $wybor ] && [ $wybor -le 5 ] ; then
  119.                         if [ $wybor -eq $zKtorego ] ; then
  120.                                 echo 'Podana przez ciebie liczba jest zapisana tym systemie'
  121.                                 else
  122.                                         f=1
  123.                         fi
  124.                         else
  125.                                 echo 'Podano nieprawidlowa wartosc'
  126.                 fi
  127.         done
  128.         if [ $wybor -eq 5 ] ; then
  129.                 clear
  130.                 break
  131.                 else
  132.                         naKtory=$wybor
  133.         fi
  134.         case $wybor in
  135.                 1) slownieNaJaki=dziesietny ;;
  136.                 2) slownieNaJaki=binarny ;;
  137.                 3) slownieNaJaki=osemkowy ;;
  138.                 4) slownieNaJaki=szesnastkowy ;;
  139.         esac
  140.         echo -n Liczba $liczba z $slownieZJakiego na $slownieNaJaki:' '
  141.         if [ $zKtorego -eq 1 ] ; then
  142.                 # eksportowana zmienna 'wynik'
  143.                 naInny $liczba $naKtory
  144.                 else
  145.                         naDziesietny $liczba $zKtorego
  146.                         # po zakonczeniu funkcji naDziesietny eksportowana jest zmienna dziesietnie
  147.                         if [ $naKtory -eq 1 ] ; then
  148.                                 wynik=$dziesietnie
  149.                                 else
  150.                                         naInny $dziesietnie $naKtory
  151.                         fi
  152.         fi
  153.         echo -n $wynik
  154.         read
  155. done
Advertisement
Add Comment
Please, Sign In to add comment