Examen Junio 2008 Resuelto

Anuncio
Dpto. Ing. de Sistemas y Automática. Universidad de Sevilla.
Fundamentos de Informática. Examen convocatoria de Junio.
er
1 curso Ing. Químico. 27 de Junio de 2008.
APELLIDOS:
NOMBRE:
D.N.I.:
Escriba las respuestas únicamente en los recuadros indicados. Utilice la parte de atrás como borrador. Puede emplear el
lápiz. Compruebe que tiene todas las hojas. Entregue todas las hojas con su nombre, apellidos y DNI.
CUESTIÓN 1 (1.5 puntos)
a) Construir la tabla de verdad correspondiente al circuito de puertas lógicas de la figura.
b) Obtener la función booleana a partir de la tabla de verdad.
c) El circuito de la figura se puede utilizar en una computadora digital, en ese caso, ¿qué papel desempeñaría?
a
b
s1
s2
s3
s4
CUESTIÓN 2 (1.5 puntos)
Indique las transferencias elementales entre registros y las señales de gobierno necesarias para cada una de ellas en
las cuatro fases de la ejecución de las siguientes instrucciones en la máquina CESIUS
SUM ETI
ALM ETI
1/4
Dpto. Ing. de Sistemas y Automática. Universidad de Sevilla.
Fundamentos de Informática. Examen convocatoria de Junio.
er
1 curso Ing. Químico. 27 de Junio de 2008.
APELLIDOS:
NOMBRE:
D.N.I.:
Escriba las respuestas únicamente en los recuadros indicados. Utilice la parte de atrás como borrador. Puede emplear el
lápiz. Compruebe que tiene todas las hojas. Entregue todas las hojas con su nombre, apellidos y DNI.
CUESTIÓN 3 (2 puntos)
Una forma de calcular el número e es a través de la siguiente serie:
a)
Escriba la definición de la función num_e que
calcule la aproximación al número e. Dicha
función recibirá como argumento el número de
términos a sumar de la serie. Emplee (y defina)
las funciones auxiliares que estime oportuno para
ello.
double num_e(int n)
{
int i;
double serie=0;
for(i=0;i<n;i++)
{
serie+= 1.0/factorial(i);
}
return serie;
}
double factorial(int x)
{
int i;
double fact=1;
for(i=x;i>0;i--)
{
fact*=i;
}
return fact;
}
e=
1 1 1 1
+ + + +
0! 1! 2! 3!
b) Empleando las funciones anteriores, escriba a
continuación un programa que saque por pantalla el
número e sumando la serie hasta el término n-ésimo,
siendo n un número entero leído por teclado.
#include <stdio.h>
double num_e(int n);
double factorial(int x);
void main(void)
{
double e;
int n;
printf("Introduzca n: ");
scanf("%d",&n);
e=num_e(n);
printf("\n e=%f\n",e);
}
2/4
Dpto. Ing. de Sistemas y Automática. Universidad de Sevilla.
Fundamentos de Informática. Examen convocatoria de Junio.
er
1 curso Ing. Químico. 27 de Junio de 2008.
APELLIDOS:
NOMBRE:
D.N.I.:
Escriba las respuestas únicamente en los recuadros indicados. Utilice la parte de atrás como borrador. Puede emplear el
lápiz. Compruebe que tiene todas las hojas. Entregue todas las hojas con su nombre, apellidos y DNI.
CUESTIÓN 4 (2 puntos)
a) Realice una función que calcule la suma de los elementos de la diagonal de una matriz cuadrada dada de números reales.
La función recibirá como argumentos la dirección de comienzo de memoria donde se encuentra dicha matriz y el número de filas.
La función deberá devolver dicha suma por valor.
double sumadiagonal(double * m,int n)
{
int i;
double suma=0;
for(i=0;i<n;i++)
{
suma+=m[i*n+i];
}
return suma;
}
b) Realice una función que calcule la suma de todos los elementos de una matriz cuadrada dada de números reales.
La función recibirá como argumentos la dirección de comienzo de memoria donde se encuentra dicha matriz y el número de filas.
La función deberá devolver dicha suma por referencia.
void sumatotalr(double * m,int n,double * psuma)
{
int i,j;
double suma=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
suma+=m[i*n+j];
}
}
*psuma=suma;
}
3/4
Dpto. Ing. de Sistemas y Automática. Universidad de Sevilla.
Fundamentos de Informática. Examen convocatoria de Junio.
er
1 curso Ing. Químico. 27 de Junio de 2008.
APELLIDOS:
NOMBRE:
D.N.I.:
Escriba las respuestas únicamente en los recuadros indicados. Utilice la parte de atrás como borrador. Puede emplear el
lápiz. Compruebe que tiene todas las hojas. Entregue todas las hojas con su nombre, apellidos y DNI.
CUESTIÓN 5 (3 puntos)
Se dispone de un fichero de texto que contiene la información suficiente para crear una matriz de números reales. Los dos
primeros elementos a leer son dos enteros que representan el número de filas y el número de columnas de la matriz. A
continuación se encuentran los diferentes números reales que forman la matriz separados por espacios.
Ej: La información dada en el fichero corresponde a la siguiente matriz
3 3 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9
 1.1 2.2 3.3 


 4.4 5.5 6.6 
 7.7 8.8 9.9 


Se pide que:
Realice una función que lea la información de un fichero de texto, llamado “matriz.txt”, y la escriba en un fichero
binario, llamado “matriz.bin”, con la misma estructura. Es decir, primero dos enteros que representan el número de
filas y el número de columnas, y luego los números reales (float) que componen la matriz.
void txt2bin(void)
{
FILE * pftxt=NULL;
FILE * pfbin=NULL;
int nf,nc,i;
float x;
pftxt=fopen("matriz.txt","rt");
if(pftxt==NULL)
{
printf("error de apertura 1");
exit(1);
}
pfbin=fopen("matriz.bin","wb");
if(pfbin==NULL)
{
printf("error de apertura 2");
fclose(pftxt);
exit(1);
}
fscanf(pftxt,"%d",&nf);
fwrite(&nf,sizeof(int),1,pfbin);
fscanf(pftxt,"%d",&nc);
fwrite(&nc,sizeof(int),1,pfbin);
for(i=0;i<nf*nc;i++)
{
fscanf(pftxt,"%f",&x);
fwrite(&x,sizeof(float),1,pfbin);
}
fclose(pftxt);
fclose(pfbin);
}
4/4
Descargar