Ejercicio 1 Hay que transformar la soluci´on del cuarto problema de la pr´actica 1(esta después del ejercicio 3solo deveis mirar el 4 de la practica), de forma que el
siguiente programa compile perfectamente y funcione:
int main(){
/* Las declaraciones que haga falta */
printf("Programa de gesti´on de notas\n\n");
fin=falso;
while (!fin){ mostrarOpciones();
opcion=leerOpcion(1,4);
switch (opcion) { case 1: { contarNotas(&nSusp, &nApr, &nNot, &nSob);
printf("\nResultado: %d suspensos, %d aprobados,
%d notables y %d sobresalientes\n.",
nSusp, nApr, nNot, nSob);
} case 2: { calcularMedias( &med, &mAp, &mSp);
printf("\nLa nota media es %f.\n", med);
printf("\nLa media de los aprobados es %f.\n", mAp);
printf("\nLa media de los suspensos es %f.\n", mSp);
}case 3: { calcularMaxMin( &max, &min);
printf("\nLa nota m´axima es %f y la m´ınima %f.\n",
max, min);
} case 4: { fin = cierto;
}
}
}printf("\n\nFin de programa.\n\n");
}
Para ello, deb´eis identificar qu´e porciones de c´odigo corresponden a cada una de las funciones
utilizadas, deb´eis escribir los prototipos de las funciones utilizadas en el desarrollo del
programa ANTES de la funci´on main() y deb´eis desarrollar el c´odigo de las funciones y
procedimientos oportunos DESPU´ES de la funci´on main().
Ejercicio 2 Lo anterior es dise˜no descendente. Hay una funci´on que no aparece en la descripci´on
anterior pero que puede ser ´util a la hora de desarrollar el c´odigo para ahorrarnos el tener
que escribir varias veces exactamente la misma operaci´on. Digamos que a esa funci´on le
denominamos leerNotaCorrecta()... ¿le encontr´ais utilidad? En el c´odigo anterior ¿en
cu´antos sitios la podr´ıais utilizar?
Para contestar esta cuesti´on introduce en el c´odigo que hayas desarrollado en el ejercicio
anterior la definici´on, la implementaci´on y el uso de la funci´on leerNotaCorrecta();
entrega un ´unico fichero de texto que contenga la soluci´on a ambos ejercicios.
Lo que hemos hecho en el ejercicio 1 se conoce como dise˜no descendente. En este apartado
vamos a aplicar la misma t´ecnica al problema final de la pr´actica 2, en el que se van leyendo enteros
positivos de teclado y se va calculando la !-imagen de cada uno hasta leer el valor 0.
Al usar la t´ecnica del dise˜no descendente, se puede esbozar el algoritmo de la siguiente forma:
int main(){
numero = leerEnteroPositivo();
/* mientras el valor leido no sea 0 */
while (numero != 0) { alfa = potencia2(numDivPrimos(numero)-1);
printf("\nAlfa-imagen = %d.\n", alfa);
numero = leerEnteroPositivo();
}
}
Hemos hecho lo mismo que en el apartado anterior, pero si comparas el c´odigo de la pr´actica
2 y el algoritmo anterior, seguramente ´este te parecer´a m´as f´acil de entender: el c´alculo de la !-
imagen es la traducci´on directa de la definici´on matem´atica y no una porci´on de c´odigo m´as o
menos “enrevesada”.
Y si admites un consejo de tus mayores

numDivPrimos(), que tiene toda la pinta de servir para determinar cu´antos divisores primos
tiene un entero dado, usa una funci´on de tipo boole que indique si un valor entero es o no es primo.
Ejercicio 3 Escribir un programa principal que siga el algoritmo anterior, usando al menos las siguientes
funciones, de las que os proporcionamos los prototipos:
int potencia2(int k);
/* Pre: k, entero positivo, k >= 1 */
/* Post: devuelve la correspondiente potencia de 2 */
20 ITIS IS04: Pr´actica 3. Funciones y Procedimientos
boole esPrimo(int num);
/* Pre: num, entero positivo */
/* Post: devuelve cierto si num es primo, falso en caso contrario*/
int numDivPrimos(int num);
/* Pre: num, entero positivo, num > 1 */
/* Post: devuelve cu´antos divisores primos tiene num */
*practica 1
Ejercicio 1 Un profesor, algo despistado, se l´ıa siempre al contar cu´antos de sus estudiantes han
suspendido, cu´antos han aprobado, cu´antos tienen notable y cu´antos sobresaliente. El rango
de nota num´erica para estas calificaciones es el habitual:
Rango de notas Calificaci´on
0.0 .. 4.99 Suspenso
5.0 .. 6.99 Aprobado
7.0 .. 8.99 Notable
9.0 .. 10 Sobresaliente
Con el fin de ayudarle, lo que se propone es escribir un programa que lea una serie de notas
num´ericas por teclado y que calcule cu´antos suspensos, cu´antos aprobados, cu´antos notables
y cu´antos sobresalientes hay. Se asume que la serie de notas finaliza cuando se introduce un
valor negativo.
Ejercicio 2 El profesor, empe˜nado en demostrar que es realmente despistado, a veces se equivoca
y teclea notas un tanto “originales”. Vamos, valores como 567 (´o 20 ´o 94 ´o 12.75) que est´an
8 ITIS IS04: Pr´actica 1. Condicionales y Bucles (I)
fuera del rango de las notas. Eso, por no hablar de las veces que introduce un valor negativo
por equivocaci´on y no porque quiera finalizar.
Modificar el programa anterior para que repita la lectura de la nota hasta que se introduzca un
valor dentro del rango y que se asegure de que el usuario realmente quiere finalizar (“Are you
sure?”

de leer una nota correcta y seguir el proceso.
Ejercicio 3 Al profesor ya le va mucho mejor con el programa. Tanto, que ya critica su funcionamiento:
le har´ıa ilusi´on que, adem´as de contar suspensos, aprobados, notables y sobresalientes,
calculase la media de las notas, la media de los suspensos y la media de todos los que superan
la asignatura.
Modificar el programa anterior para que permita, adem´as, realizar esos tres nuevos c´alculos.
Ejercicio 4 La ´ultima modificaci´on os la proponemos nosotros directamente y dejamos de echarle
la culpa a un profe imaginario (que bastante ten´eis con los reales

anterior para que pregunte al usuario qu´e proceso se debe realizar con las notas que ir´a introduciendo
por teclado:
opci´on 1 : Contar notas por rango,
opci´on 2 : Calcular media global, media de suspensos y media de aprobados,
opci´on 3 : Calcular la nota m´as alta y la nota m´as baja,
opci´on 4 : Fin de programa.
El usuario podr´a ejecutar los procesos cuantas veces quiera; al elegir la opci´on 4 finaliza la
ejecuci´on del programa.
Hay que escribir un programa que lea qu´e opci´on se desea ejecutar y realice el proceso adecuado,
hasta que el usuario indique que desea finalizar. Por supuesto, no estar´ıa de m´as comprobar
que el usuario introduce una opci´on de proceso correcta (dentro del rango 1–4).