Está en la página 1de 10

Junio2022.

pdf

Anónimo

Informática

1º Grado en Ingeniería Electrónica, Robótica y Mecatrónica

Escuela de Ingenierías Industriales


Universidad de Málaga

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática
GIERM
Recuperación 1º Parcial (22 de junio de 2022)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
No se pueden usar strings ni arrays. Se valorará la eficiencia de la solución y el uso de las estructuras de control más adecuadas.

PROBLEMA 1: Programa que, partiendo de un número entero positivo, encuentre y muestre en pantalla el menor número que
sea divisible por todos los números del 1 al 10 (es decir, que al ser dividido por todos los números del 1 al 10, en todos los casos
el resto sea 0).

Ejemplos: Si se parte del 11, se deberá obtener el 2520;


Si se parte del 2521, se deberá obtener el 5040.

PROBLEMA 2:
a. Defina un subprograma que recibiendo 2 números enteros positivos de 5 cifras, donde el primero se corresponde con

Reservados todos los derechos.


el número de un cupón de la ONCE y el segundo al número ganador del sorteo, devuelva la cantidad aciertos
conseguidos.

Sólo se considerarán aciertos a aquellas cifras del cupón que coincidan con las que se encuentran en su misma posición
en el número ganador, pero empezando a comparar por las unidades (por la derecha de ambos números) y hasta el
momento del primer fallo.

Por ejemplo, si el número ganador es el “45078” y el número del cupón es el “65178”, se considerarían como
coincidencias sólo las 2 últimas cifras (“78”).

b. Haga otro subprograma para calcular el premio conseguido, dado el nº de aciertos, sabiendo que:
• Si no coindice ninguna cifra (0 aciertos) => 0 euros
• Coincide la última cifra (1 acierto) => 1,5 euros
• Coinciden las 2 últimas cifras (2 aciertos) => 6 euros
• Coinciden las 3 últimas cifras (3 aciertos) => 20 euros
• Coinciden las 4 últimas cifras (4 aciertos) => 200 euros
• Coinciden las 5 cifras (5 aciertos) => 35000 euros

c. Escriba un programa que pida por teclado el número ganador del sorteo de la ONCE. Después deberá entrar en un
proceso repetitivo en el que se pida el número de un cupón, y se calcule y muestre en pantalla la cantidad de aciertos,
y el premio (en euros) que le ha correspondido, repitiendo el proceso siempre que el usuario responda con una ‘S’ o ‘s’
a la pregunta de si desea evaluar otro cupón (otro número). No hace falta que compruebe que los números introducidos
son correctos.

Ejemplo:
Numero ganador? 10345
Cupón? 10054
Coinciden 0, Premio de 0 euros
Evaluar otro cupón (S/s)? s
Cupón? 12005
Coinciden 1, Premio de 1.5 euros
Evaluar otro cupón (S/s)? s
Cupón? 10345
Coinciden 5, Premio de 35000 euros
Evaluar otro cupón (S/s)? s
Cupón? 10045
Coinciden 2, Premio de 6 euros
Evaluar otro cupón (S/s)? s
Cupón? 80345
Coinciden 4, Premio de 200 euros
Evaluar otro cupón (S/s)? n

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
#include <iostream>
#include <string>
#include <array>
#include <fstream>
using namespace std;

int coincidencias( int premiado, int cupon)


{
int i = 0;
while(i<5 and cupon%10 == premiado%10){

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
i++;
cupon = cupon / 10;
premiado = premiado / 10;
}
return i;
}

double premio (int c)


{
double p=0;
if (c==1) p=1.5;
else if (c==2) p=6;
else if (c==3) p=20;
else if (c==4) p=200;

Reservados todos los derechos.


else if (c==5) p=35000;
return p;
}

int main ()
{
int premiado, cupon, c;
char otro;
cout << "Numero ganador? ";
cin >> premiado;
do{
cout << "Cupón? ";
cin >> cupon;
c = coincidencias(premiado, cupon); // lo calculamos y
guardamos y usamos luego 2 veces
cout << " Coinciden " << c;
cout << ", Premio de " << premio(c) << endl;
cout << " Evaluar otro cupón (S/s)? ";
cin >> otro;
}while (otro=='S' or otro=='s');
return 0;
}

¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
#include <iostream>
using namespace std;

int main()
{
int num; // para el nº 11, el buscado seria el 2520
cout << "INTRODUCE UN NUMERO ENTERO: ";
cin >> num;
int d = 2;
while( d<=10 )
{

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
if (num % d == 0){
d++;
}else{
// cout << num << " no divisible por el " << d << endl;
d = 2; // comenzamos con el 1º candidato a divisor
num++; // pasamos al siguiente numero
}
}
cout << "EL NUM BUSCADO ES EL: " << num << endl;
return 0;
}

