Informática. Exame de Teoría Resolto. Septiembre 2002
Nota: Se define como mediana el valor central de los datos tras un proceso de ordenación de los mismos. En el caso de que el número de datos sea par, la mediana se define como el valor medio de los dos valores centrales.
SOLUCIÓN:
algoritmo ejercicio1
inicio
variable x(100), vmed, med, dif: real
variable i, n: entero
i=1 Inicio del procedimiento de lectura
escribir Introduzca un número positivo (-1 para salir)
leer x(i)
mientras x(i) > 0
  i = i+1
  escribir Introduzca un número positivo (-1 para salir)
  leer x(i)
fin_mientras
n = i -1
si n > 0
  vmed = vmedio(x, n) Invocación a la funcón para el cálculo del valor medio
  med = mediana(x, n) Invocación para el cálculo de la mediana
  escribir El valor medio es , vmed
  escribir La mediana es , med
  dif = vmed - med Calculamos el valor absoluto de la diferencia
  si dif < 0
     dif = -dif
  fin_si
  escribir La diferencia en valor absoluto entre la media y la mediana es, dif
sino
  escribir No se puede calcular el valor mediano y la mediana sobre un conjunto de cero datos
fin_si
fin
función vmedio(x, n)
inicio
variable x(100), sum: real
variable i, n: entero
sum = x(1)
desde i=2 hasta n paso 1
  sum = sum + x(i)
fin_desde
devolver(sum/n)
fin
función mediana(x, n)
inicio
variable x(100): real
variable i, j, n: entero
variable ordenado: lógica
ordenado = falso Bandera para indicar que tenemos el vector ordenado
i = 1
mientras i<n-1 y ordenado=falso Procedimiento de ordenación
  ordenado = cierto
  desde j=1 hasta n-i
     si x(j) > x(j+1)
        temp = x(j)
        x(j) = x(j+1)
        x(j+1) = temp
        ordenado = falso
     fin_si
  fin_desde
  i = i+1
fin_mientras
si (n/2)*2 = n es n par?
   devolver ((x(n/2)+x(n/2 +1))/2)
sino
   devolver(x(n/2 + 1))
fin
      program examen
      real  x(100), media, mediana, dif
      integer  i, n
      open (2, file="datos.dat", status='old', err=2)
      read (2, *, end=3) n
      read (2, *, end=3) (x(i), i = 1, n)
      print 4, (x(i), i = 1, n)
 4    format(f8.3)
      media = fmedia(x, n)
      mediana = fmediana(x, n)
      write (2, 1) media, mediana, abs(media - mediana)
 1    format(3(f8.3, 3x))
      close(2)
      
      stop
 2    print *, "Error en open"
      stop
 3    print *, "Fin de fichero"
      end
ccccccccccccccccccccccccccccccccccccc
      function fmedia(x, n)
      real  x(*)
      
      fmedia = 0
      do 1 i = 1, n
 1       fmedia = fmedia + x(i)
      if(n.ne.0) then
         fmedia = fmedia/n
      endif
      return
      end
cccccccccccccccccccccccccccccccccccccc
      function fmediana(x, n)
      real  x(*), temp
      logical  fin
      i = n
 2    fin = .true.
      do 1 j = 1, i - 1
         if(x(j).gt.x(j + 1)) then
            temp = x(j)
            x(j) = x(j + 1)
            x(j + 1) = temp
            fin = .false.
         endif
 1    continue
      i = i - 1
      if(fin) then
         i = 1
      endif
      if(i.gt.1) then
         goto 2
      endif
      print 3, (x(i), i = 1, n)
 3    format(f8.3)
      if(mod(n, 2).eq.0) then
         fmediana = (x(n/2) + x(n/2+1))/2
      else
         fmediana = x(n/2 + 1)
      endif
      return
      end
      print *, "Introduce un número entero:"
      read *, n
      x = 2*n
      if (n .gt. 0) then
         n + 5 = x ERROR: expresión a la izquierda de una asignación (debe ser una variable)
         goto 2 ERROR: salto desde fuera a dentro de un bucle do
      endif
      do 1 i = 1, 10
 2       print *, f(i) ERROR: f es una subrutina y debe ser llamada con call
 1    stop ERROR: un stop no puede ser sentencia terminal de un do
      end
      subroutine f(x)
      integer  x
      f = x*x ERROR: la variable f no está definida porque f es una subrutina (no una función)
      return
      end
         
SOLUCIÓN: 239.4 en base 16 no es igual a 110011101.1 en base 2
SOLUCIÓN: 28.375 en base 10 = 11100.0110 en base 2
SOLUCIÓN: -122 en base 10 = 10000101 en complemento a 1
SOLUCIÓN: El propietario puede ver el contenido (archivos y directorios) del directorio (porque tiene permiso de lectura) y crear / borrar archivos y/o directorios del mismo (porque tiene permiso de escritura), pero no puede entrar con cd en el directorio (porque no tiene permiso de ejecución). Los usuarios del mismo grupo pueden crear/borrar archivos del directorio (tienen permiso de escritura) y pueden entrar en el mismo (permiso de ejecución) pero no pueden ver sus contenidos (no tienen permiso de lectura). El resto de usuarios no puede hacer nada.
SOLUCIÓN: El comando rmdir permite borrar un directorio cuando este está vacío. El comando rm, con su opción -r permite borrar directorios que no están vacíos.
SOLUCIÓN: chmod u+rw notas.dat; chmod g-x notas.dat
| 3x + 2y - z = 8 | (1) | ||
| x - y - z = 0 | (2) | ||
| x + 3y + 2z = 5 | (3) | 
SOLUCIÓN:
>> A = [3 2 -1;1 -1 -1;1 3 2]; >> B=[8 0 5]'; >> inv(A)*B