Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Máximo de un vector Enunciado Hacer un programa que calcule el valor máximo de un vector de 5 números reales introducidos desde el teclado, en la función main(). Para calcular el máximo se utilizará una función a la que se pasarán como argumentos el vector y su dimensión (la función debe servir para vectores de cualquier dimensión). El programa finalizará imprimiendo en la pantalla, desde la función main(), el máximo del vector. Notas: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. - Sólo se puntuarán las soluciones en las que las componentes del vector se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca las componentes del vector 1.0 -2.0 3.0 4.0 5.0 El maximo del vector es 5.000000 Solución o soluciones #include <stdio.h> float maximodelvector(float vector[], int dimension); void main() { float v[5], maximo; int i; printf("Introduzca las componentes del vector\n"); for(i=0;i<5;i++) scanf("%f", &v[i]); maximo=maximodelvector(v, 5); printf("El maximo del vector es %f\n", maximo); } float maximodelvector(float vector[], int dimension) { float max; int i; for(i=0;i<dimension;i++) if(vector[i]>max || i==0]) max=vector[i]; return max; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Mínimo de un vector Enunciado Hacer un programa que calcule el valor mínimo de un vector de 5 números reales introducidos desde el teclado, en la función main() Para calcular el mínimo se utilizará una función a la que se pasarán como argumentos el vector y su dimensión (la función debe servir para vectores de cualquier dimensión). El programa finalizará imprimiendo en la pantalla, desde la función main(), del mínimo del vector. Notas: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. - Sólo se puntuarán las soluciones en las que las componentes del vector se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca las componentes del vector 1.0 -2.0 3.0 4.0 5.0 El minimo del vector es -2.000000 Solución o soluciones #include <stdio.h> float minimodelvector(float vector[], int dimension); void main() { float v[5], minimo; int i; printf("Introduzca las componentes del vector\n"); for(i=0;i<5;i++) scanf("%f", &v[i]); minimo=minimodelvector(v, 5); printf("El minimo del vector es %f\n", minimo); } float minimodelvector(float vector[], int dimension) { float min; int i; for(i=0;i<dimension;i++) if(vector[i]<min || i==0) min=vector[i]; return min; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Media de un vector Enunciado Hacer un programa que calcule la media de un vector de 5 números reales introducidos desde el teclado, en la función main(). Para calcular la media se utilizará una función a la que se pasarán como argumentos el vector y su dimensión (la función debe servir para vectores de cualquier dimensión). El programa finalizará imprimiendo en la pantalla, desde la función main(), la media del vector. Notas: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. - Sólo se puntuarán las soluciones en las que las componentes del vector se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca las componentes del vector 1.0 -2.0 3.0 4.0 5.0 La media del vector es 2.200000 Solución o soluciones #include <stdio.h> float mediadelvector(float vector[], int dimension); void main() { float v[5], media; int i; printf("Introduzca las componentes del vector\n"); for(i=0;i<5;i++) scanf("%f", &v[i]); media=mediadelvector(v, 5); printf("La media del vector es %f\n", media); } float mediadelvector(float vector[], int dimension) { float suma=0; int i; for(i=0;i<dimension;i++) suma+=vector[i]; return (suma/dimension); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Módulo de un vector Enunciado Hacer un programa que calcule el módulo de un vector de números reales de dimensión 5 cuyas componentes se introducirán desde el teclado, en la función main(). Para calcular módulo se utilizará una función a la que se pasarán como argumentos el vector y su dimensión (la función debe servir para vectores de cualquier dimensión). El programa finalizará imprimiendo en la pantalla, desde la función main(), el valor del módulo. Notas: - El módulo de un vector se define como la raíz cuadrada de la suma de sus componentes al cuadrado. Para calcular la raíz cuadrada se utilizará la función sqrt() de math.h. - Puede utilizarse la notación de subíndices o la de punteros. - Sólo se puntuarán las soluciones en las que las componentes del vector se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca las componentes del vector 1.0 -2.0 3.0 4.0 5.0 El modulo del vector vale 7.416198 Solución o soluciones #include <stdio.h> #include <math.h> float modulodelvector(float vector[], int dimension); void main() { float v[5], modulo; int i; printf("Introduzca las componentes del vector\n"); for(i=0;i<5;i++) scanf("%f", &v[i]); modulo=modulodelvector(v, 5); printf("El modulo del vector vale %f\n", modulo); } float modulodelvector(float vector[], int dimension) { float suma=0; int i; for(i=0;i<dimension;i++) suma+=vector[i]*vector[i]; return (float)sqrt(suma); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Producto escalar de dos vectores Enunciado Hacer un programa que calcule el producto escalar de dos vectores de números reales de dimensión 3, cuyas componentes se introducirán desde el teclado, en la función main(). Para calcular el producto escalar se utilizará una función a la que se pasarán como argumentos los dos vectores y su dimensión (la función debe servir para vectores de cualquier dimensión). El programa finalizará imprimiendo el producto escalar desde la función main(). Notas: - El producto escalar se define como la suma del producto de las componentes respectivas de cada vector (primera por primera más segunda por segunda, etc.). - Puede utilizarse la notación de subíndices o la de punteros. - Sólo se puntuarán las soluciones en las que las componentes de los vectores se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca la componentes del primer vector 0.0 1.0 0.0 Introduzca la componentes del segundo vector 2.0 -2.0 0.0 El producto escalar vale -2.000000 Solución o soluciones #include <stdio.h> float productoescalar(float vector1[], float vector2[], int dimension); void main() { float v1[3], v2[3], p; int i; printf("Introduzca las componentes del primer vector\n"); for(i=0;i<3;i++) scanf("%f", &v1[i]); printf("Introduzca las componentes del segundo vector\n"); for(i=0;i<3;i++) scanf("%f", &v2[i]); p=productoescalar(v1, v2, 3); printf("El producto escalar vale %f\n", p); } float productoescalar(float vector1[], float vector2[], int dimension) { float suma=0; int i; for(i=0;i<dimension;i++) suma+=vector1[i]*vector2[i]; return suma; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Longitud de una palabra Enunciado Realizar un programa que cuente el número de caracteres que tiene una palabra (excluyendo el carácter nulo) introducida desde el teclado en la función main(). Para ello, se utilizará una función que devuelve el número de caracteres de una palabra que se le pasa como único argumento. El programa finalizará imprimiendo el número de caracteres de la palabra desde la función main(). Notas: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. - No pueden utilizarse funciones de la biblioteca string.h Ejemplo de ejecución Introduzca una palabra: Hola Hola tiene 4 caracteres Solución o soluciones #include <stdio.h> int longcad(char cadena[]); void main() { char palabra[51]; int n; printf("Introduzca una palabra: "); scanf("%s", palabra); n=longcad(palabra); printf("%s tiene %d caracteres\n", palabra, n); } int longcad(char cadena[]) { int i=0; while(cadena[i]!='\0') i++; return i; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Comprobar la longitud de dos palabras Enunciado Realizar un programa que compruebe si dos palabras introducidas desde el teclado en la función main() tienen el mismo número de caracteres (excluyendo el carácter nulo). Para ello, se utilizará una función que devuelve el número de caracteres de una palabra que se le pasa como único argumento. El programa finalizará imprimiendo desde la función main() si las dos palabras tienen o no la misma longitud. Notas: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. - No pueden utilizarse funciones de la biblioteca string.h Ejemplos de ejecución Introduzca la primera palabra: hola Introduzca la segunda palabra: adios Las palabras tienen distinta longitud Introduzca la primera palabra: fundamentos Introduzca la segunda palabra: informatica Las palabras tienen la misma longitud Solución o soluciones #include <stdio.h> int longcad(char cadena[]); void main() { char palabra1[51], palabra2[51]; printf("Introduzca la primera palabra: "); scanf("%s", palabra1); printf("Introduzca la segunda palabra: "); scanf("%s", palabra2); if(longcad(palabra1)==longcad(palabra2)) printf("Las palabras tienen la misma longitud\n"); else printf("Las palabras tienen distinta longitud\n"); } int longcad(char cadena[]) { int i=0; while(cadena[i]!='\0') i++; return i; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Contar un carácter en una frase Enunciado Realizar un programa que cuente el número de veces que aparece un carácter introducido desde el teclado en una frase (la frase se escribirá directamente en el código en el momento de declarar la cadena de caracteres correspondiente). Para contar el número de apariciones, se utilizará una función a la cuál se le pasan como argumentos la frase y el carácter que hay que contar. El programa finalizará imprimiendo en pantalla desde la función main() el número de veces que aparece el carácter en la frase. Nota: - Para realizar la función puede utilizarse la notación de subíndices o la de punteros. Ejemplo de ejecución Frase: Fundamentos de Informatica Introduzca el caracter: n El caracter n aparece 3 veces Solución o soluciones #include <stdio.h> int contar(char cadena[], char caracter); void main() { char frase[]="Fundamentos de Informatica"; char car; int apariciones; printf("Frase: %s\n", frase); printf("Introduzca el caracter: "); scanf("%c", &car); apariciones=contar(frase, car); printf("El caracter %c aparece %d veces\n", car, apariciones); } int contar(char cadena[], char caracter) { int i=0, veces=0; while(cadena[i]!='\0') { if(cadena[i]==caracter) veces++; i++; } return veces; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Cuento las A Enunciado Realizar un programa que cuente el número de veces que aparece la letras ‘A’ o ‘a’ en una frase introducida por el usuario, en la función main(). Para contar el número de apariciones, se utilizará una función a la cuál se le pasan como argumentos la frase. El programa finalizará imprimiendo en pantalla desde la función main() el número de veces que aparece el carácter en la frase. int cuentoA (char cad[]); Ejemplo de ejecución Introduce una cadena: Hola buenos dias como estas? En tu cadena hay 3 letras a. Solución o soluciones #include <stdio.h> int cuentoA(char cad[]); void main() { char cad[50]; int cont=0; printf("Introduce una cadena:\n"); gets(cad); cont = cuentoA(cad); printf("En tu cadena hay %d letras a", cont); } int cuentoA(char cad[]) { int i=0, cont=0; while(cad[i] != '\0') { if(cad[i] == 'A' || cad[i] == 'a') cont++; i++; } return cont; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Contar elementos impares Enunciado Realizar un programa que solicite al usuario un vector de números enteros de 5 componentes, en la función main(). Una vez almacenados los valores en el vector, se pasará como parámetro el vector a una función que devolverá el número de elementos impares que tiene dicho vector. El programa termina imprimiendo dicho número desde el main(). Nota: No se valorarán ejercicios que no utilicen bucles para manejar el vector. Ejemplo de ejecución Introduce el vector: 1 1 2 3 5 Tu vector tiene 4 numeros impares Solución o soluciones #include <stdio.h> int impares(int vec[]); //tb int impares(int vec[], int num); void main() { int vec[5], imp=0, i; printf("Introduce un vector:\n "); for(i=0; i<5; i++) scanf("%d",&vec[i]); imp=impares(vec); printf("Tu vector tiene %d numeros impares", imp); } int impares(int a[]) { int cont=0, i; for(i=0; i<5; i++) if(a[i]%2 != 0) cont++; return cont; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Formato Enunciado Realizar una función que imprima en una nueva línea cada palabra de una frase introducida por el usuario. El prototipo de la función será: void formato (char cad[]); La frase será introducida por el usuario en el main(). No se pueden utilizar funciones de string.h Ejemplo de ejecución Introduce una frase: Hola que tal estas? Hola que tal estas? Solución o soluciones #include <stdio.h> void formato(char cad[]); void main() { char cad[50]; printf("Introduce una frase:\n"); gets(cad); formato(cad); } void formato(char cad[]) { int i=0; while(cad[i] != '\0') { if(cad[i] == ' ') printf("\n"); else printf("%c", cad[i]); i++; } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Solo Imprimo pares Enunciado Realizar un programa con una función que sólo imprima los elementos pares de un vector de 10 elementos introducido por el usuario, en la función main(). La función tendrá el siguiente prototipo: void imprimopares (int a[]); Ejemplo de ejecución Introduce el vector: 0 1 2 3 4 5 6 7 8 9 Los elementos pares son: 0 2 4 6 8 Solución o soluciones #include <stdio.h> void imprimopares(int vec[]); void main() { int i, vec[10]; printf("Introduce un vector:\n "); for(i=0; i<10; i++) scanf("%d ",&vec[i]); printf("Los elementos pares son: "); imprimopares(vec); } void imprimopares(int a[]) { int i; for(i=0; i<10;i++ ) if(a[i]%2 ==0) printf("%d ",a[i]); } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Sustituyo y Cuento Enunciado Realizar una función que cuente la cantidad de caracteres de una cadena introducida por el usuario y que además sustituya los espacios en blanco por ‘_’ . int mirocadena (char cad[]); Ejemplo de ejecución Introduce una frase: Hola que tal estas? Hola_que_tal_estas? tiene 19 caracteres. Solución o soluciones #include <stdio.h> int mirocadena(char cad[]); void main() { char cad[50]; int largo; printf("Introduce una frase:\n"); gets(cad); largo=mirocadena(cad); printf(" tiene %d caracteres", largo); } int mirocadena(char a[]) { int i=0, cont=0; while(a[i] != '\0') { if(a[i] == ' ') a[i]= '_'; printf("%c", a[i]); i++; } return i; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Paso de segundos a horas, minutos y segundos Enunciado Dado un número entero de segundos se desea pasar a horas, minutos y segundos mediante una función llamada convierte que reciba, como argumento, el número de segundos y devuelva las horas, minutos y segundos calculados, también como argumentos. Ejemplo de ejecución Introduzca el total de segundos a convertir: 8138 8138 segundos son 2 h, 15m, 38s Solución #include<stdio.h> void convierte (int,int *,int *,int *); void main(void) { int segundos,h,m,s; printf ("Introduzca el total de segundos a convertir: "); scanf ("%d",&segundos); convierte(segundos,&h,&m,&s); printf("%d segundos son %dh, %dm, %ds\n",segundos,h,m,s); } void convierte (int segundos,int *h,int *m, int *s) { // *s segundos:resto de dividir el total entre 60 *s=segundos%60; // *h horas: cociente entero de dividir el total entre 3600 *h=segundos/3600; // *m:diferencia entre los segundos y *h pasadas a segundos // y se obtiene el cociente entero al dividir por 60 *m=(segundos-*h*3600)/60; } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Titulo: Cambiar a Mayúsculas Enunciado Se pide escribir un programa que pida un texto por teclado (una cadena de caracteres). Es texto debe pasarse a una función cambiar_a_mayus, que cambia todas las letras minúsculas del texto a mayúsculas. El programa principal mostrará la cadena ya cambiada. No se deben tener en cuenta las vocales acentuadas ni las eñes, que tiene otros códigos. Para leer la cadena de texto, puede emplearse scanf o gets. Ejemplo de ejecución Introduce una cadena: CaDeNa17 CADENA17 Solución o soluciones #include <stdio.h> void cambiar_a_mayus(char* cadena); void main() { char cad[100]; printf("Introduce una cadena: \n"); gets(cad); cambiar_a_mayus(cad); printf("%s\n", cad ); } void cambiar_a_mayus(char* cadena) { int i; for(i=0;cadena[i]!=0;i++) { if( (cadena[i]>='a') && (cadena[i]<='z') ) cadena[i]-= 32; } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Calcular el máximo y el mínimo de un lote de datos mediante una función. Enunciado Dado un conjunto de números enteros almacenados en un vector (que se puede inicializar directamente en código por simplicidad) se pide escribir una función maxmin que recibiendo como argumentos el conjunto y el número de elementos de éste, devuelva mediante paso de parámetros por referencia el máximo y el mínimo del conjunto. Ejemplo de ejecución Maximo: 123 minimo: -23 Solución #include<stdio.h> void maxmin(int *,int,int *,int *); void main () { int datos[10]={1,3,-4,-2,5,123,32,-23,10,11}; int max,min; maxmin(datos,10,&max,&min); printf ("Maximo: %d minimo: %d\n",max,min); } void maxmin (int *val,int can,int *max,int *min) { int i; if(can>0) { *max=val[0]; *min=val[0]; } for (i=1;i<can;++i) { if (val[i]>*max) *max=val[i]; if (val[i]<*min) *min=val[i]; } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Valor absoluto de un vector Enunciado Hacer un programa que calcule el valor absoluto de un vector de 5 números reales introducidos desde el teclado, en la función main(). Para calcularlo se utilizará una función a la que se pasarán como argumentos el vector y su dimensión (la función debe servir para vectores de cualquier dimensión), y la función modificara el vector que se le pasa como parámetro. El programa finalizará imprimiendo en la pantalla, desde la función main(), dicho vector. Nota: Sólo se puntuarán las soluciones en las que las componentes del vector se manejen con la ayuda de bucles. Ejemplo de ejecución Introduzca las componentes del vector -12 23 -123 2 -4 v[0]=12.000000 v[1]=23.000000 v[2]=123.000000 v[3]=2.000000 v[4]=4.000000 Solución o soluciones #include <stdio.h> void valor_absoluto(float vector[], int dimension); void main() { float v[5]; int i; printf("Introduzca las componentes del vector\n"); for(i=0;i<5;i++) scanf("%f", &v[i]); valor_absoluto(v, 5); for(i=0;i<5;i++) printf("v[%d]=%f\n", i,v[i]); } void valor_absoluto(float vector[], int dimension) { int i; for(i=0;i<dimension;i++) { if(vector[i]<0) vector[i]=-vector[i]; } } Ejercicios de prácticas de Fundamentos de Informática. ELAI-UPM Título: Ecuación cuadrada Enunciado Hacer un programa que calcule las raíces reales de una ecuación cuadrada cuyos coeficientes (a, b, c) se le solicitan al usuario: ax2 + bx +c =0 Para ello se programara una función que admita 5 parámetros: los tres primeros serán los coeficientes (a, b, c) de la ecuación, y los dos siguientes serán pasados por referencia para que la función devuelva los valores calculados de las raíces reales de la ecuación. La función devolverá un 1 como retorno si es capaz de calcular raíces reales y un cero en caso contrario, lo que será utilizado por la función main() a la hora de mostrar el resultado. Ejemplo de ejecución Introduzca los coeficientes a,b y c 2 3 -10 Soluciones reales: 6.433981 -12.433981 Solución o soluciones #include <stdio.h> #include <math.h> //para la funcion raiz cuadrada sqrt int raices(float a,float b,float c,float* r1,float* r2); void main(void) { float a,b,c;//coeficientes float r1,r2;//raices, soluciones int ret; printf("Introduzca los coeficientes a,b y c\n"); scanf("%f %f %f",&a,&b,&c); ret=raices(a,b,c,&r1,&r2); if(ret) printf("Soluciones reales: %f %f\n",r1,r2); else printf("Ecuacion sin solucion real\n"); } int raices(float a,float b,float c,float* r1,float* r2) { float disc;//discriminante disc=b*b-4*a*c; if(disc>=0)//solucion real { *r1=(-b+(float)sqrt(disc))/2*a; *r2=(-b-(float)sqrt(disc))/2*a; return 1; } return 0; }