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