next up previous


Informática. Exame de Teoría resolto
Febreiro, 2005


Nome:

  1. PRIMEIRO PARCIAL:

    1. (0.5 PUNTOS) Cáis son os tipos de erros que pode ter un programa?

      SOLUCIÓN: Erros de compilación, execución e lóxicos.

    2. (0.5 PUNTOS) En qué consiste a programación estruturada?

      SOLUCIÓN: En dividi-lo programa en distintos módulos, usar deseño descencente para deseñar cada un deles e en cada módulo usar só as estruturas de secuencia, selección (se, se/senon e se/senon múltiple) e iteración (mentres, repetir-ata-que e dende-ata-paso).

    3. (0.5 PUNTOS) Cántos elementos ten a matriz integer, dimension(-3:3, -2:7) :: m?

      SOLUCIÓN: 7 filas x 10 columnas = 70 elementos.

    4. (0.5 PUNTOS) Traducir a Fortran 90 a seguinte estrutura en pseudocódigo:
      mentres (condición)
        ...
      fin_mentres
      

      SOLUCIÓN:

      do
        if(.not.condición) exit
        ...
      end do
      

    5. (1 PUNTO) Enumera-los operadores aritméticos, relacionais e lóxicos por orde de prioridade decrecente.

      SOLUCIÓN: Os mais prioritarios son os aritméticos (**, / *, + -), logo os relacionais (todos de igual prioridade: = = / = > > = < < = .eq. .ne. .gt. .ge. .lt. .le.) e finalmente os lóxicos (.not. .and. .or. .eqv. .neqv.)

    6. (0.5 PUNTOS) Escribi-las sentencias en Fortran que declaren un punteiro p a enteiro, unha variábel enteira x, e que fagan que p apunte a x.

      SOLUCIÓN:

      integer, target :: x
      integer, pointer :: p
      p => x
      

    7. (1 PUNTO) Escribir un segmento de código en Fortran que declare un arrai de 100 enteiros e chame a unha subrutina s(...) pasándolle o arrai e a súa dimensión. Escribir a liña de título da subrutina s(...) cos seus argumentos, e as liñas que indican o tipo de cada argumento (non indiques se son de entrada ou saída).

      SOLUCIÓN:

      program proba
      integer, dimension(100) :: x
      call s(x, 100)
      ...
      end program
      
      ccccccccccccccccccccccccccccccc
      subroutine s(x, n)
      integer, dimension(n), intent(...) :: x
      ...
      end subroutine
      

    8. (0.5 PUNTOS) Se a é unha matriz real 10x10, qué fai a sentencia where (a > 0) a = 1.0/a ?

      SOLUCIÓN: Modifica tódolos elementos a(i, j) da matriz a que sexan positivos, sustituíndoos polo seu inverso.

  2. SEGUNDO PARCIAL:

    1. (0.5 PUNTOS) Comenta-las principais diferencias entre memoria principal e memoria secundaria.

      SOLUCIÓN: A memoria principal é volátil (a información desaparece ao apaga-lo ordenador), moito mais rápida ca secundaria e con menor capacidade. A memoria secuntaria ten moita mais capacidade, e tamén é moito menos rápida, por iso os programas, que se almacenan na memoria secundaria, se copian á memoria principal para ser executados pola CPU. Memoria principal: RAM, de acceso aleatorio ou directo. Memoria secundaria: discos duros magnéticos, CD-ROM, DVD-ROM, con acceso secuencial.

    2. (0.5 PUNTOS) Diferencias entre unha linguaxe de alto nivel compilado e outro interpretado.

      SOLUCIÓN: Na compilación, o código fonte é traducido a código máquina dunha soa vez, e este código máquina almacénase nun arquivo executábel. A execución do programa supón executar ese código máquina, e non se require o compilador. Na interpretación, o intérprete traduce e executa o código liña a liña, e non crea un arquivo directamente executábel, polo que a execución do programa non se pode facer sen o intérprete.

    3. (0.5 PUNTOS) ¿Cál sería o contido da memoria de traballo de Matlab logo de executa-la lista de comandos seguinte?
      >> a=3;
      >> b=a+4;
      >> v=sqrt(b*7);
      >> clear b;
      >> 3+v;
      >> a=v-a;
      

      SOLUCIÓN: a = 4, v = 7, ans = 10 (na variábel ans almacénase o resultado da operación 3 + v, que non se almacena en ningunha outra variábel). A variábel b é borrada na sentencia clear b;

    4. (0.5 PUNTOS) Escribi-los comandos de Matlab necesarios para calcula-la integral definida:

      $\displaystyle \int_{{-1}}^{1}$x2 -3senx + e-x/2dx (1)

      SOLUCIÓN: int(' x2 - 3*sin(x) + exp(- x/2)', x, -1, 1);

    5. (0.5 PUNTOS) Describi-los formatos de almacenamento interno de números enteiros nun ordenador.

      SOLUCIÓN:

      Os enteiros sen signo almacénanse en binario puro. Os enteiros con signo admiten tres variantes:

      • Signo-magnitude: o primeiro bit indica o signo (1 = -, 0 = +) e os restantes codifican o valor absoluto do número en binario puro.

      • Complemento a un: o primeiro bit indica o signo (de igual maneira ca no caso anterior) e os restantes codifican o número en binario puro, se o número é positivo, ou o seu valor absoluto en complemento a un se o número é negativo.

      • Complemento a dous: o primeiro bit indica o signo (de igual maneira ca no caso anterior) e os restantes codifican o número en binario puro, se o número é positivo, ou o seu valor absoluto en complemento a dous se o número é negativo.

    6. (1 PUNTO) Escribe unha función en Fortran 90 que reciba como argumento un punteiro ao primeiro nodo dunha lista simplemente enlazada. A función debe volta-lo número de nodos que ten a lista.

      SOLUCIÓN:

      function nodos(p)
      type(nodo), pointer, intent(in) :: p
      type(nodo), pointer :: q
      
      q => p; nodos = 0
      do
        if(.not.associated(q)) exit
        nodos = nodos + 1
        q => q%enlace
      end do
      
      return
      end function nodos
      

    7. (0.5 PUNTOS) Temos o código máquina dun subprograma chamado integral_definida(...) nunha librería chamada libproba.a que se atopa no directorio /home/usuario. Qué comando de compilación deberemos usar para compila-lo programa programa.f, se queremos que poda usa-lo devandito subprograma?

      SOLUCIÓN: g95 -L/home/usuario programa.f -lproba

    8. (0.5 PUNTOS) Para qué serven as funcións external?

      SOLUCIÓN:

      Para pasar funcións como argumentos doutros subprogramas.

    9. (0.5 PUNTOS) Qué son as variábeis estáticas? Qué sentencia se usa para indicar que unha variábel é estática?

      SOLUCIÓN:

      Variábeis estáticas son variábeis declaradas dentro dun subprograma que teñen a mesma posición de memoria asignada en tódalas chamadas ao subprograma, de modo que conservan o seu valor entre dúas chamadas consecutivas ao subprograma. Pódense declarar coa sentencia ou atributo save, ou ben simplesmente inicializándoas na propria declaración.


next up previous
© 2004, Dr. Manuel Fernández Delgado, Universidad de Santiago de Compostela, Departamento de Electrónica e Computación