Está en la página 1de 12

C1 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta de forma concisa a la cuestión en esta misma hoja.
Cuestión C1 (20 Puntos)

El nuevo teléfono móvil POCO M4 Pro 5G incorpora un procesador MediaTek Dimensity 810 con
2 MB de memoria caché. Además, el teléfono, en su versión básica, tiene 4 GB de memoria RAM
y 64 GB de almacenamiento interno ampliables hasta 1 TB en microSD. Se sabe también que
cuenta con RAM dinámica (RAM Virtual) de forma que puede usar almacenamiento interno virtua-
lizado como memoria RAM, pasando de 4 GB a 5 GB con esta técnica.
Contesta a las siguientes preguntas:
1) Sitúa los distintos tipos de memoria (subrayados en el texto) dentro de la pirámide que representa
la jerarquía de memoria.

2) Memoria caché: ¿para qué sirve?, ¿qué son los principios de localidad temporal y espacial?, ¿su
gestión se realiza vía hardware o software?

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


3) Memoria virtual: ¿qué analogías tiene con la memoria caché?, ¿cómo funciona?, ¿su gestión se
realiza vía hardware o software?

4) ¿Qué tipo de memoria es una microSD? ¿Cuántas fotos de 10 MB podemos almacenar en una
microSD de 1 TB?

5) El sistema operativo Android usa Android Runtime (ART) como máquina virtual. ¿Para qué sirve
una máquina virtual como ART? ¿cómo funciona?

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


C2 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta a la cuestión en esta misma hoja.
Cuestión C2 (15 Puntos)

Resuelva los siguientes ejercicios mostrando los pasos seguidos para su resolución.

1. Dada la conversión 2n32 (base 4) =13A (base 12) , obtenga el valor de n para que se cumpla la igualdad,
donde n es una de las cifras del número en base 4. (3 puntos)

2. Calcule el valor de 𝒙𝒙 sabiendo que se cumple la siguiente igualdad (a, b, c son cifras en base x): (3
puntos)
𝒂𝒂𝒂𝒂(𝒃𝒃𝒃𝒃𝒃𝒃𝒃𝒃 𝒙𝒙) + 𝒃𝒃𝒃𝒃(𝒃𝒃𝒃𝒃𝒃𝒃𝒃𝒃 𝒙𝒙) + 𝒄𝒄𝒄𝒄(𝒃𝒃𝒃𝒃𝒃𝒃𝒃𝒃 𝒙𝒙) = 𝟔𝟔𝟔𝟔(𝒃𝒃𝒃𝒃𝒃𝒃𝒃𝒃 𝒂𝒂+𝒃𝒃+𝒄𝒄)

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


3. La secuencia de bits 0 01111111 00000000000000000000000 es la representación interna corres-
pondiente a un número real de simple precisión según el estándar IEEE754 (float en C++).
¿Qué número en base 10 estaría representando? (3 puntos)

4. Disponemos de una CPU cuyas instrucciones de 32 bits están compuestas por dos campos:
• el primer byte contiene el código de operación (CO)
• los restantes, una dirección de operando (ADDRESS).
Si el bus de direcciones es de 32 bits y el bus de datos es de 16 bits.
a. ¿Cuál es el tamaño de memoria en megabytes (MB) que se puede direccionar directamente? (3
puntos)
b. ¿Cuántos accesos a memoria son necesarios para leer cada instrucción? (3 puntos)

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