Reservados todos los derechos.

¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
Informática
GIERM
Recuperación 2º Parcial (22 de junio de 2022)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
PROBLEMA (6p): Queremos hacer un programa para la gestión y obtención de cierta información relacionada con el proceso de
elección del presidente de una cofradía de Semana Santa, formada por un máximo de 50 cofrades.
Según la normativa de dicha cofradía, sólo podrán y deberán votar los cofrades que se presenten como candidatos a presidente,
dando su voto a un mínimo de 1 y un máximo de otros 5 candidatos.
Se decide disponer de una lista de candidatos, en la que para cada uno se registre su nombre, un número que indique la cantidad
de votos que él ha recibido de los demás candidatos, otro número que indique a cuántos candidatos ha votado él, y una lista
con los nombres de sus votados.
Se pide desarrollar los siguientes subprogramas (además de todos los que considere apropiados), e incluir en la función
main() las instrucciones necesarias para poder probarlos:

1. (3p) Se dispone de un fichero, “votos.txt” (puede descargarlo o copiarlo del campus virtual), en el que cada 2 líneas se
corresponden con un voto: la primera almacenará el nombre del candidato que ha emitido el voto (el votante), y la
siguiente, el nombre de uno de los candidatos a los que ha decidido votar (el votado). Puede suponer que todos los
votos del fichero cumplirán la normativa de la cofradía, sin necesidad de hacer comprobaciones al respecto.

Reservados todos los derechos.


Ejemplo. El fichero podría comenzar con los siguiente votos (cada 2 líneas corresponden a 1 voto):
Pedro
Marta
Marta
Pedro
Carlos
Marta
Pedro
Carlos
...

Defina un subprograma (además de todos los que considere adecuados), crear_lista_de_candidatos(), que
a partir de los datos de dicho fichero, se encargue de crear y devolver la lista de candidatos en la que se refleje a qué
compañeros ha votado cada uno (sin calcular aún el número de votos que él ha recibido, que deberá aún estar a cero)

Ejemplo. Para los votos almacenados en el fichero dado, se debería generar la lista de candidatos siguiente:

Pedro 0 4 Marta Carlos Javier Adriana


Marta 0 3 Pedro Javier Carlos
Carlos 0 1 Marta
Josefa 0 2 Pedro Adriana
Adriana 0 3 Carlos Josefa Pedro
Javier 0 1 Carlos
Juan 0 1 Pedro

2. (0.5p) Subprograma, mostrar_candidatos(), que muestre en pantalla la lista completa de candidatos, con un
aspecto similar al mostrado en el ejemplo anterior.

3. (1p) Subprograma, calcular_votos_recibidos(), que actualice, en la lista de candidatos, el número total de


votos que ha recibido cada candidato.
Ejemplo. Si partimos de la lista de candidatos anterior, tras terminar el proceso, la lista debería quedar así:
Pedro 4 ...
Marta 2 ...
Carlos 4 ...
...
4. (1.25p) Subprograma, calcular_ganadores(), que genere y devuelva (sin mostrar) una nueva lista que incluya
sólo el nombre del ganador o ganadores (si hay empates) de la votación.
(0.25p) Defina otro subprograma, mostrar_ganadores(), que se encargue de mostrar la lista generada por el
subprograma anterior.

Ejemplo. Para los datos dados, los ganadores serían, con 4 votos cada uno: Pedro y Carlos.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
#include <iostream>
#include <string>
#include <array>
#include <fstream>
using namespace std;

const int MAX_VOTADOS = 5;


typedef array <string, MAX_VOTADOS> TAvotados;

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
typedef struct{
string nombre;
int nvotos;
TAvotados votos;
int recibidos;
} TRcandidato;

const int MAX_CANDIDATOS = 50;


typedef array <TRcandidato, MAX_CANDIDATOS> TAcandidatos;

typedef struct{
int tam;
TAcandidatos datos;
} TRlistaCandidatos;

Reservados todos los derechos.


typedef array <string, MAX_CANDIDATOS> TAganadores;
typedef struct{
int tam;
TAganadores datos;
} TRlistaGanadores;
//------------------------------------
//------------------------------------
//---2) ---------------------------------
void mostrar_un_candidato(const TRcandidato & t)
{
cout << "\t" << t.nombre << "\t" << "\t" << t.recibidos << "\t" <<
t.nvotos << "\t";
for(int i = 0; i < t.nvotos; i++){
cout << t.votos[i] << " ";
} cout << endl;
}
//------------------------------------
void mostrar_candidatos(const TRlistaCandidatos & l)
{
for(int i = 0; i < l.tam; i++){
mostrar_un_candidato(l.datos[i]);
} cout << endl;
}

