elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Programación en shell
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programación en shell  (Leído 9,287 veces)
Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Programación en shell
« en: 6 Diciembre 2021, 19:58 pm »

Buenas tardes,
Soy nueva es este foro, estoy estudiando Ingeniería Informática, y el profesor de Fundamentos de Informática nos ha mandado un trabajo en el que tenemos que calcular la Información asociada de un texto en un archivo, según la posición que introduzca el usuario.
No tengo ni idea de como hacer ese ejercicio, lo he buscado por internet y no he encontrado nada.
También tengo otro problema, al ejecutar el programa me da un fallo que dice finalización del programa en linea 20, cuando el programa solo tiene 14 lineas de código.
Os agradecería un montón que me ayudarais con esto porfa.
Muchas gracias de antemano.
Un saludo.
Larissa



En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.361


Ver Perfil
Re: Programación en shell
« Respuesta #1 en: 6 Diciembre 2021, 20:30 pm »

...calcular la Información asociada de un texto en un archivo, según la posición que introduzca el usuario
¿Seguro que es es la descripción que te han dado o el resumen que tú haces...?
Es que es ambigüo, tiene múltiples interpretaciones, y en el mundillo de la programación el enemigo número 2 es la ambigüedad.
Yo podría interpretar (por ejemplo), que dado un punto en un fichero se localice el comienzo y final de una palabra, o de una frase... deduciría esto si estás estudiando por ejemplo operaciones con cadenas... es decir si hay un contexto que puede usarse para resolver la ambigüedad.
Ante las dudas reclama a tu profesor más claridad y detalles.
 
También tengo otro problema, al ejecutar el programa me da un fallo que dice finalización del programa en linea 20, cuando el programa solo tiene 14 lineas de código.
Considera que las líneas en blanco también cuentan.
Sería tremendamente molesto que se diera el índice de una línea de código desechando las línea en blanco, casi que obligaría a uno a contarlas a ver cual es... siendo una posición absoluta basta mirar la línea que se señala.

La mayoría de IDEs enumeran las líneas, en cambio es raro en editores de texto plano, luego en ese caso toca contar.
 


En línea

Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programación en shell
« Respuesta #2 en: 6 Diciembre 2021, 21:11 pm »

Es la descripción del ejercicio que nos ha mandado el profesor, no veo ni una sola pista en internet.
Gracias de antemano.
Larissa Calvo
En línea

Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programación en shell
« Respuesta #3 en: 6 Diciembre 2021, 21:31 pm »

[OPCIÓN 2: Cálculo de información asociada a un mensaje de una fuente de
información.
 Se pedirá el nombre del fichero de la fuente de información por
pantalla.
 Si el fichero no existe se mostrará un mensaje de error y no se hará
nada. Si existe:
• Se pedirá la posición del mensaje del que se quiere calcular la
cantidad de información (por ejemplo, si se indica 3, se va a
calcular la cantidad de información asociada al mensaje cuya
probabilidad está en la línea 3)
• Se buscará la linea que se encuentra en la posición dada
o Si existe esa linea se devolverá la cantidad de
información asociada
o Si no existe esa linea se dará un mensaje de error y se
terminará esta opción.]
Esto es lo que nos ha mandado hacer el profesor.
Esto es lo que tengo yo:
read -p "introduce el nombre del fichero"
if [! -a fichero]
echo "el fichero no existe"
else
echo "Introduce la posicion del mensaje"
read posicion
bc -l probabilidad.bc
var $informacion
$informacion = log (1/posicion) / log 2
echo $informacion
for posicion in linea
do echo posicion
done
Muchas gracias y un saludo 
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.361


Ver Perfil
Re: Programación en shell
« Respuesta #4 en: 7 Diciembre 2021, 01:56 am »

Creo que lo que trata de solicitarte es calcular la entropía, de una línea dada de un fichero elegido.
El término 'cantidad de información' es adecuado para referirse a la entropía y pasar de ahí a su cálculo, lo entiendo así cálculo de la entropía. Por eso te preguntaba por el contexto, para confirmar o desestimar, peor tampoco lo has aportado aunque el mensaje es ya lo suficientemente extenso como para interpretarlo en ese sentido.

Se supone que estais estudiando la teoría de la información (la entropía, Claude Shannon, compresión de datos, Huffman)????. Si es así, eso es lo que te pide, que calcules la entropía de la línea de un fichero, como no aclara si el fichero debe ser de texto o no, pero al hablar de líneas se ha de asumir que es un fichero de texto. Considera pués solo los 96 caracteres imprimibles (es decir que los 96 caracteres son equiprobables de aparecer, lógicamente la realidad es distinta, para eso es el cálculo).

Si lo estáis estudiando en estos momentos, lo tendreis fresco, si no puedes repasarlo:
https://es.wikipedia.org/wiki/Entropía_(información)
Por consola no es precisamente la mejor forma de hacer ciertas cosas... pero imagino que como estais empezando, os habrán enseñado lo básico y suficiente para 'ir tirando'.

el pseudocódigo vendría ser esto:

Código:
fichero= Solicitar nombredefichero
Si existe el fichero
   lineapedida = solicitar linea
   mientras no se alcance el final del fichero  
        linea = leer siguientelinea de fichero
        numerolinea = numerolinea +1
        Si numerolinea= lineapedida salimos dle bucle
   repetir
   Si numerolinea <> linea pedida
      informar "Se alcanzó el final del fichero y no se llegó a la linea pedida"
   sino
      calcular entropia de linea
      informar dle valor
   fin si
sino
   informar "no se encuentra el fichero indicado."
fin si