C3 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta a la cuestión en esta misma hoja.
Cuestión C3 (10 Puntos)
Se pide completar un programa en C++ junto con el desarrollo de las funciones necesarias para analizar la trayectoria
de un robot móvil que se desplaza por una serie de puntos en un plano bidimensional. El número de puntos y las
coordenadas (𝑥𝑥, 𝑦𝑦) de cada uno se leerán de un fichero llamado puntos.txt. El recorrido entre cada punto y el siguiente
se realiza en línea recta. Por tanto, la distancia entre dos puntos consecutivos (𝑥𝑥𝑎𝑎 , 𝑦𝑦𝑎𝑎 ) y (𝑥𝑥𝑏𝑏 , 𝑦𝑦𝑏𝑏 ) será:
𝑑𝑑𝑎𝑎,𝑏𝑏 = �𝑑𝑑𝑥𝑥 2 + 𝑑𝑑𝑦𝑦 2 𝑐𝑐𝑐𝑐𝑐𝑐 𝑑𝑑𝑥𝑥 = 𝑥𝑥𝑏𝑏 − 𝑥𝑥𝑎𝑎 , 𝑑𝑑𝑦𝑦 = 𝑦𝑦𝑏𝑏 − 𝑦𝑦𝑎𝑎
El programa debe operar de la siguiente forma:
• Abrir el fichero puntos.txt
• Leer el contenido del fichero:
- el número de puntos (que figura en primer lugar en el fichero)
- las coordenadas (𝑥𝑥, 𝑦𝑦) de cada punto y guardarlas en sendos vectores, uno para las abscisas 𝑥𝑥 y otro para las
ordenadas 𝑦𝑦. Las coordenadas son números reales.
• Calcular y mostrar por pantalla la distancia máxima entre dos puntos consecutivos y la longitud del trayecto total.

Un ejemplo:

#include <iostream>
#include <cmath>
#include <vector>
#include <fstream>

using namespace std;

//Función para obtener el vector de las distancias entre dos puntos consecutivos

distancias ( )

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


//Función para obtener el valor máximo de todas las distancias calculadas
val_max( )

//Función para obtener la distancia total entre el primer y último punto


trayect_tot ( )

main()
{
ifstream in_data("puntos.txt");
if (!in_data)
{
cout<<"Se ha producido un error accediendo al fichero de lectura puntos.txt\n";
exit(1);
}
int nr_puntos;
in_data >> nr_puntos;
vector<double> coord_x(nr_puntos);
vector<double> coord_y(nr_puntos);

//Leer coordenadas y crear los dos vectores de coordenadas x e y respectivamente

// Obtener las distancias entre los puntos consecutivos

// Obtener la distancia máxima entre dos puntos consecutivos

// Obtener la longitud de todo el trayecto (desde el primer punto hasta el último)

cout<<"La distancia máxima entre dos puntos consecutivos: " ;

cout<<"La distancia total recorrida: " ;


}

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


C4 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta a la cuestión en esta misma hoja.
Cuestión C4 (10 Puntos)

Apartado a) (3 Puntos)
Explicar la salida por pantalla (figura o figuras geométricas que se generan) a que da lugar el siguiente
código:

#include <iostream>
using namespace std;
int main()
{
int lado1=8, lado2=17;
for(int i=0; i<lado1/2; ++i)
{
for(int j=0; j<lado2/2; ++j)
if(j == lado1/2 - i || j == lado1/2 +i)
cout << "* ";
else
cout << " ";
cout << endl;
}
for(int i=0; i<lado1; ++i)
{
for(int j=0; j<=lado2/2; ++j)
if(i==0 || i==lado1-1 || j==0 || j==lado2/2)
cout << "* ";
else
cout << " ";
cout << endl;
}
return 0;
}

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


Apartado b) (3 Puntos)
Dado el código siguiente:

#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
vector<double> borra(const vector<double>& v, size_t pos);
int main()
{
vector<double> v {0, 1, 2, 3, 4, 5};
cout << "Borrado del elemento en pos. 3:" << endl;
vector<double> w = borra(v, 3);
for (size_t i = 0; i < w.size(); ++i)
cout << w[i] << " ";
}
vector<double> borra(const vector<double>& v, size_t pos)
{
if (pos >= v.size())
{
cout << "Fallo en la funcion borra().\n"
<< "El índice " << pos
<< " de borrado está fuera de los límites del vector.\n";
exit(EXIT_FAILURE);
}
vector<double> w;
for (size_t i = 0; i < pos; ++i)
w.push_back(v[i]);
for (size_t i = pos+1; i < v.size(); ++i)
w.push_back(v[i]);
return w;
}

Reprogramarlo para la declaración de la función:


void borra(const vector<double>& v, vector<double>& w, size_t pos);

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


C4 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta a la cuestión en esta misma hoja.

