Hola a todos, he realizado un script y una vez realizado no es del todo eficiente.
El problema lo tengo con los números aleatorios de inicio y fin, aquí os dejo el script que yo he realizado haber si me pueden ayudar a resolverlo.
tiene algunos "echo" de mas porque los he ido utilizado para ayudarme.
# Crear un script que intente adiviar un numro que tenemos en mente. El programa debera ir
#preguntando al usuario si el numero mostrado es mayor o menor.
#!/bin/bash
fin=10
inicio=1
cont=0
intento=$(($RANDOM%fin+inicio))
echo 'El numero es: '$intento ' S/N?: '
read resp
while [ $resp == 'N' ] && [ $inicio -lt $fin ]
do
echo 'inicio: '$inicio
echo 'fin: '$fin
echo 'si el numero es MAYOR (M) o menor (m)?'
read resp1
echo ''
if [ $resp1 = 'M' ]
then
inicio=$(expr $intento \+ 1)
#fin=$fin
intento=$(($RANDOM%fin+inicio))
echo ''
echo 'intento2: '$intento
echo ''
else
if [ $resp1 = 'm' ]
then
#inicio=$inicio
fin=$(expr $intento \- 1)
intento=$(($RANDOM%fin+inicio))
echo ''
echo 'intento3: '$intento
echo ''
fi
fi
echo 'El numero es: '$intento ' S/N?: '
read resp
done
echo 'Numero encontrado: '$intento
Nadie consigue solucionar el ejercicio?? yo es que estoy probando de varias maneras pero no consigo solucionar el ejercicio.
Espero que me puedan ayudar, Saludos
#! /bin/bash
# La estrategia será proponer siempre el número mitad entre el tope superior y
# el inferior. Por conveniencia, partimos del intervalo [0,11], para que ambos
# extremos se consideren siempre como "ya probados"
myguess=`date +%N | cut -c2`
myguess=$(( $myguess+1 )) # Aleatorio entre 1 y 10 a través de los nanosegundos
bottom=0
top=11
while true
do
while true
do
echo -n "¿ El número es el $myguess ? "
read respuesta
case $respuesta in
correcto)
echo "¡¡ El número era el $myguess !!"
exit
;;
mayor)
bottom=$myguess
break
;;
menor)
top=$myguess
break
;;
*)
echo "Conteste (correcto|mayor|menor)"
continue
;;
esac
done
antguess=$myguess
myguess=$(( ($top+$bottom)/2 ))
echo top=$top bottom=$bottom myguess=$myguess antguess=$antguess
if [ $(( $bottom+1 )) -eq $top ]
then
echo "Tramposo: dijiste que el número era mayor que $bottom y menor que $top"
break;
fi
done
Aquí te dejo una buena solución , publicada por un profesor mio
gracias!!!
la solucion facilitada por hervasiop12345 es correcta, pero me gustaria solucionar el ejercicio de la forma que yo lo puse al principio.
el fallo me lo da al darle nuevo valor a la variable inicio y fin, por eso se van los rangos,
Espero que me puedan ayudar a encontrar la solucion a mi problema, Saludos
Lo que siempre he usado para generar números con rango:
MAX=20
MIN=10
while true; do
echo -e "$[ ( $RANDOM % ( $[ $MAX - $MIN ] + 1 ) ) + $MIN ]";
sleep 0.3
done
Un ejemplo solamente....
ok gracias leo
esa forma de sacar aleatorio esta bien, pero la que yo tengo tambien esta bien, el problema creo que esta en la implementacion del algoritmo. aqui os dejo el nuevo ejercicios que yo he confeccionado, es igual que el anterior, pero le he añadido algunas condiciones al while.
otra forma de generar el aleatorio la he dejado comentada y utiliza la proporcionada por Leo.
espero que me puedan ayudar a resolverlo.
# Crear un script que intente adiviar un numro que tenemos en mente. El programa debera ir preguntando al usuario
# si el numero mostrado es mayor o menor.
#!/bin/bash
fin=20
inicio=1
cont=0
#intento=$(($RANDOM%$fin+$inicio))
#valor=$(expr $RANDOM \% $fin)
#intento=$(expr $valor \+ $inicio)
intento=$[ ( $RANDOM % ( $[ $fin - $inicio ] + 1 ) ) + $inicio ]
echo 'El numero es: '$intento ' S/N?: '
read resp
#echo 'respuesta: ' $resp
#echo 'inicio: '$inicio
#echo 'fin: '$fin
while [ $resp == 'N' ] && [ $intento -le $fin ] && [ $intento -ge $inicio ] &&[ $inicio -lt $fin ]
do
echo '¿El numero es MAYOR (M) o menor (m)?'
read resp1
if [ $resp1 == 'M' ]
then
inicio=$(expr $intento \+ 1)
echo 'Nuevo valor INICIO: '$inicio
echo 'FIN: '$fin
else
if [ $resp1 == 'm' ]
then
fin=$(expr $intento \- 1)
echo 'INICIO: '$inicio
echo 'Nuevo valor FIN: '$fin
else
echo 'El caracter introducido no es valido.'
fi
fi
# valor=$(expr $RANDOM \% $fin)
# intento=$(expr $valor \+ $inicio)
intento=$[ ( $RANDOM % ( $[ $fin - $inicio ] + 1 ) ) + $inicio ]
echo '¿El numero es: '$intento ' S/N?: '
read resp
done
echo 'Numero encontrado: '$intento
# cont=$(expr $cont \+ 1)
Alguien me ayuda a solucionar este ejercicio??
el numero aleatorio me lo da bien, el problema esta en los limites de mayor y menor que no me los pone bien ya que he ejecutado el ejercicio.
Espero que me puedan ayudar,
Saludos
Ya esta solucionado!!!!
Saludos