Fundamentos de Informática 1ºIIND Examen Febrero 2009

Anuncio
Fundamentos de Informática
1ºIIND
Examen Febrero 2009
13/Febrero/2009
1
Prototipos (1.5 puntos)
Escribir los prototipos y un ejemplo de llamada a las siguientes funciones (declarando
las variables que sea necesario para entender el ejemplo de llamada):
a) Función que reciba dos vectores de tipo real y el número de elementos de
los vectores y devuelva el producto escalar de los dos vectores.
Prototipo:
double Escalar(double v1[], double v2[], int n);
Declaración de variables en main y ejemplo de llamada:
double vec
vec1[N],
ec1[N], vec
vec2[N];
ec2[N];
int n_elem;
double prod_escalar;
prod_escalar = Escalar(vec1, vec2, e_elem);
b) Función que reciba una cadena de caracteres y devuelva la longitud de la
cadena.
Prototipo:
int Longitud(char
Longitud(char cad[]);
Declaración de variables en main y ejemplo de llamada:
char cadena[N];
cadena[N];
int lon;
lon = Longitud(cadena);
c) Función que recibe una matriz cuadrada de enteros y su dimensión (sólo
un valor de dimensión pues se trata de una matriz cuadrada) y devuelva el
valor máximo almacenado en la matriz.
Prototipo:
int Maximo(int m[][N], int dim);
Declaración de variables en main y ejemplo de llamada:
int n;
int mat[M][N];
int max;
max=Maximo(mat,n);
Fundamentos de Informática 1ºIIND
Examen Febrero 2009
2
Cadenas (3 puntos)
Escribir una función que reciba dos cadenas (cad1 y cad2) y un carácter ch desde la
función principal. La función deberá copiar los caracteres de cad1 en cad2 hasta
llegar al final de la cadena o hasta encontrar el carácter guardado en la variable ch.
Nota: No se debe modificar la cadena original (cad1).
Ejemplos:
cad1
ch
cad2
Nevadas en la Sierra
z
Nevadas en la Sierra
Nevadas en la Sierra
s
Nevada
void Copiar(char cad1[], char cad2[], char ch)
{
int i;
}
i=0;
while (cad1[i]!=ch && cad1[i]!=’\
cad1[i]!=’\0’)
cad2[i]=cad1[i];
i++;
}
cad2[i]=’\
cad2[i]=’\0’; //importante
{
2
Fundamentos de Informática 1ºIIND
Examen Febrero 2009
3
Suma de una serie (2.5 puntos)
Escribir un programa completo que solicite el valor x y el valor n para calcular ex
por medio de una llamada a la función Serie().
La función
serie:
Serie()
debe calcular ex mediante la suma de n términos de la siguiente
x2 x3 x4
xn
+
+
+ ... +
2! 3! 4!
n!
n = 0, 1, 2, 3, 4, ...
Nota: x es un valor real, y n (número de términos) es un valor entero. Ambos valores
se piden al usuario desde main() y la función los recibe como parámetro. Realizar los
controles que se consideren necesarios.
ex =1+ x +
#include <stdio.h>
#include <math.h> //para la función exp(). opcional
double Serie(double x, int n);
int main(void)
{
double x;
int num; //numero de términos
double resultado;
//Entrada de datos
do {
printf("Numero de terminos: ");
scanf("%d",&num);
if (num<1) {
printf("Como mínimo debe haber un término\
término\n");
}
} while(num<1);
printf("Valor de x: ");
scanf("%lf",&x);
//Calculos
resultado=Serie(x,num);
printf("e^%f = %f (aprox), =%f (exacto)\
(exacto)\n",x,resultado,exp(x));
}
return 0;
double Serie(double x, int n)
/*
Se supone que n vale como mínimo 1
Devuelve el resultado de la suma de la serie.
Es más preciso cuanto mayor sea n
*/
{
int i;
double termino;
double suma;
}
//Calculos
suma=1;
termino=1;
for(i=1; i<n; i++) {
termino=termino*x/i;
termino=termino*x/i; //en
//en función del término anterior
suma+=termino;
//sumo el nuevo término
}
return suma;
3
Fundamentos de Informática 1ºIIND
Examen Febrero 2009
4
Matriz (3 puntos)
Escribir una función que reciba una matriz cuadrada de números reales y su
dimensión y rellene en un vector todos los números encontrados en la matriz mayores
que la media de todos los números de la matriz, devolviendo también el tamaño de ese
vector.
/***
Solo se pide la función.
para poder hacer pruebas
Se ha escrito un main
***/
#include <stdio.h>
#include <cstdlib> //para rand()
#define N 100
int Numeros(double m[][N],int dim, double res[]);
int main(void)
{
double mat[N][N];
mat[N][N];
int nmat; //dimension de mat
double r[N*N]; //vector de resultados
int nr;
//dimension de r
int i,j;
nmat=60;
for(i=0; i<nmat; i++)
for(j=0; j<nmat; j++)
mat[i][j]=(double)rand();
nr=Numeros(mat,nmat,r);
for(i=0; i<nr; i++) printf("%f
printf("%f ",r[i]);
}
return 0;
int Numeros(double m[][N],int dim, double r[])
{
int res;
int i,j;
double media;
//Calculo la media
media=0;
for(i=0; i<dim; i++) {
for(j=0; j<dim; j++) {
media+=m[i][j];
}
}
media=media/dim/dim; //Ojo si dim es cero esto falla
//Relleno los resultados
res=0;
for(i=0; i<dim; i++) {
for(j=0; j<dim; j++) {
if (m[i][j]>media) {
r[res]=m[i][j];
res++;
}
}
}
}
return res;
4
Descargar