Apartado c) (4 Puntos)
Corregir los errores en el código siguiente. El programa debe rellenar un vector de enteros con los valores
contenidos en el fichero “ejemplo.dat” y mostrar dicho vector por pantalla.

#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
void muestra_vector(vector<int>);
int main()
{
ofstream fich("ejemplo.dat");
if (fich)
{
cout << "Error al abrir ejemplo.dat\n";
exit(EXIT_FAILURE);
}
int valor = 0;
vector<int> datos;
while (fich != valor)
datos.push_back(valor);
datos = muestra_vector();
}
void muestra_vector(vector<int> v)
{
for (size_t i=0; i <= v.size(); ++i)
cout << v.at(i) << " ";
cout << endl;
}

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática
C5 Escuela de Ingenierías Industriales

Fundamentos de Informática Examen Ordinario: 24 de enero de 2022


Apellidos (en Mayúsculas) Nombre Grupo T IM IOI IQ ITI IEIA IELE IENE
1
2
3

Observaciones: Nota:
• Rellena los datos (apellidos, nombre y grupo) que se solicitan en la parte superior de esta hoja.
• Contesta a la cuestión en hoja aparte.
Cuestión C5 (10 Puntos)
Dado el código siguiente:

#include <iostream>
#include <cstdlib>
#include <vector>
#include <cmath>

using namespace std;

double ProductoEscalar3(vector<double> a, vector<double> b);


vector<double> ProductoVectorial3 (vector<double> a, vector<double> b);
vector<double> ProductoVector3PorConstante (vector<double> a, double k);

int main()
{
vector<double> v1 {0, 1, 2};
vector<double> v2 {3, 4, 5};
double K1=2;

cout << "Producto escalar: " << ProductoEscalar3(v1, v2) << endl;
cout << "Producto vectorial: ";
vector<double> w1 = ProductoVectorial3(v1, v2);
for(size_t i=0; i<w1.size(); ++i)
cout << w1[i] << " ";
cout << "\nProducto vector por constante ("<<K1<<"): ";
vector<double> w2 = ProductoVector3PorConstante(v1, K1);
for(size_t i=0; i<w2.size(); ++i)
cout << w2[i] << " ";
return 0;
}
double ProductoEscalar3(vector<double> a, vector<double> b)
{
double escalar=0;
if (a.size()!=3 || b.size()!=3)
{
cout << "Fallo en la funcion ProductoEscalar3.\n";
exit(EXIT_FAILURE);
}
for(size_t i=0; i<a.size(); ++i)
escalar+=a[i]*b[i];
return escalar;
}
vector<double> ProductoVectorial3 (vector<double> a, vector<double> b)
{
vector<double> c;
if (a.size()>3 || b.size()>3 || a.size()<2 || b.size()<2)
{
cout << "Fallo en la funcion ProductoVectorial3.\n";
exit(EXIT_FAILURE);
}
c.push_back(a[1]*b[2]-a[2]*b[1]);
c.push_back(a[2]*b[0]-a[0]*b[2]);

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática


c.push_back(a[0]*b[1]-a[1]*b[0]);
return c;
}
vector<double> ProductoVector3PorConstante (vector<double> a, double k)
{
vector<double> c;
if (a.size()==0)
{
cout << "Fallo en la funcion ProductoVector3PorConstante.\n";
exit(EXIT_FAILURE);
}
for(size_t i=0; i<a.size(); ++i)
c.push_back(k*a[i]);
return c;
}

Reprograme por completo el programa (en hoja aparte) si se modifican los prototipos de las funciones de
la siguiente forma:

vector<double> ProductoVectorial3 (const vector<double>& a, const vector<double>& b);

void ProductoEscalar3 (const vector<double>& a, const vector<double>& b, double& resultado);


//devuelve el producto escalar de los dos vectores en la variable resultado

void ProductoVector3PorConstante (vector<double>& a, double k);


//devuelve el producto del vector por la constante en el propio vector a.

Conteste a la siguiente pregunta: ¿Es preferible la versión vector<double> ProductoVectorial3


(const vector<double>& a, const vector<double>& b); ? Razone la respuesta.

Universidad de Valladolid – Departamento de Ingeniería de Sistemas y Automática

También podría gustarte