Advertisement
ThePeeters

prac2_3

Dec 14th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.53 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # ----------------------------------------------------------------------
  4. # PRA2 : Guions bash
  5. # Codi font : prac2_3.sh
  6. # Nom Pere Rollon Baiges.
  7. # Nom Francisco Javier Roig Gregorio
  8. # ----------------------------------------------------------------------
  9.  
  10. #funcio que ordena numericament el valor numèrics dels paràmetres entrats
  11. function BubbleSort(){
  12.     let Len=${#elements[@]}
  13.     for ((i=Len-1;i>0;i--));do
  14.         for((j=0;j<i;j++));do
  15.             let "next_to_j=$j+1"
  16.             if ((${elements[$next_to_j]} <= ${elements[$j]}));then
  17.                 tmp=${elements[$j]}
  18.                 elements[$j]=${elements[$next_to_j]}
  19.                 elements[$next_to_j]=$tmp                                  
  20.             fi
  21.         done
  22.     done
  23. }
  24. #funcio que ens comprova que tot els valors entrats son valors positius
  25. function positiveArray(){
  26.     let areNegative=$1
  27.     for (( i=0; i<${#positive[*]}; i++ ));do # recorre cada element comprovant que siguin major o iguals que 1 en cas contrari areNegative=1
  28.         if [[ ${positive[i]} -lt 1 ]];then
  29.             let areNegative=1
  30.             return $areNegative
  31.         fi
  32.     done
  33.  
  34.  
  35.     return $areNegative
  36. }
  37. isprime(){
  38.     num=$1
  39.     i=2  # contador inicial
  40.     if [[ $num -eq 1 ]]; then  # El numero 1 no es considerat nombre primer
  41.         return 1
  42.     else
  43.         while [ $i -lt $num ];do
  44.             let a=$num%$i # retorna el valor del residu de la divisió num/i
  45.             if [[ $a -eq 0 ]];then
  46.                 return 1
  47.             fi  
  48.             let i=i+1  
  49.         done
  50.     fi
  51.     return 0
  52. }
  53. #funcio que ens recull els nombres primers i els guarda dins d'un array
  54.  
  55.  
  56. function reuneixPrimers() {
  57.     let Len=${#elements[*]}
  58.  
  59.     for((n=0; n<Len; n++));
  60.     do
  61.  
  62.         num=${elements[n]}  # extreu un numero del vector elements
  63.  
  64.         isprime $num
  65.        
  66.         if [[ $? -eq 0 ]];then  
  67.             array_primers+=($num) # si es primer llavors l'afegeix al vector array_primers
  68.         fi
  69.     done
  70. }
  71.  
  72.  
  73. function mostrarMaxim(){
  74.     echo -e "\nMaxim de [ ${positive[*]} ] : ${elements[${#elements[@]}-1]}"
  75.     # es mostra l'ultim valor del vector elements ja que despres d'ordenar-ho podem assegurarar que la última posició estara el valor mes gran
  76. }
  77. function mostrarMinim(){
  78.     echo -e "\nMinim de [ ${positive[*]} ] : ${elements[0]}"
  79.     # es mostra l'ultim valor del vector elements ja que despres d'ordenar-ho podem assegurarar que la primera posició estara el valor mes petit  
  80. }
  81. function mostrarPrimers(){
  82.     reuneixPrimers&&echo -e "\nNombres primers de [ ${positive[*]} ] : ${array_primers[*]}"
  83.     # es mostren els nombres primers del vector array_primers
  84. }
  85.  
  86. positive=($@) # Array que es comprovara que que tots els valors siguin positius
  87. positiveArray 0 # crida a la funcio: retorna 0 si tots els elements son positius en cas contrari retorna 1
  88. isPositive=$? # variable on es guarda el retorn de la funcio previament cridada
  89.  
  90. if (test $# -lt 2);then # comprova que hi ha un mínim de 2 valors als paràmetres
  91.     echo "Us: $0 <numero 1> <numero2> [... <numero N>]"
  92.     exit -1
  93. elif [[ $isPositive -eq 1 ]]; then
  94.     echo "sisplau utilitzi valors positius mes gran que 0"
  95.     exit -1
  96. fi
  97.  
  98. elements=($@) # copia el vector de parametres dins d'una variable diferents que s'utilitzara per ordenarho posterioment
  99.                 # tambe serveix per conservar el vector dels parametres entrats
  100. array_primers=() # vector on es guardaran els nombres primers
  101.  
  102. BubbleSort # ordena els valors del vector elements
  103.  
  104. echo -e "\nM E N U"
  105. echo -e "\n--------\n"
  106.  
  107. echo "X: maXim"
  108. echo "N: miNim"
  109. echo -e "P: Primers\n"
  110. read -p "Tria una opcio: "
  111.  
  112. case "$REPLY" in
  113.    
  114.     x|X)
  115.         mostrarMaxim
  116.         ;;
  117.     n|N)
  118.         mostrarMinim
  119.         ;;
  120.     p|P)   
  121.         mostrarPrimers
  122.         ;;
  123.     *) 
  124.         echo -e "\nOpció '$REPLY' incorrecta"
  125.         exit 1
  126.         ;;
  127. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement