NOTA: Tenis 30 minutos para realizar esta 1 parte.
1.(0,6 ptos.)Indica si son Verdaderas (V) o Falsas (F) las siguientes afirmaciones: ...V.... Un vector siempre est formado por datos del mismo tipo. ....F.... Toda funcin siempre debe tener como mnimo una sentencia return. ....F.... En una sentencia switch es obligatorio poner un break al final de cada case. ....F.... El tipo que se le asigna a una funcin es void siempre que sta devuelva algo. .....F... El nmero binario 101100101 en decimal es 145 ....V.... El contenido de la memoria RAM se pierde cada vez que se apaga el ordenador.
2.(0,2 ptos.)Cuntos bits son necesarios como mnimo, para representar la edad de una persona? (Supondremos que nadie vive ms de 127 aos)
6 8 7 5
3.(0,2 ptos.)Seala con una cruz todas las respuestas correctas, si de lo que se trata es de mostrar 5 asteriscos por pantalla
int i; for(i=1;i<32;i=i*2) {printf(*); } printf(*****); int i; for (i=5;i>0;i++) {printf(*); } int i=0; while (i<5){printf(*);}
4.(0,5 ptos.) Rellenar los huecos del siguiente programa de forma que, lea dos nmeros enteros y muestre en pantalla todos los nmeros comprendidos entre dichos nmeros, ambos incluidos. El programa no debe suponer que el primero ser menor que el segundo, ni viceversa, pero s que deber tenerlo en cuenta para mostrar los nmeros en orden creciente o decreciente segn corresponda. Los nmeros sern mostrados por filas, de forma que cada fila tenga nPorFila nmeros. El nmero de nmeros por fila, nPorFila, ser ledo al principio del programa. Cada nmero ir separado del siguiente por el carcter tabulador ('\t').
#include <stdio.h> main() { int n1,n2,i,nPorFila,contador=0;
printf("Dame el primer nmero: "); scanf("%d", &n1); printf("Dame el segundo nmero: "); scanf("%d", &n2); printf("Dime cuntos nmeros por fila: "); scanf("%d", &nPorFila);
if (n1<n2) /* orden creciente */ { for(..i=n1 ; i<= n2 ; i++..........) { printf("%d ", i); contador++;
EXAMEN 13 de Enero de 2012 FUNDAMENTOS DE INFORMTICA 2 parte (4,5 puntos) Nombre y apellidos: ................................................................................... Grupo: ..................... Especialidad: .............................................. NOTA: Tenis 2 horas para realizar esta 2 parte. 1. (2 ptos.) Escribe un programa que lea un nmero y realice el siguiente proceso, utilizando cmo mnimo dos funciones: a. Primeramente presentar en pantalla el nmero ledo, si no tiene 8 dgitos lo indicar y se ciclar pidindolo nuevamente hasta que sea correcto. Supondremos que el valor mas bajo del nmero comenzar en el 10000000. b. A continuacin imprimir la codificacin del nmero respondiendo al siguiente patrn: se recorrern los dgitos del nmero de derecha izquierda y cada dgito se codificar en una lnea con tantos guiones ('-') como el valor del dgito, seguidos al final por un asterisco ('*').
Ejemplo (en negrita los datos introducidos por el usuario): Dame un nmero: 1234567 1234567 Error el nmero debe contener 8 dgitos
Dame un nmero: 15238467 15238467 -------* ------* ----* --------* ---* --* -----* -* SOLUCION #include<stdio.h> #include<stdlib.h> long leerDniCorrecto(); void escribirCaracter(char k, int num); main() { long dni; int d,i;
dni = leerDniCorrecto(); //recoge el dni correcto
for (i=1; i<=8 ;i++) //separamos los 8 dgitos. Tambin se podra hacer { d=dni%10; // con la condicin while (dni>0) dni=dni/10; escribirCaracter('-', d); // escribe el caracter '-' tantas veces como // indica el dgito d printf("*\n");
}
system("PAUSE"); } //Esta funcin lee los dni introducidos hasta que sea correcto
printf("Dame tu DNI: "); scanf("%ld", &dni); while (dni<MinDni||dni>MaxDni){ printf("Error el DNI debe contener 8 digitos\n"); printf("Dame tu DNI: "); scanf("%ld", &dni); } return dni; } //Esta funcin escribe el caracter recibido en k tantas veces como indique num #include <stdio.h> void escribirCaracter(char k, int num) { int i; for (i=1; i<=num; i++){ printf("%c", k); } } 2. (1 pto.) Realiza el programa principal para que, dada una secuencia de nmeros reales (no superior a 100 elementos) terminada en 0, calcule la suma de reales no negativos contiguos y escriba por pantalla la mayor de la sumas obtenidas, empleando para ello las siguientes funciones ya implementadas (es decir, nos las dan ya programadas): int registroValoresR (float v[], int vLong); /* Registra en la tabla v a lo sumo vLong valores reales, valores que se obtienen por el teclado hasta que el usuario introduzca el nmero 0. Y adems devuelve el nmero de elementos introducidos en el vector v. */
float sumaPositivosContiguos (float v[], int vLong, int &p) /* Calcula y devuelve la suma de los valores reales positivos contiguos. El parmetro p recibir la posicin del primer valor positivo a sumar y devolver la posicin del primer negativo o vLong (en el caso de no haber ms datos negativos).*/
void saltarNegativos (float v[], int vLong, int &p) /* Busca la posicin del siguiente valor positivo. El parmetro p recibir el valor de la posicin en la que se encuentra un nmero negativo y devolver la posicin del primer valor positivo encontrado o vLong (en el caso de no haber ms datos positivos).
Ejemplo(en negrita los datos introducidos por el usuario): Dame una secuencia terminada en 0: -3 2 5 3.1 -2 -1.2 21 12.7 -15 20 0 La suma mxima de los positivos contiguos: 33.7 SOLUCION int registroValoresR (float v[], int vLong); float sumaPositivosContiguos (float v[], int vLong, int &p); void saltarNegativos (float v[], int vLong, int &p); main() { float v[MaxPos], sumaPos, sumaMax; int p, numElem;
numElem=registroValoresR(v, MaxPos); p=0; sumaMax=0; while (p<numElem) { saltarNegativos(v, numElem, p); sumaPos=sumaPositivosContiguos(v, numElem, p); if (sumaPos>sumaMax) {sumaMax=sumaPos;} } printf("La suma mxima de enteros positivos contiguos: %.2f\n", sumaMax);
} 3. (1,5 ptos.) Hemos realizado un programa que calcula diversas estadsticas con las notas de los alumnos de primer curso de la EUPD. Para ello el programa utiliza una matriz en la que se guardan las notas de todos los alumnos en todas las asignaturas:
float calificacion[NumAsig][NumAlumn];
calificacion[i][j]=X, con 0X10 recoge la calificacin numrica real que ha obtenido en la asignatura i el alumno j, por ejemplo, 7.35
calificacion[i][j]=-1, indica que en la asignatura i el alumno j no se ha presentado.
Nos han solicitado nuevos datos para lo cul tendris que implementar las siguientes funciones:
(1) La funcin mediaAsignatura que realizar lo siguiente: por cada asignatura calcular en el vector numAprobadosAsig[] el nmero de alumnos que la han superado y en el vector mediaAprobadosAsig[]la nota media de la asignatura con los alumnos aprobados. Para ello, recibir como entrada la matriz calificacion[][NumAlumn]con todas la notas.
void mediaAsignatura (float calificacion[][NumAlumn], int asignaturas, int numAprobadosAsig[], float mediaAprobadosAsig[]);
(2) La funcin mediaCurso que realizar lo siguiente: calcular la nota media de los presentados mediaPres y la nota media de los aprobados mediaAprob. Para ello, recibir como entrada la matriz calificacion[][NumAlumn]con todas la notas y devolver por referencia, al programa principal, las dos medias calculadas: mediaPres y mediaAprob.
SOLUCION 1 void mediaAsignatura(float notas[][NumAlum], int asignaturas, int numAprobadosAsig[], float mediaAprobadosAsig[]) { float suma; int i, j;
for (j=0; j<asignaturas; j++) { suma = 0; numAprobadoAsig[j]=0; for (i=0; i<NumAlum; i++) { if (notas[j][i]>=5) { numAprobadosAsig[j]++; suma=suma+notas[j][i]; } } mediaAprobadosAsig[j]=suma/numAprobadosAsig[j]; } } SOLUCION 2 void mediaCurso(float notas[][NumAlum], int asignaturas, float &mediaPres, float &mediaAprob) { float sPresentados=0, sAprobados=0; int nPresentados=0, nAprobados=0; int i, j;
for(i=0; i<alumnos; i++) { for (j=0; j<NumAsig; j++) { if (notas[j][i]!=-1) { sPresentados = sPresentados+ notas[j][i]; nPresentados = nPresentados+1; if (notas[j][i]>=5) { sAprobados = sAprobados+notas[j][i]; nAprobados = nAprobados+1; } } } } if (nPresentados!=0) {mediaPres = sPresentados/nPresentados;} else{mediaPres=0;} if (nAprobados!=0) {mediaAprob = sAprobados/nAprobados;} else{mediaAprob=0;} }