Boletı́n de ejercicios de la asignatura de INFORMÁTICA para la realización de las prácticas de laboratorio Escuela Técnica Superior de Ingenierı́a Geodésica, Cartográfica y Topográfica (UPV) Pedro Alonso Jordá Fernando Garcı́a Granada Miguel Vicente Ripollés {palonso,fgarcia,mvicente}@dsic.upv.es Curso 2003-2004 Índice 1. Ejercicios del Tema 2: Elementos básicos de un programa 2 2. Ejercicios del Tema 3: Entrada y salida en C 2 3. Ejercicios del Tema 4: Expresiones 4 4. Ejercicios del Tema 5: Estructuras de Control 6 5. Ejercicios del Tema 6: Descomposición Mudular 11 6. Ejercicios del Tema 7: Vectores 12 1 2 1. Ejercicios del Tema 3: Entrada y salida en C 2 Ejercicios del Tema 2: Elementos básicos de un programa Ejercicio 2.1. Declarar la variable a como real de 32 bits, la variable b como real de 64 bits, la variable c como entera sin signo, la variable d como entero largo y la variable e como carácter. Ejercicio 2.2. Dadas dos variables a y b reales de 64 bits realizar un programa en C que intercambie sus valores. Realizar la traza. Ejercicio 2.3. Realizar un programa en C que, dadas tres variables a, b y c enteras o reales, intercambie entre sı́ sus valores del modo siguiente: b tome el valor de a, c tome el valor de a y a tome el valor de c sin utilizar variables auxiliares. Realizar la traza para comprobarlo. Ejercicio 2.4. Escribir una declaración apropiada para cada una de las siguientes situaciones: 1. dos punteros cuyos objetos sean las variables enteras i y j, 2. un puntero a una variable real y otro a una en doble precisión. Ejercicio 2.5. ¿Cuáles son los valores de a, b y c después de la ejecución del siguiente programa? Realizar una traza. main() { int a; char b; float c; a = 0; b = ’J’; c = 1.12; } 2. Ejercicios del Tema 3: Entrada y salida en C Ejercicio 3.1. ¿Qué imprimirá el siguiente programa? void main() { int a=3, b=4; a==b; printf ("%d", a); } Ejercicio 3.2. ¿Qué imprimirá el siguiente programa? void main () { int a=3, b=4, c=5; a=b==c; printf ("%d %d %d", a,b,c); } Ejercicio 3.3. ¿Qué imprimirá el siguiente programa? void main() { int a=1, b=2, c=3; printf ("%d", a+b==c); } Boletı́n de ejercicios de INFORMÁTICA 2 Ejercicios del Tema 3: Entrada y salida en C 3 Ejercicio 3.4. ¿Qué imprimirá el siguiente programa? void main() { int a=53, b=47, c; c = a&&b; printf ("%d", a+b==c); } Ejercicio 3.5. ¿Cuál es la salida del siguiente programa? void main() { int a=1; int b=2; int c; c = (a==b) && (a==1); printf ("%d\n", c); c = (a=b) && (a==1); printf ("%d\n", c); } Ejercicio 3.6. Implementar un programa que calcule la temperatura en grados centı́grados a partir de la temperatura en grados Fahrenheit. La fórmula es la siguiente: C = 5/9(F + 32). Ejercicio 3.7. Implementar un programa que pida dos números al usuario, x e y y, a partir de éstos, calcule: a) x + y b) (x + y)x c) xx + yy Ejercicio 3.8. Implementar un programa que pida 3 datos de tipo real y visualice cuántos datos ha leı́do y cuáles son, además de su suma. Ejercicio 3.9. Implementar un programa que pida 3 datos de tipo carácter y visualice cuántos datos ha leı́do y cuáles son. Ejercicio 3.10. Implementar un programa que calcule los intereses producidos y el capital total acumulado de una cantidad c, invertida a un interés r (en tanto por cien) durante t dı́as. La fórmula utilizada para el cálculo de intereses es: I= c×r×t . 360 × 100 Ejercicio 3.11. Implementar un programa que calcule el volumen de una esfera, que viene dado por la fórmula: 4 v = pr3 . 3 Ejercicio 3.12. Implementar un programa que evalúe el polinomio: 3x5 − 5x3 + 2x − 7 . Boletı́n de ejercicios de INFORMÁTICA 3 Ejercicios del Tema 4: Expresiones 4 Ejercicio 3.13. Implementar un programa que evalúe el polinomio ax5 − bx3 + cx − d donde a, b, c y d son coeficientes introducidos por el usuario. Ejercicio 3.14. Implementar un programa que visualice la frase Mais val donar que mendicar tot dia de la siguiente forma: Mais val donar que mendicar tot dia Ejercicio 3.15. Implementar un programa que realice las siguientes acciones: 1. escriba una variable long int en un ancho de 5 caracteres ajustado a la izquierda, y 2. escriba una variable real sin notación exponencial, con 3 decimales en un ancho de 7 caracteres y justificado a la derecha. Ejercicio 3.16. Implementar un programa que lea dos números, calcule e imprima su suma, resta, producto y división. Ejercicio 3.17. Implementar un programa que visualice el siguiente menú por pantalla: El 1. 2. 3. 4. 5. 6. programa permite: Listar los elementos del fichero Ordenar los elementos del fichero A~ nadir elementos al fichero Borrar elementos del fichero Consultar el fichero Modificar elementos del fichero Ejercicio 3.18. Implementar un programa que calcule el salario neto de un trabajador en función del número de horas trabajadas, precio de la hora de trabajo considerando unos descuentos fijos al sueldo en concepto de impuestos de un 20 %. sueldo bruto = no horas × precio hora 100 − descuentos fijos sueldo neto = sueldo bruto × 100 3. Ejercicios del Tema 4: Expresiones Ejercicio 4.1. Calcular el resultado de las siguientes expresiones: int p, q, r; p=12; q=3; r=2; 1. p%q 2. p/q 3. p%q/r Boletı́n de ejercicios de INFORMÁTICA 3 Ejercicios del Tema 4: Expresiones 5 4. p/q%r Ejercicio 4.2. Evalúa las siguientes expresiones: 1. 3.5/0.7/0.5 2. ’a’!=’A’&&7 3. 3+2&&5 4. 11||9%4 5. ’M’!=’m’ 6. ’M’>=’m’ Ejercicio 4.3. Indica si los valores de e y f son iguales en el siguiente programa: void main() { int a=2, b=3, c=6, d=1, e, f; e = a*b==c*d; f = a*(b==c)*d; } Ejercicio 4.4. Si a y b se declaran de la siguiente forma: int a=1, b=2; ¿Cuál será el resultado de las siguientes instrucciones? 1. a = a+(b==3); 2. a = a+b==3; Ejercicio 4.5. Evaluar las siguientes expresiones: 1. ((3+2)*2-15)/2*5 2. 5-2>4 && !(0.5==0.5) Ejercicio 4.6. Evaluar las expresiones siguientes, dadas las siguientes variables y constantes: X=1 Y=4 Z=10 PI=3.14 E=2.7 1. 2*X+0.5*Y-1/5*Z 2. X-Y+Z+PI+E+2.576689 3. -3*X+2*Y-1/2*Z 4. 2*Y*Y-6*Y+12 5. PI*X*X>Y || 2*PI*X<=Z 6. (2*Y)-6*Y+12 7. E*(X-1)/(X*Z)/(X/Z) 8. (Y*2*X-6*(Z/10))/2 9. X>3 && Y==4 || X+Y<=Z 10. X>3 && (Y==4 || X+Y<=Z) 11. (-X+(Z*Z-4*X+Y))/2/X Boletı́n de ejercicios de INFORMÁTICA 4 4. Ejercicios del Tema 5: Estructuras de Control 6 Ejercicios del Tema 5: Estructuras de Control Ejercicio 5.1. Implementar un programa en C que dados tres números enteros calcule el máximo y el mı́nimo. Ejercicio 5.2. Implementar un programa en C que permita resolver el siguiente problema: determinar la cantidad total a pagar por una llamada telefónica, teniendo en cuenta lo siguiente: toda llamada que sea menor o igual de 5 pasos tiene un coste de 10 euros, cada paso adicional a partir de los 5 primeros cuesta 5 euros. Ejercicio 5.3. ¿Qué se visualiza en los siguientes programas? main () { int i; i=0; while (i<6) { printf ("El valor de i es %d \n", i); i=i+1; } } main () { int i; i=0; while (i<6) { i=i+1; printf ("El valor de i es %d \n", i); } } Ejercicio 5.4. Implementar un programa en C que lea un número entero correspondiente a un mes del año, validando la corrección del mismo. El programa debe solicitar un nuevo número si el valor introducido no está en el intervalo [1, 12]. Ejercicio 5.5. Escribir un programa en C para calcular el cociente y resto de la división entera de dos números enteros, utilizando para ello la operación de resta o sustracción. Ejercicio 5.6. Escribir un programa en C para determinar si un número entero es primo o no. Ejercicio 5.7. Escribir un programa en C para calcular la suma de los N primeros números enteros. Ejercicio 5.8. Realizar un programa en C para calcular, independientemente, la suma de los números pares e impares comprendidos entre 1 y 200. Ejercicio 5.9. Escribir un programa en C que lea una serie de números positivos y distintos de 0 y obtenga el mayor de ellos. Introducir un número negativo para detectar el final de la serie numérica. Ejercicio 5.10. Escribir un programa en C para calcular y visualizar la suma y el producto de los números pares comprendidos entre 20 y 400, ambos inclusive. Boletı́n de ejercicios de INFORMÁTICA 4 Ejercicios del Tema 5: Estructuras de Control 7 Ejercicio 5.11. Escribir un programa en C para calcular la suma de los cuadrados de los 100 primeros números naturales. Ejercicio 5.12. Escribir un programa en C que determine, en un conjunto de 100 números naturales: ¿Cuántos son menores de 15? ¿Cuántos son mayores de 50? ¿Cuántos están comprendidos entre 25 y 45? Ejercicio 5.3. Implementar un programa en C que lea 100 números enteros y calcule la media de los números positivos y la de los negativos. Ejercicio 5.14. Implementar un programa en C que, dados dos números enteros, devuelva si uno es divisor del otro. (Hay que detectar cual es el más pequeño; no se puede utilizar la operación de división ni de resto; se suponen que los dos números son > 0). La salida del algoritmo debe ser del tipo: xxx [no] es divisor de yyy Ejercicio 5.15. Se dispone de una lista de 100 objetos ordenados por orden creciente de precio. Sabiendo que cada objeto es 50 euros más caro que el anterior, y que el primer objeto cuesta X euros determinar el precio total a pagar por los 100 objetos. Ejercicio 5.16. Se dispone de una lista de N aviones numerados desde 1 a N y M aeropuertos numerados del 1 al M . Cada avión sólo puede aterrizar en un aeropuerto cuyo número sea igual al del avión o múltiplo de éste. Determinar en qué aeropuertos puede aterrizar cada avión. Ejercicio 5.17. El siguiente programa en C lee un número N y devuelve un número M . Describir en dos lı́neas cuál es la relación que existe entre N y M y poner un ejemplo de un dato de entrada y otro de salida. Realizar una traza para N = 2341. main () { int A, B, D, N, M=0, i=0, j, k; printf ("Introduce un numero entero: "); scanf ("%d", &N); A=N; while ((A/10) != 0) { A=A/10; i=i+1; } B=N; for (j=i; j>= 0; j--) { D=1; for (k=0; k<j; k++ ) D=D*10; M=M+(B%10)*D; B=B/10; } printf (" El resultado es %d", M); } Boletı́n de ejercicios de INFORMÁTICA 4 Ejercicios del Tema 5: Estructuras de Control 8 Ejercicio 5.18. Escribir un programa en C que lea las calificaciones de los alumnos de una determinada asignatura hasta que el usuario introduzca una calificación negativa, y al final escriba el número de aprobados, el número de suspendidos, y la calificación media. Ejercicio 5.19. Implementar un programa en C que, dado un número entero N mayor que cero, calcule los múltiplos de 3 que hay entre 3 y N y, para cada múltiplo, calcule los divisores del mismo. Ejemplo: para N = 10 el resultado será múltiplo=3 divisores del 3 = {1,3} múltiplo=6 divisores del 6 = {1,2,3,6} múltiplo=9 divisores del 9 = {1,3,9} Ejercicio 5.20. Escribir un programa en C que dado un número entero N 1, devuelva otro número entero N 2 que sea el resultado de eliminar la primera y última cifra de N 1. (Nota: Si N 1 tiene 2 cifras o una sola, entonces N 2 deberá ser 0) Ejemplos: N1=42635 N2=263 N1=23 N2=0 Ejercicio 5.21. Se dispone de un conjunto de N alumnos y para cada uno de ellos las calificaciones correspondientes a 7 asignaturas (numeradas del 1 al 7). Implementar un programa en C para calcular el tanto por ciento de aprobados de cada asignatura. Ejercicio 5.22. Una persona dispone de una cantidad de X euros que quiere repartir a un conjunto de personas. A cada persona le da una cantidad de dinero proporcional a la edad de la misma; ası́ por ejemplo, si una persona tiene 17 años recibirá 1.700 euros y si tiene 32 años, recibirá 3.200 euros. El problema consiste en hacer un programa que devuelva el número de personas que podrán recibir una cantidad de dinero. Nota: Cuando la cantidad de dinero ya no es suficiente para dársela a una persona, se supone que no existen más personas y que, por tanto, el algoritmo finaliza. Ejercicio 5.23. Se dispone de un conjunto de N familias, cada una de las cuales tiene un número de hijos. Escribir un programa en C capaz de averiguar la media de edad de los hijos de todas las familias. Ejercicio 5.24. Un número se dice que es capicúa si leı́do de derecha a izquierda da el mismo resultado que leı́do de izquierda a derecha. Por ejemplo, los números 22, 343, 5665 o 12321 son capicúas. Implementar un programa en C que lea desde teclado un número entero mayor de 9 y devuelva si el número es capicúa o no. Ejercicio 5.25. Un autobús hace un recorrido por una ciudad desde un punto inicial donde suben N pasajeros hasta un punto final donde descienden todos. El autobús realiza X paradas intermedias. Se sabe que en la primera parada se suben 10 personas, y en las siguientes paradas suben siempre 10 personas más que en la parada anterior. Además, en cada una de las paradas desciende el 5 % de la gente del autobús (sin contar los que suben en dicha parada). ¿Cuántas personas llegarán hasta el final del trayecto? Ejercicio 5.26. Una agencia de viajes lanza una oferta de 10 viajes para el verano del 2002. La agencia desea poner en marcha sólo aquellos viajes en los que el número de personas menores de 10 años no supere el 10 % de la gente apuntada a dicho viaje. Realizar un programa en C que, para cada viaje, lea las edades de las personas inscritas en ese viaje (no se puede preguntar a priori el número de personas inscritas en el viaje) y determine si se pone en marcha o no, escribiendo el resultado en pantalla. Boletı́n de ejercicios de INFORMÁTICA 4 Ejercicios del Tema 5: Estructuras de Control 9 Ejercicio 5.27. Un número entero se puede descomponer en una suma de números primos. Por ejemplo el número 8 se puede poner como 7+1, el número 9 como 7+2, el número 6 como 5+1 y un número primo se descompone únicamente en sı́ mismo. Escribe un programa en C que devuelva los números primos en los que se puede descomponer un número entero. Nota: Algunos números como el número 9 también se podrı́a descomponer como 3+3+3 o 5+3+1, pero el algoritmo debe usar siempre los números primos mayores posibles y el menor número de ellos. Ejercicio 5.28. Dada una serie de N números enteros de 2 o más cifras introducidos desde teclado, escribir un programa que devuelva cuántos de los números contienen un 0 en alguna de sus cifras. Ej: 30, 303, 3003, 1031. Ejercicio 5.29. En una gran área metropolitana el ayuntamiento ha decidido imponer una serie de restricciones al uso de vehı́culos para paliar los problemas de la contaminación. De este modo, los vehı́culos con matrı́cula par sólo podrán circular los dı́as pares del año y los vehı́culos con matrı́cula impar los dı́as impares del año. Sabiendo que una persona tiene un coche de matrı́cula par y que sólo lo emplea los domingos, se pide un programa que devuelva cuántos y qué dı́as del año podrá utilizar el coche. Para ello, se conoce la siguiente información: el primer domingo del año es el 4 de Enero, los meses impares tienen 31 dı́as y los pares 30 dı́as (se considera el mes de Febrero como un mes par de 30 dı́as). Ejercicio 5.30. Implementar un programa en C que calcule el máximo, el mı́nimo y la media de una lista indefinida de números enteros positivos introducidos desde el teclado. En el caso de introducir un número negativo dicho número deberá ser rechazado indicando el motivo (a través de la pantalla) por el que ha sido rechazado (”es negativo”). Ejercicio 5.31. Implementar un programa en C que lea un número entero N , tal que: 1. verifique que N > 0, 2. dibuje un cuadrado de lado N como el de los ejemplos que aparecen a continuación: N=1 * N=2 ** ** N=3 *** * * *** N=4 **** * * * * **** N=5 ***** * * * * * * ***** Ejercicio 5.32. Escribir un programa en C que, dado un número N , genere la siguiente secuencia de números: N=1 N=2 N=3 N=4 N=5 1 1, 1, 2 1, 2, 1, 2, 3 2 2, 3 2, 3, 4 3 2, 3, 4, 5 3, 4 Boletı́n de ejercicios de INFORMÁTICA 4 Ejercicios del Tema 5: Estructuras de Control 10 Ejercicio 5.33. Dado un número entero N > 0, escribir un programa que devuelva el siguiente resultado: 2 veces el número N , 3 veces el número N − 1, 4 veces el número N − 2, 5 veces el número N − 3, ... N + 1 veces el número 1. Ejemplo: para N = 5, el programa debe escribir la siguiente secuencia de números: 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1. Ejercicio 5.34. Dado un número entero N > 0, escribir un programa que devuelva el siguiente resultado: N veces el número N , N − 1 veces el número N − 1, N − 2 veces el número N − 2, ... 1 vez el número 1. Ejercicio 5.35. Dado un número N , escribir un programa en C que genere todos los números pares múltiplos de 7 que hay entre 1 y N . Ejercicio 5.36. Escribir un programa que genere la secuencia de números: 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, . . . , 1, 2, 3, . . . Ejercicio 5.37. Escribir un programa en C que sea equivalente al siguiente fragmento de programa: scanf ("%d", &a); switch (a) { case 2: case 5: case 8: case 11: printf (’A’); break; case 3: case 6: case 9: case 12: printf (’B’); break; case 4: case 7: case 10: case 13: printf (’C’); break; } Ejercicio 5.38. Dado el siguiente programa en C: Boletı́n de ejercicios de INFORMÁTICA 5 Ejercicios del Tema 6: Descomposición Mudular 11 main () { int a,b,i,aux,resultado; printf ("Introduce dos numeros enteros "); scanf ("%d%d", &a, &b); if (a > b) { aux=a; a=b; b=aux; } resultado=1; for (i=a+1; i<=b; i=i+1) { resultado=resultado*i; } printf ("El resultado es: %d \n", resultado); } responder a las siguientes cuestiones: ¿Cuál serı́a el resultado del programa si los datos introducidos fuesen 3 y 6?. Demostrarlo con una traza. ¿Y si los datos introducidos fuesen 7 y 7 ?. No se pide traza. ¿El resultado del programa depende del orden en que son introducidos los datos?. Responder SI o NO y explicar brevemente por qué. Expresar con una fórmula qué cálculo hace este programa cuando a <= b. 5. Ejercicios del Tema 6: Descomposición Mudular Ejercicio 6.1. Escribir un programa en C que realice el cálculo del área y la longitud de una circunferencia en función del radio leı́do desde teclado. Escribir dos funciones distintas, una para el cálculo del área y otra para la longitud. Area = π × r2 Circunf erencia = 2 × π × r Ejercicio 6.2. Escribir un programa en C que lea un carácter desde teclado y determine si se trata de uno de los dı́gitos del 0 al 9. Escribir el programa de tal forma que sirva para leer varios caracteres diferentes desde teclado. Ejercicio 6.3. Escribir un programa en C que calcule el máximo común divisor de más de 2 números basado en una función mcd (máximo común divisor de 2 números). Utilizar el algoritmo de Euclides para implementar la función mcd. Ejercicio 6.4. En una empresa hay 5 secciones diferentes (s1, s2, . . . , s5) cada una de las cuales tiene un número indeterminado de trabajadores. Realizar un programa en C que solicite el número de horas trabajadas para cada trabajador (el máximo número admisible de horas trabajadas será de 50 h.; en caso de introducir un número mayor debe ser rechazado e introducido de nuevo indicándose el motivo). Con esta información se debe calcular la nómina de cada trabajador teniendo en cuenta las siguientes consideraciones: Las 30 primeras horas se pagan a 1000 pts/hora. Boletı́n de ejercicios de INFORMÁTICA 6 Ejercicios del Tema 7: Vectores 12 Las siguientes 10 horas se pagan a 1500 pts/hora. Las restantes 10 horas se pagan a 2000 pts/hora. Sobre el sueldo resultante se aplican los siguientes impuestos: • Hasta las primeras 30000 pts. un 10 %. • Al resto del sueldo un 15 %. Para cada trabajador se deberá imprimir el sueldo bruto, los impuestos y el sueldo neto. Además, debe decirse qué sección ha pagado más impuestos, ası́ como la que más horas ha trabajado. Ejercicio 6.5. Escribir un programa en C que lea del teclado un carácter y un número entero n y escriba en pantalla dicho carácter las veces que indique el número leı́do. El número deberá cumplir 0 < n < 80. Ejercicio 6.6. Escribir un programa en C que lea dos números mayores que cero, tal que el primero sea menor o igual que el segundo, e imprima por pantalla las tablas de multiplicar, del 1 al 10, de los números comprendidos entre los dos dados (incluidos ellos mismos). Ejercicio 6.7. (Tiro parabólico) Escribir un programa en C que vaya indicando por pantalla la posición X e Y de un móvil que se dispara con un ángulo ang sobre la horizontal y a una velocidad inicial V0 , sabiendo que en cada instante: X = V0 × cos(ang) × t , Y = V0 × sin(ang) × t − 1 × g × t2 , 2 siendo g = 9,8. Ejercicio 6.8. Escribir un programa en C que lea un conjunto de números enteros desde teclado hasta que se introduzca un cero y calcule con funciones: el máximo y mı́nimo de dicho conjunto de datos, el número de negativos y positivos introducidos, el sumatorio y la media de dichos números. Ejercicio 6.9. Escribir un programa en C que calcule X n , tal que X es un número real y n un número entero. Escribir el programa sin utilizar la función de librerı́a pow. 6. Ejercicios del Tema 7: Vectores Ejercicio 7.1. El algoritmo de la cubeta permite ordenar eficientemente un vector de números enteros cuyos valores estén comprendidos entre 1 y un valor máximo N . Para ello, se dispone de un vector auxiliar de rango N (cuyas componentes se supone que ocupan las posiciones 1 a N ). El algoritmo consiste en recorrer los elementos del vector a ordenar utilizando la componente i-ésima del vector auxiliar para contar el número de veces que el valor i aparece en el vector a ordenar. Una vez hecho esto basta recorrer el vector auxiliar mostrando por pantalla la posición de cada componente tantas veces como indique el valor de dicha componente. Ejemplo: Se dispone de un vector auxiliar de N = 5 componentes: Vector a ordenar: 2 5 1 4 2 1 2 Vector auxiliar resultante: 2 3 0 1 1 Boletı́n de ejercicios de INFORMÁTICA 6 Ejercicios del Tema 7: Vectores 13 El valor 1 aparece dos veces en el vector a ordenar y por tanto la componente en la posición 1 del vector auxiliar resultante vale 2; el valor 2 aparece tres veces en el vector a ordenar y por tanto la componente en la posición 2 del vector auxiliar resultante vale 3; el valor 3 no aparece en el vector a ordenar y, consecuentemente, el valor en la tercera posición del vector auxiliar es 0; y ası́ sucesivamente. Escribir un programa en C para implementar dicho algoritmo. Ejercicio 7.2. Escribir un programa en C que lea una serie de números enteros positivos hasta que el usuario introduzca un número entero negativo y los almacene en un vector. Posteriormente, el programa tiene que reorganizar los números introducidos en el vector de manera que los números impares ocupen las primeras posiciones del mismo y los números pares ocupen las siguientes. Por último, el programa debe imprimir por pantalla los elementos del vector resultante. Por ejemplo: Dada la entrada 1 4 2 5 7 2, una salida válida es 1 5 7 4 2 2. Dada la entrada 9 6 4 1 7, una salida válida es 9 1 7 6 4. El orden de los números impares entre sı́ es indiferente, ası́ como el de los números pares. El programa debe reorganizar los datos sobre el mismo vector en que se leen, sin emplear un vector auxiliar adicional. Ejercicio 7.3. Escribir un programa en C que lea las marcas de 100 participantes en una carrera de maratón, calcule la media, determine cuantos corredores están por encima de la media y cuántos por debajo, y calcule la desviación (cuadrado de la diferencia) de cada corredor con respecto a la media. Ejercicio 7.4. Dado un vector de N caracteres que contiene una frase, averiguar cuántas palabras contiene dicha frase, sabiendo que cada palabra está separada por un sólo blanco. Asumir que el vector ya tiene almacenada la frase correspondiente. Ejercicio 7.5. Escribir un programa en C que lea un número entero x > 0 que no sea múltiplo de 10 y, posteriormente, genere un vector de enteros donde se introduzcan cada una de las cifras del número x, de modo que el dı́gito más significativo se almacene en el primer elemento del vector, el siguiente en el segundo elemento del vector etc., tal como se indica en el ejemplo. x = 5143 Vector → 5 1 4 3 0 0 0 Nota1: No se puede leer el número de cifras de x. Nota2: Declarar el vector con un rango fijo N e inicializarlo previamente a cero. Después de introducir cada una de las cifras del número, el resto de los elementos del vector se quedan a 0. Nota3: Sólo se puede utilizar un vector. Ejercicio 7.6. En una carrera de maratón hay 100 corredores con dorsales numerados del 1 al 100. Se sabe que los dorsales acabados en 1 pertenecen al equipo 1, los terminados en 2 al equipo 2, . . . , y los dorsales terminados en 0 pertenecen al equipo 10. Sabiendo que cada corredor tiene su marca personal de tiempo para la maratón, y que el programa va leyendo las marcas de cada uno de los corredores (dorsal 1, dorsal 2, . . . ), se pide imprimir el tiempo total de cada equipo. Ejercicio 7.7. Un vector de N caracteres contiene el nombre completo de una persona, estando éste formado por uno o varios nombres y dos apellidos. Se pide un programa en C que devuelva en Boletı́n de ejercicios de INFORMÁTICA 6 Ejercicios del Tema 7: Vectores 14 otro vector los apellidos de dicha persona y las iniciales de su(s) nombre(s) tal y como se indica a continuación: El vector original contiene: Jose Luis Garcia Pont (relleno a blancos hasta N ). Se debe obtener otro vector que contenga: Garcia Pont, J.L. Nota 1: Una persona puede tener uno o más nombres. Nota 2: Asumir que no existen nombres ni apellidos del tipo ”de . . . ” de las . . . , ”de la . . . ”. Ejercicio 7.8. Dados dos vectores de números enteros v1 y v2 de dimensiones N y M respectivamente, cuyos elementos se encuentran en orden creciente, hacer un programa en C que almacene en otro vector el conjunto de elementos resultante de ordenar en orden creciente todos los elementos de los dos vectores originales (la dimension del vector resultante será N + M ). Nota: Suponer que todos los elementos de los vectores v1 y v2 contienen un valor, es decir, existen N números enteros en el vector v1 y M números enteros en el vector v2 . Ejercicio 7.9. Dado un vector de N caracteres (letras y blancos), escribir un programa en C que sustituya en el mismo vector los caracteres ”ny” que encuentre por una ’ñ’. Ejercicio 7.10 Un palı́ndromo es una palabra o secuencia de palabras que se lee igual de izquierda a derecha que de derecha a izquierda. Ejemplos de palı́ndromos son: ”anilina”, ”reconocer”, ”dabale arroz a la zorra el abad”, etc. Se pide un programa en C que, dado un vector de rango N que contiene un conjunto de caracteres, determine si la frase almacenada en el vector es o no un palı́ndromo. No se puede utilizar un vector auxiliar. Nota: Se asume que el vector de caracteres se compone de una o más palabras (en letras minúsculas) y blancos. Los blancos servirán de separadores entre palabras (uno o más blancos entre cada par de palabras) y para completar los N caracteres del vector. Boletı́n de ejercicios de INFORMÁTICA