Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Suma de N primeros números Enunciado Realizar un programa que pida un número N de tipo entero por teclado. Se usará una función para calcular el valor de la suma de los N primeros números enteros, usando un parámetro de tipo entero para indicar el valor de N, y retornará la suma. El programa principal usará la función para obtener el resultado y mostrarlo por pantalla. Si el número es negativo, no se realiza la llamada a la función, y se muestra por pantalla "El número es negativo". La suma de los números se hará de forma algorítmica con un bucle for. Ejemplo de ejecución Introduzca n: -3 El numero es negativo. Introduzca n: 5 La suma de los 5 primeros numeros es: 15 Solución o soluciones #include <stdio.h> int suma_nprimeros(int n) { int i,suma=0; for(i=1;i<=n;i++) suma += i; return suma; } void main() { int n,suma; printf("Introduzca n:"); scanf("%d",&n); if(n<0) printf("El numero es negativo.\n"); else { suma=suma_nprimeros(n); printf("La suma de los %d primeros numeros es: %d.\n",n,suma); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Tabla de valores de una función Enunciado Programar una función que admita como parámetros 2 valores enteros a y b. La función calculará la expresión a·b-a-b y retornará el valor resultante. La función principal debe pedir un número N entero al usuario, y mostrar por pantalla el resultado de aplicar la función a varios valores. Para el valor a se emplearán los valores del 0 al 10, y para el valor b se usará el número N que proporcionó el usuario. Se pondrá cada resultado en una línea, indicando el valor de a, y el valor resultante de la función, separados por " --> " Ejemplo de ejecución Introduzca n: 3 0 --> -3 1 --> -1 2 --> 1 3 --> 3 4 --> 5 5 --> 7 6 --> 9 7 --> 11 8 --> 13 9 --> 15 10 --> 17 Solución o soluciones #include <stdio.h> int funcion(int a,int b) { return (a*b-a-b); } void main() { int i,n,valor; printf("Introduzca n:"); scanf("%d",&n); for(i=0;i<=10;i++) { valor = funcion(i,n); printf("%d --> %d\n", i, valor); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Calcular IVA Enunciado Realizar un programa para calcular el IVA sobre un precio. El programa principal debe pedir un precio al usuario (de tipo float), y mostrar el precio total con el IVA incluido (se considera el caso del 16%). El programa se repite en bucle hasta que el usuario introduce un precio negativo, en ese caso el programa termina. Para calcular el total, se pide también programar una función "precio_con_iva" que admite 2 parámetros de tipo float: el precio que introduce el usuario, y el IVA como porcentaje (16% será 16). La función devolverá el precio con el IVA incluido. El programa principal usará esta función para calcular el total. Ejemplo de ejecución Introduzca n: 200 Total: 232.000000 Introduzca n: 17 Total: 17.720000 Introduzca n: -1 Solución o soluciones #include <stdio.h> float precio_con_iva(float precio, float iva_perct) { float iva; iva=precio*(iva_perct/100.0); return (precio+iva); } void main() { float precio=0.0; float total; while(1) { printf("Introduzca precio: "); scanf("%f",&precio); if(precio < 0.0 ) return; total=precio_con_iva(precio,16); printf("Total: %f \n", total); } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Conversión de temperaturas Enunciado Realizar un programa para realizar la conversión de temperaturas. El programa pide al usuario que introduzca un valor y una letra, en la misma línea (ver ejemplo, se recomienda usar scanf). El valor será de tipo float. La letra indica la escala en la que se introduce esa temperatura. Si la letra es 'C', la temperatura se convertirá de grados centígrados a Fahrenheit. Si la letra es 'F', la temperatura se convertirá de grados Fahrenheit a grados Centígrados. El programa se repetirá hasta que el usuario introduzca como letra una 'Z'. Si el usuario introduce una letra distinta a las mencionadas, lo indicará con un mensaje de error. Se usarán 2 funciones cent_fahr y fahr_cent, para convertir de una unidad a otra. Estas funciones aceptarán un parámetro (la temperatura en una escala) y retornarán el valor en la otra escala. (La relación de escalas corresponde a C= (F-32) / 1.8 ) Ejemplo de ejecución Introduzca temperatura y letra: 100 C Temperatura: 212.000000 F Introduzca temperatura y letra: 23 F Total: -5.000000 C Introduzca temperatura y letra: 199 j Error , letra no valida Introduzca temperatura y letra: 199 Z Fin Solución o soluciones #include <stdio.h> float cent_fahr(float cent){ float fahr_cent(float fahr){ return ((cent*1.8)+32); return ((fahr-32)/1.8); } } void main() { float temper; char escala; while(1) { printf("Introduzca temperatura y letra: "); scanf("%f %c",&temper,&escala); switch(escala) { case 'Z': printf("Fin\n"); return; case 'F': printf("Temperatura: %f C\n",fahr_cent(temper)); break; case 'C': printf("Temperatura: %f F\n",cent_fahr(temper)); break; default: printf("Error, letra no valida\n"); } } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Máximo de 3 Enunciado Programar una función maximo3 para calcular el máximo de tres valores a , b y c de tipo entero, que se admiten como parámetros y se retorna el valor del mayor. Esta función usará a su vez a otra función maximo2 (que también debe programarse) que calcula el máximo entre 2 valores a y b, que se pasan como parámetros a la función. El programa principal pedirá al usuario 2 valores, y usará la función maximo3 para calcular el mayor entre 0 y esos dos valores. Ejemplo de ejecución Introduzca 2 numeros: 2 5 El mayor es: 5 Introduzca 2 numeros: -2 -7 El mayor es: 0 Solución o soluciones #include <stdio.h> int maximo2(int a,int b) { int mayor; if(a>=b) mayor=a; else mayor=b; return mayor; } int maximo3(int a,int b,int c) { int mayor; mayor=maximo2(a,maximo2(b,c)); return mayor; } void main() { int n1,n2, maximo; printf("Introduzca 2 numeros:"); scanf("%d %d" ,&n1,&n2); maximo=maximo3(0,n1,n2); printf("El mayor es: %d\n",maximo); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Líneas de asteriscos con función Enunciado Programar una función que se encarga de pedir un valor entero por teclado al usuario. Si el valor es negativo o 0, vuelve a pedirlo. Cuando el valor es mayor que cero la función retorna ese valor. Programar una función que muestra una línea de asteriscos '*' por pantalla. La función admitirá un parámetro que será el número de asteriscos. La línea se finalizará con un carácter de fin de línea. En el programa principal, usar las funciones anteriores para: pedir un número entero y mostrar varias líneas de asteriscos, de forma que la primera línea tendrá un asterisco, e irá sumando un asterisco más en cada línea hasta alcanzar el número introducido por el usuario. Ejemplo de ejecución Introduzca un numero: -2 Introduzca un numero: 0 Introduzca un numero: 4 * ** *** **** Solución o soluciones #include <stdio.h> int entrada() { int val=-1; while(val<=0) { printf("Introduzca un numero: "); scanf("%d",&val); } return val; } void asteriscos(int num) { int i; for(i=1;i<=num;i++) printf("*"); printf("\n"); } void main() { int i,num; num=entrada(); for(i=1;i<=num;i++) asteriscos(i); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Calculo de los términos impares de una serie Enunciado i+2 con i = 1,....., n a 10 través de una función con el siguiente prototipo, siendo n un número entero que se solicita al usuario desde el main() tantas veces como sea necesario, hasta que el usuario teclee un numero mayor que cero. Calcular los n primeros términos impares de la serie: a i = float TerminoN (int); Ejemplo de ejecución Cuandos terminos quieres calcular? -4 Cuandos terminos quieres calcular? 0 Cuandos terminos quieres calcular? 3 El termino 1 es 0.300000 El termino 3 es 0.500000 El termino 5 es 0.700000 Solución o soluciones #include <stdio.h> float TerminoN (int); void main() { int n,i; float term; do { printf("Cuandos terminos quieres calcular? "); scanf("%d", &n); } while(n<=0); for(i=1;i<n*2 ;i+=2) { term=TerminoN(i); printf("El termino %d es %f \n",i,term); } } float TerminoN (int n) { return (float)(n+2)/10; //tambien return (n+2)/10.0f; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Calculo del término n-ésimo Enunciado n ∑i Calculo el término n-ésimo de la serie: a n = i =0 a través de dos funciones con el n! siguiente prototipo. Para ello el main() solicitará un numero al usuario, realizará el calculo mediante las funciones e imprimirá por pantalla el resultado final. NOTA: El cálculo del sumatorio tiene que hacerse obligatoriamente de forma algorítmica mediante un bucle for. int SumoN (int); int FactN (int); Ejemplo de ejecución Introduce n: 5 El termino n-esimo es: 0.125 Solución o soluciones #include <stdio.h> int SumoN(int); int FactN(int); void main() { int n, a, b; printf("Introduce n: "); scanf("%d",&n); a= SumoN(n); b= FactN(n); printf("El termino n-esimo es: %f", (float) a/b); } int SumoN(int a) { int i, resu=0; for(i=0; i<=a;i++) resu+=i; return resu; } int FactN(int a) { int i, resu=1; for(i=1; i<=a; i++) resu*=i; return resu; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Distancia entre dos puntos Enunciado Realizar un programa para calcular la distancia entre dos puntos introducidos por el usuario a través de una función con el siguiente prototipo: float dist (float x1, float y1, float x2, float y2); Ejemplo de ejecución Introduce el primer punto: 1 0 Introduce el segundo punto: 0 1 Solución o soluciones #include <stdio.h> #include <math.h> float dist (float, float, float, float); void main() { float resu, x1,x2,y1,y2; printf("Introduce el primer punto: "); scanf("%f %f",&x1,&y1); printf("Introduce el segundo punto: "); scanf("%f %f",&x2,&y2); resu=dist(x1,x2,y1,y2); printf("La distancia es: %f", resu); } float dist(float a,float b,float c,float d) { return sqrt((a-b)*(a-b) + (c-d)*(c-d)); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Sumatorio desde “a” hasta “b” Enunciado b Realizar una función para retorne el valor de la siguiente suma s = ∑ ( n ⋅ i ) donde a , b i=a y n son números introducidos por el usuario. int Sumatorio (int n, int a, int b); Ejemplo de ejecución Introduce el numero: 3 Introduce a y b: 2 7 la suma es: 81 Solución o soluciones #include <stdio.h> int Sumatorio (int n, int a, int b); void main() { int a, b,num; printf("Introduce el numero: "); scanf("%d", &num); printf("Introduce a y b: "); scanf("%d %d", &a, &b); printf("la suma es: %d \n",Sumatorio (num, a, b)); } int Sumatorio(int n, int a, int b) { int i, sum=0; for(i=a; i<=b; i++) sum+=(n*i); return sum; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Suma de una serie con una función Enunciado Realizar un programa que calcule la suma de la siguiente serie utilizando una función: n 1 1 1 1 1 = 2 + 2 + 2 + ... + 2 2 1 2 3 n i =1 i suma = ∑ A la función, denominada SumaSerie, se le pasará como argumento un valor de n leído desde el teclado y devolverá la suma como valor de retorno. Finalmente, el valor de la suma será impreso en la pantalla desde la función main(). Nota: Se supondrá que el usuario introduce siempre un valor de n mayor o igual que 1. Ejemplo de ejecución Introduzca n: 100 La suma vale 1.634984 Solución o soluciones #include <stdio.h> float SumaSerie (int numero); void main() { int n; float s; printf("Introduzca n: "); scanf("%d", &n); s=SumaSerie(n); printf("La suma vale %f\n", s); } float SumaSerie (int numero) { int i; float suma=0; for(i=1;i<=numero;i++) suma+=1.0f/(i*i); return suma; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Cálculo de ab Enunciado Realizar un programa que calcule con una función, llamada potencia, el valor de ab, donde a y b son dos números enteros introducidos desde el teclado tal que a>0 y b>=0 (se supondrá que el usuario introduce dos números que cumplen estas condiciones). Nota: no se pueden utilizar funciones de la librería de matemáticas. El cálculo de ab lo realizará la función teniendo en cuenta que ab=a·a·a….a (b veces). Ejemplos de ejecución Introduzca a y b: 2 0 2 elevado a 0 vale 1 Introduzca a y b: 2 4 2 elevado a 4 vale 16 Solución o soluciones #include <stdio.h> int potencia (int base, int exponente); void main() { int a, b, p; printf("Introduzca a y b: "); scanf("%d %d", &a, &b); p=potencia(a, b); printf("%d elevado a %d vale %d\n", a, b, p); } int potencia (int base, int exponente) { int i, aux=1; for(i=1;i<=exponente;i++) aux*=base; return aux; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Aproximación del número e Enunciado Realizar un programa que calcule una aproximación del número e obtenida al sumar la siguiente serie: 10 1 1 1 1 1 = 1 + + + + ... + 1! 2! 3! 10! n =0 n! e≈∑ La suma de la serie se realizará dentro la función main(), pero hará uso de una función llamada factorial, a la cuál se le pasa como argumento el valor de n y devuelve el valor de n!. La función será llamada cada vez que haya que calcular el factorial de n. Ejemplo de ejecución El numero e vale aproximadamente 2.718282 Solución o soluciones #include <stdio.h> int factorial (int n); void main() { int i; float suma=0.0f; for(i=0;i<=10;i++) suma+=(float)1/factorial(i); printf("El numero e vale aproximadamente %f\n", suma); } int factorial (int n) { int i, aux=1; for(i=1;i<=n;i++) aux*=i; return aux; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Mínimo de tres números enteros Enunciado Realizar un programa que calcule el mínimo de tres números enteros, a, b y c, introducidos desde el teclado utilizando una función llamada minimo a la cuál se le pasan como argumentos los tres números y devuelve el mínimo de ellos, que será impreso desde la función main(). Ejemplo de ejecución Introduzca los números: 12 -3 27 El minimo de ellos es 3 Solución o soluciones #include <stdio.h> int minimo (int a, int b, int c); void main() { int a, b, c, min; printf("Introduzca los numeros: "); scanf("%d %d %d", &a, &b, &c); min=minimo(a, b, c); printf("El minimo de ellos es %d\n", min); } int minimo (int a, int b, int { if (a>b) //El mínimo if(b<c) return b; else return c; else //El mínimo if(a<c) return a; else return b; } //Tambien podria ser: int minimo (int a, int b, int { int min=a; if(b<min) min=b; if(c<min) min=c; return min; } c) es b o c es a o c c) Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: ¿Cuántos múltiplos de 7 hay entre n y m? Enunciado Hacer un programa que determine cuántos múltiplos de 7 hay entre los números enteros n y m, ambos inclusive. Los valores n y m serán introducidos desde el teclado (se supondrá que ambos números son positivos y que m es mayor o igual que n). El número de múltiplos será calculado con una función a la cuál se le pasan como argumentos los valores de n y m. El valor calculado será devuelto a la función main() e impreso en la pantalla. Ejemplo de ejecución Introduzca n y m: 10 25 Hay 2 multiplos de 7 entre 10 y 25 Solución o soluciones #include <stdio.h> int multiplosde7 (int inferior, int superior); void main () { int n, m, nmul; printf("Introduzca n y m: "); scanf("%d %d", &n, &m); nmul=multiplosde7(n, m); printf("Hay %d multiplos de 7 entre %d y %d\n", nmul, n, m); } int multiplosde7 (int inferior, int superior) { int i, contador=0; for(i=inferior; i<=superior; i++) if(i%7==0) contador++; return contador; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Máximo común divisor Enunciado Hacer un programa que determine el máximo común divisor de dos números enteros “a” y “b” que se solicitan al usuario por teclado desde el main(). Dichos números serán pasados a una función, que retorna el MCD de ambos, y el main() se encarga de sacar el resultado por pantalla. Si uno de los dos números es negativo, se muestra un mensaje de error y no se invoca la función: Ejemplo de ejecución Introduzca a y b: 18 30 El MCD es: 6 Press any key to continue Introduzca a y b: 2 -18 Error en los datos Press any key to continue Solución o soluciones #include <stdio.h> int MCD( int a, int b); void main() { int n1,n2,min; printf("Introduzca a y b: "); scanf("%d %d",&n1,&n2); if(n1 <0 || n2 <0) { printf("Error en los datos\n"); return; } min=MCD(n1,n2); printf("El MCD es: %d\n",min); } int MCD( int a, int b) { int i,mcd=1; for(i=2;i<=a;i++) { if(a%i==0 && b%i==0) mcd=i; } return mcd; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Numero combinatorio Enunciado Hacer un programa que determine el numero combinatorio “a” sobre “b”, siendo a y b números enteros que se piden al usuario por teclado desde el main(). Dichos números serán pasados a una función como parámetros, retornando dicha función el número combinatorio que tiene como expresión: a a! c= = b (a − b)! b ! Y el main() es el encargado de mostrar el resultado por pantalla. El prototipo de las funciones necesarias es: int factorial (int n); int combinatorio (int a, int b); Ejemplo de ejecución Introduzca a y b:6 2 Resultado: 15 Solución o soluciones #include <stdio.h> int factorial (int n); int combinatorio (int a, int b); void main() { int a,b,c; printf("Introduzca a y b:"); scanf("%d %d",&a,&b); c=combinatorio(a,b); printf("Resultado: %d\n", c); } int factorial (int n) { int i, aux=1; for(i=1;i<=n;i++) aux*=i; return aux; } int combinatorio (int a, int b) { return factorial(a)/(factorial(b)*factorial(a-b)); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Tablas de multiplicar Enunciado Hacer un programa que imprima por pantalla la tabla de multiplicar del numero “n” siendo “n” un numero que se pide al usuario. Ambas tareas se haran cada una con una función: una función que imprime por pantalla la tabla de multiplicar de un numero entero que se le pasa como parametro, y otra funcion que solicita al usuario un numero entre 1 y 10, tantas veces como sean necesario, y devolviendolo como retorno cuando el numero cumple la condicion de estar entre 1 y 10. El main() invoca a una función después de la otra para ejecutar: Ejemplo de ejecución Introduzca un numero entre 1 y 10: -3 Introduzca un numero entre 1 y 10: 11 Introduzca un numero entre 1 y 10: 7 Tabla del 7 7x1=7 … (tabla completa) 7 x 9 = 63 Solución o soluciones #include<stdio.h> void TablaMultiplicar(int n); int PideNumero(); main() { int i=PideNumero(); TablaMultiplicar(i); } void TablaMultiplicar(int n) { int i; printf("Tabla del %d\n",n); for (i=1; i<10; i++) printf("%d x %d = %d\n",n,i,n*i); } int PideNumero() { int n; do { printf("Introduzca un numero entre 1 y 10: "); scanf("%d",&n); } while(n<1 || n>10); return n; }