//------------------------------------
//------------------------------------
//---1) ---------------------------------
typedef struct{
string votante;
string votado;
} TRvoto;
//------------------------------------

¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
int buscar_votante(const string & buscado, const TRlistaCandidatos &
l)
{
int pos=-1, i = 0;
while (i < l.tam && l.datos[i].nombre != buscado){
i++;
}
if (i < l.tam){
pos = i;
}
return pos;

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
}
//------------------------------------
bool registrar_voto(TRlistaCandidatos & l, const TRvoto & voto)
{
bool insertado = false;
int pvotante = buscar_votante(voto.votante, l);
if (pvotante == -1 and l.tam < MAX_CANDIDATOS)
{
l.datos[l.tam].nombre = voto.votante;
l.datos[l.tam].nvotos = 1;
l.datos[l.tam].votos[0] = voto.votado;
l.datos[l.tam].recibidos = 0;
l.tam++;
insertado = true;
}

Reservados todos los derechos.


else if (pvotante != -1 and l.datos[pvotante].nvotos <
MAX_VOTADOS)
{
l.datos[pvotante].votos[ l.datos[pvotante].nvotos ] =
voto.votado;
l.datos[pvotante].nvotos++;
insertado = true;
}
return insertado;
}

//------------------------------------
bool crear_lista_de_candidatos(TRlistaCandidatos & l)
{
bool abierto = false;
l.tam = 0;
ifstream f;
TRvoto voto;
f.open("/Users/alcl/Library/CloudStorage/OneDrive-
UniversidaddeMálaga/Curso2021-22/GIERM/examenes/jun GIERM/recup
parcial 2 (Cofradia)/votos.txt");
if ( f.is_open() )
{
abierto = true;
f >> voto.votante; // INTENTAR LEER 1º DATO 1º REGISTRO/VOTO
while ( !f.eof() )
{
// LEER RESTO DE DATOS DEL VOTO
f >> voto.votado;

// REGISTRAR VOTO EN LA LISTA


registrar_voto(l, voto);
// mostrar_todos(l);

// INTENTAR LEER 1º DATO SIG REGISTRO/VOTO

¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
f >> voto.votante;

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
}
f.close(); // SE CIERRA SOLO SI SE PUDO ABRIR
}
return abierto;
}

//---3) ---------------------------------
//------------------------------------
//------------------------------------
void calcular_votos_recibidos(TRlistaCandidatos & l)
{
// SE SUPONE QUE YA ESTÁ INICIALIZADO A CERO EL CAMPO recibidos DE
CADA CANDIDATO
for(int i = 0; i < l.tam; i++){
for(int j=0; j<l.datos[i].nvotos; j++){
int p = buscar_votante(l.datos[i].votos[j], l);
if ( p != -1 ){ // NO NECESARIO SEGÚN ENUNUCIADO

Reservados todos los derechos.


l.datos[p].recibidos++;
}
}
}
}

//---4) ---------------------------------
//------------------------------------
//------------------------------------
int maxima_puntuacion(const TRlistaCandidatos & l)
{
int mayor = l.datos[0].recibidos;
for(int i = 0; i < l.tam; i++){
if ( l.datos[i].recibidos > mayor ){
mayor = l.datos[i].recibidos;
}
}
return mayor;
}
//------------------------------------
void calcular_ganadores(const TRlistaCandidatos & l, TRlistaGanadores
& g)
{
int mayor = maxima_puntuacion(l);

g.tam = 0;
for(int i = 0; i < l.tam; i++){
if ( l.datos[i].recibidos == mayor ){
g.datos[g.tam] = l.datos[i].nombre;
g.tam++;
}
}
}
//------------------------------------
void mostrar_ganadores(const TRlistaGanadores & g)
{
for(int i = 0; i < g.tam; i++){
cout << g.datos[i] << " ";
}
}

//------------------------------------
//------------------------------------

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708
//------------------------------------
int main ()
{
TRlistaCandidatos l;
l.tam = 0;
TRlistaGanadores g;
g.tam = 0;
bool ok = crear_lista_de_candidatos(l);
if (ok){
calcular_votos_recibidos(l);

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
cout << "GANADORES: ";
calcular_ganadores(l,g);
mostrar_ganadores(g);

cout << endl << "CANDIDATOS:" << endl;


mostrar_candidatos(l);
cout << endl <<endl;

}else{
cout << "FICH NO ABIERTO" << endl;;
}
return 0;
}

Reservados todos los derechos.

¿No te llega para pagar Wuolah Pro? ¿Un año sin anuncios gratis? ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-6102708

También podría gustarte