Anda di halaman 1dari 6

EXAMEN 13 de Enero de 2012

FUNDAMENTOS DE INFORMTICA 1 parte (1,5 puntos)


Nombre y apellidos: ...................................................................................

Grupo: .................... Especialidad: .................................................

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++;

if (....contador % nPorFila != 0 )
{printf("\t"); /* tabulador */}
else {printf("\n"); /* nueva lnea */}
}
}
else /* orden decreciente */
{
for(...i=n1 ; i>=n2 ; i--.....)
{
printf("%d ", i);
contador++;

if (....contador % nPorFila != 0....)
{printf("\t");}
else {printf("\n");}
}
}
}



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

#include <stdio.h>
#define MinDni 10000000
#define MaxDni 99999999

long leerDniCorrecto()
{ long dni;

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;}
}

Anda mungkin juga menyukai