Sie sind auf Seite 1von 3

Fundamentos de Programacin

Enero 2014

1. Una compaa almacena en un vector informacin sobre las edades de los hijos de sus empleados. El vector tiene
el siguiente formato:
CdigoEmpleado1 NmeroHijosEmpleado1 EdadHijo1Empleado1 EdadHijo2Empleado1 CdigoEmpleado2
NmeroHijosEmpleado2 EdadHijo1Empleado2 EdadHijo2Empleado2
Un ejemplo de vector con informacin es el siguiente:
10 3 2 10 8 40 2 6 4 20 0 50 2 3 9 30 4 2 4 6 8

/**
Descripcin: devuelve el cdigo del empleado cuyos hijos tienen una edad media mayor
Parmetros de entrada:
v: vector con la informacin. El formato es: cdigo empleado, nmero de hijos y las edades de
stos, as para cada empleado
t: tamao de v
Valor devuelto: cdigo del empleado cuyos hijos tienen una edad media mayor
*/
int CodigoMaxMedia(const int v[], int t){

int codigo_max; // cdigo del empleado cuyos hijos tienen mayor edad media
float edadMediaMax = 0;
int i = 0;

while (i<t){
int n_hijos=v[i+1];
float edadMedia = 0;
for (int j=i+2;j<n_hijos+i+2; j++){ // nmero de hijos del siguiente
edadMedia += v[j];
}
if (n_hijos!=0)
edadMedia /= n_hijos;
if (edadMediaMax < edadMedia){
edadMediaMax = edadMedia;
codigo_max = v[i];
}
i += 2+n_hijos;
}
return codigo_max;
}

2. Implementa una funcin a la que se le d como parmetro una matriz y determine si es o no un cuadrado mgico.
Se considera un cuadrado mgico aquel en el cual las filas, columnas y las diagonales principal y secundaria suman
lo mismo.
/**
Descripcin: Comprueba si una matriz es un cuadrado mgico
Parmetros de entrada:
mat: matriz de dos dimensiones de enteros
nf, nc: nmero de filas y columas de mat
Valor devuelto: true si la matriz dada como entrada es un cuadrado mgico y false en otro caso
*/
bool CuadradoMagico (const int mat[][50], int nf, int nc){
if (nf!=nc)
return false; //para ser un cuadrado mgico tiene que ser una matriz cuadrada

int valor=0, suma;
for (int c=0; c<nc; c++)
valor += mat[0][c]; // se suman los elementos de la primera fila
// vemos si todas las filas suman igual
for (int f=0; f<nf; f++) {
suma = 0;
for (int c=0; c<nc; c++)
suma+=mat[f][c];
if (suma!=valor)
return false;
}
// vemos si todas las columnas suman igual
for (int c = 0; c < nc; c++) {
suma=0;
for (int f=0; f<nf; f++)
suma+=mat[f][c];
if (suma!=valor)
return false;
}
// vemos si la diagonal principal suma igual
suma=0;
for (int c=0; c<nf; c++)
suma += mat[c][c];
if (suma!=valor)
return false;
// por ltimo, la diagonal secundaria
suma=0;
for (int c=0; c<nf; c++)
suma+=mat[c][nf-c-1];
return suma == valor;
}

3. Realiza una funcin que tome como parmetro dos cadenas de caracteres y devuelva la vocal de la primera
cadena que aparece ms veces en la segunda cadena. Por ejemplo, si recibe las cadenas hola y Pepe es un
perro manso, debera devolver o, porque de las dos vocales de la primera cadena la vocal o aparece dos veces en
la segunda cadena, mientras que la a aparece una nica vez.
/**
Descripcin: calcula la vocal (en minsculas) de una cadena que ms veces aparece en otra
cadena
Parmetros de entrada:
primera, segunda: dos cadenas de caracteres
Valor devuelto: vocal (en minscula) de la primera cadena que ms veces aparece en la segunda
cadena
si la primera cadena no contiene vocales devuelve un espacio en blanco

*/
char VocalMax(const string& primera, const string& segunda){

int t1=primera.length();
int t2=segunda.length();

int max_veces=-1, veces;
char vocal_max = ' ';
for (int i=0; i<t1; i++){
if (primera[i]=='a' || primera[i]=='e' || primera[i]=='i' || primera[i]=='o' ||
primera[i]=='u' || primera[i]=='U'){
veces=0;
for (int j=0; j<t2; j++)
if (segunda[j]==primera[i])
veces++;
if (veces>max_veces){
max_veces=veces;
vocal_max=primera[i];
}
}
}
return vocal_max;
}

4. Realiza una funcin con la siguiente especificacin:
Entrada: un vector de enteros positivos.
Salida: un vector con los enteros del vector de entrada que tienen 5 divisores o ms.
/**
Descripcin: devuelve en un array los elementos de otro array que tienen 5 o ms divisores
Parmetros de entrada:
v: vector con elementos enteros
t: tamao de v
Parmetros de salida:
res: vector con los elementos de v que tienen cinco o ms divisores
tam: tamao de res
*/
void Mas5divisores(const int v[], int t, int res[], int &tam){
int cont_divisores;
tam=0;
for (int i=0;i<t; i++){
cont_divisores=0;
for (int j=1; j<=v[i]; j++)
if (v[i]%j==0)
cont_divisores++;
if (cont_divisores>=5){
res[tam]=v[i];
tam++;
}
}
}

Das könnte Ihnen auch gefallen