El calculo de la entropía se basa en la probabilidad de aparición y las apariciones reales encontradas. Inicialmente como te digo contamos 96 caracteres imprimibles (se spone un fichero de texto), todas con igual probabilidad luego inicialmente lqa probabilidad de aparición de cada carácter es: 1/96, o lo que e slo mismo en un modelo o´ptimo deberían aparecer 96 caracteres, y todos exactamente una vez. Luego la cantidad de caracteres en la línea tiene su valor y... debes recordar lo que has estudiado y supongo que también quieren poner a prueba como programas los contadores, bucles, condiciones, etc...
« Última modificación: 7 Diciembre 2021, 02:35 am por Serapis » En línea

Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programación en shell
« Respuesta #5 en: 7 Diciembre 2021, 15:06 pm »

Muchas gracias, me has salvado el ejercicio. Me gustaría mucho poder volver a contar contigo en caso de que tenga otra duda de programación.
Muchísimas gracias.
Larissa
En línea

Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programación en shell
« Respuesta #6 en: 11 Diciembre 2021, 13:36 pm »

#!/bin/bash
echo "Introduce el nombre del fichero" $fichero
if [test -f "$fichero"] then
echo "Introduce la linea" $line
   while [IFS= read -r $line]
        do
            echo $line;
    bc -l probabilidad.bc
      $informacionAs =$((log($numerolinea) / log 2))
      echo $informacionAs
         done
        if [$line <> IFS] then
          echo "Se alcanzó el final del fichero"
        fi
    done < $fichero
else
   echo "no se encuentra el fichero indicado."
fi
exit

No deja de darme fallos en la linea 14, me dice que quite el fi pero no puedo hacerlo porque es el final de la estructura if ¿que hago?
Muchas gracias de antemano
Larissa calvo
« Última modificación: 11 Diciembre 2021, 14:01 pm por Lariscal23 » En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.075



Ver Perfil
Re: Programación en shell
« Respuesta #7 en: 12 Diciembre 2021, 01:34 am »

mmm... primero recomiendo aprendas las instrucciones que vas a utilizar porque tu código esta muy mal XD, mas o menos siguiendo el pseudocódigo de Serapis y tu código sería algo así:

Código
  1. #!/bin/bash
  2. read -p "Introduce el nombre del fichero: " FICHERO
  3. if [[ -f $FICHERO ]] ; then
  4.  read -p "Introduce la linea: " LINEA_PEDIDA
  5.  while IFS= read -r LINEA ; do
  6.    NUMERO_LINEA=$((NUMERO_LINEA + 1))
  7.    if [[ $NUMERO_LINEA == $LINEA_PEDIDA ]]; then
  8.      break
  9.    fi
  10.  done < $FICHERO
  11.  if [[ $NUMERO_LINEA != $LINEA_PEDIDA ]]; then
  12.    echo "Se alcanzo el final del fichero y no se llego a la linea pedida"
  13.  else
  14.    echo "Calculando entropia con la linea $NUMERO_LINEA = $LINEA"
  15.  fi
  16. else
  17.  echo "El archivo $FICHERO no existe"
  18. fi

Yo de la entropía no tengo ni idea XD, no llevé eso en instituto. Pero en caso de Bash puedes revisar unos manuales para guiarte o sino preguntar:

Sesión Nº4: Variables, Alias y Órdenes de Búsqueda
http://www.ugr.es/~benghazi/practica/Sesion4.pdf

Sesión Nº5: Expresiones con variables y expresiones regulares
http://www.ugr.es/~benghazi/practica/Sesion5.pdf

Sesión Nº6: Programación del shell
http://www.ugr.es/~benghazi/practica/Sesion6.pdf

- Supongo que con esas 3 sesiones deberían bastarte para defenderte en el mínimo de Bash
En línea

Lariscal23

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programación en shell
« Respuesta #8 en: 12 Diciembre 2021, 11:56 am »

Muchas gracias por la ayuda, me estaba liando con la entropía, yo tampoco la dí en el instituto.
En línea

informatica123456

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Programación en shell
« Respuesta #9 en: 13 Diciembre 2021, 09:25 am »

Buenas, yo tampoco se hacer este ejercicio por si me podíais ayudar. El enunciado es el siguiente:

o OPCIÓN 1: Crear una archivo de fuente de información
 Se pedirá el nombre de fichero por pantalla
 En el caso de que el archivo exista ya se mandará un mensaje de error
y no se hará nada. Si el archivo no existe se creará de la siguiente
manera:
• Se pedirá el número de mensajes que tiene la fuente de
información
• Se pedirán las probabilidades de cada mensaje de una en una
hasta completar el fichero.
Al finalizar la toma de probabilidades, si la suma de las mismas no es
1 se mostrará un mensaje de error y se borrará el fichero.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema programacion de shell RFI
Nivel Web
skapunky 9 4,066 Último mensaje 11 Julio 2007, 01:39 am
por skapunky
Ejercicios básicos de programacion en Shell script...
Programación General
er_anyel 1 3,870 Último mensaje 8 Noviembre 2011, 10:59 am
por er_anyel
Ejercicios básicos de programacion en Shell script...
Ejercicios
er_anyel 5 9,666 Último mensaje 14 Abril 2012, 15:23 pm
por Stakewinner00
Programacion shell y awk
GNU/Linux
idelkys 0 1,270 Último mensaje 13 Julio 2012, 00:49 am
por idelkys
[PHP Shell] Poison Shell 1.0 (Version Identada)
Nivel Web
BigBear 3 6,868 Último mensaje 15 Octubre 2012, 07:52 am
por ameise_1987
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines