Ejercicios de Informática
-VECTORES:
Fáciles
: Realiza una función en C que dados los datos de un vector de 50
Elementos calcule la media de los elementos del vector impares y cuyo valor se
Encuentre entre 60 y 230. Realizar el correspondiente programa que llame a la función
Y muestre el resultado:
#include <stdio.H>
void rellenar_vector(int v[]);
int cálculo (int v[]);
int main(){
int v[50];
rellenar_vector(v);
int c=cálculo (v);
printf(“La media de números impares y que se encuentran entre 60 y 230 es: ”, c)
}
int cálculo(int v[]){
int i;
int suma=0, media=0, cont=0;
for (i=1; i<50; i=i+2){
if ( v[i] >=60 && v[i]<=230 ){
suma+= v[i];
cont++;
}}
media=suma/cont;
return media; }
Realiza una función que dado los datos de un vector de 40 elementos
calcule cuántos elementos del vector son divisibles por 5 y mayores que 25. Realizar
el correspondiente programa que llame a la función y muestre el resultado
#include <stdio.H>
void rellena_vector ();
int cálculo ();
int main(){
int r[40]
rellena_vector(r);
int c=cálculo (r);
printf(“Hay %i números divisibles por 5 y mayor que 25”, c); }
int cálculo(int a[]){
int i;
int cont=0;
for(i=0; i<40; i++){
if(a[i] >25 && a[i]%5==0){
cont++;
}}
return cont; }
Realizar una función en C que dado un vector de números determine
aquel número del vector que se repite más veces y es mayor que 7:
void cálculo (int v[], int n){
int i, cont=0, contM=0, max=0;
for (i=0; i<n; i++){
for( j=1; j<n; j++){
if( v[i] >7 && v[i]=v[j] ){
cont++; } }
if(cont>contM){
max=v[i]
} cont=0; }
printf (“El numero que se repite más veces y es mayor que 7 es: %i” , max); }
Dado un vector de enteros positivos, diseñar una función en C que
determine cuantos son divisibles al mismo tiempo por 3, 5 y 7:
void divisores (int v[TAM], int n) {
//n-número de elementos que tiene el vector introducido en main
int i;
int cont=0;
for (i=0; i<n; i++){
if (v[i]%3==0 && v[i]%5==0 && v[i]%7==0){
cont++; }}
printf (“Al mismo tiempo se dividen por 3, 5 y 7 %i de números introducidos”, cont); }
Dado un vector de enteros, diseñar una función en C que imprima por
pantalla la suma de los elementos impares positivos y divisibles por 5:
void salida(int v[TAM], int n){
//n-número de elementos que tiene el vector introducido en main
int i;
int suma=0;
for (i=1; i<n; i=i+2){
if (v[i] > 0 && v[i]%5==0 && v[i]%2!=0){
suma += v[i];
}}
printf (“La suma de elementos impares positivos es: %i” , suma); }
Difíciles: Dado un vector de enteros diseñar un método que los ordene de menor a mayor sin utilizar un vector auxiliar:
#include <stdio.H>
void ordenarVector(int vector[], int tamano) {
for (int i = 0; i < tamano – 1; i++) {
for (int j = i + 1; j < tamano; j++) {
if (vector[i] > vector[j]) {
int aux = vector[i];
vector[i] = vector[j];
vector[j] = aux;
}
}
}
}
void imprimirVector(int vector[], int tamano) {
for (int i = 0; i < tamano; i++) {
printf(“%d “, vector[i]);
}
printf(“\n”);
}
int main() {
int vector[] = {5, 2, 4, 1, 3};
int tamano = sizeof(vector) / sizeof(vector[0]);
printf(“Vector original: “);
imprimirVector(vector, tamano);
ordenarVector(vector, tamano);
printf(“Vector ordenado: “);
imprimirVector(vector, tamano);
return 0;
}
Escribir una función en C que dado un vector de números enteros devuelva la moda de estos
int moda (int v[TAM], int TAM){
int i, j;
for( i=0; i<TAM; i++){
for (j=0; j<TAM; j++){
if (v[i] = v[j] ){
cont++; } }
contM=cont;
if (cont > contM){
cont=contM;
moda=v[i]; } }
return moda; }
Dado un vector de enteros calcular aquel número del vector que aparece
mayor número de veces.
#include <stdio.H>
int main(){
int v[100];
int i, n, cont=0, aux=0;
printf(“Cuantos números quieres introducir?”);
scanf(“%i”, &n);
for (i=0; i<n; i ++){
scanf(“%i”, &v[i]);
}
for (i=0; i<n; i ++){
for (j=0;j<n;j++){
if(v[i]==v[j]){
cont++;
}}if(cont>aux){
aux=cont;
num=v[i];
}cont =0;
}
printf ( “ El numero %i se repite %i veces “ , num, cont) ;}
Realizar una función en C que dado un vector de números determine para cada elemento del vector si es un número perfecto. Realizar el programa que llame a la función.
void perfecto(){
int v[100];
int d=0, i, j, n;
printf (“Cuantos elementos tendrá el vector:”);
scanf(“%i”,&n);
for(i=0; i<n; i++){
scanf(“%i”, &v[i]);
for(j=0; j<v[i]; j++ ){
if( v[i]%j==0){
d+=j;
} if (d==v[i]){
printf( “El numero %i es perfecto”, v[i]);
} else (“El numero %i no es perfecto”, v[i]);
}}
}
-EXAMEN 2024:
Realiza en función en C que dada un matriz de 40 filas y 20 columnas, calcule los elementos de la matriz pares y cuyo valor que se encuentren -5 y 23. Realizar el correspondiente programa que llame a la función y muestre el resultado:
#include <stdio.H>
int main() {
int matriz[40][20];
for (int i = 0; i < 40; i++) {
for (int j = 0; j < 20; j++) {
matriz[i][j] = i * 20 + j; // Puedes cambiar esta fórmula según tus necesidades
}
}
for (int i = 0; i < 40; i++) {
for (int j = 0; j < 20; j++) {
if (matriz[i][j] % 2 == 0 && matriz[i][j] >= -5 && matriz[i][j] <= 23) {
printf(“matriz[%d][%d]: %d\n”, i, j, matriz[i][j]);
}
}
}
return 0;
}
Escriba un programa en función en C que dado un vector, determine un valor cuyo valor deja a la mitad de ellos por debajo y la otra por arriba. Realiza la función sin modfcar el vector
#include
#include
void copiarYOrdenar(int original[], int copia[], int longitud) {
for (int i = 0; i < longitud; i++) {
copia[i] = original[i];
}
for (int i = 0; i < longitud – 1; i++) {
for (int j = 0; j < longitud – i – 1; j++) {
if (copia[j] > copia[j + 1]) {
// Intercambiar los elementos
int temp = copia[j];
copia[j] = copia[j + 1];
copia[j + 1] = temp;
}
}
}
}
int encontrarMediana(int vector[], int longitud) {
int copia[longitud];
copiarYOrdenar(vector, copia, longitud);
if (longitud % 2 == 0) {
return (copia[longitud / 2 – 1] + copia[longitud / 2]) / 2;
} else {
return copia[longitud / 2];
}
}
int main() {
int vector[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int longitud = 11; // Longitud del vector
int mediana = encontrarMediana(vector, longitud);
printf(“El valor mediano es: %d\n”, mediana);
return 0;
}
Se desea informatizar en un club deportivo los datos de cada miembro: nombre, apellidos, teléfono, direcion, antigüedad en el club, dorsal y ciudad:
A) Diseña una estructura de datos que permita alamacenar los datos de 200 socios #include
b) Realiza una función que dada la lista de socios busque el socio con mayor antigüedad, de la ciudad de Córdoba y que imprima sus datos en pantalla.
A)#include
#include <string.H>
struct Socio {
char nombre[50];
char apellidos[50];
char teléfono[15];
char dirección[100];
int antigüedad;
int dorsal;
char ciudad[50];
};
int main() {
#define MAX_SOCIOS 200
struct Socio socios[MAX_SOCIOS];
B)int numSocios;
printf(“Ingrese el número de socios: “);
scanf(“%d”, &numSocios);
for (int i = 0; i < numSocios; i++) {
printf(“\nIngrese los datos del socio %d:\n”, i + 1);
printf(“Nombre: “);
scanf(” %[^\n]”, socios[i].Nombre); // Leer hasta encontrar un salto de línea
printf(“Apellidos: “);
scanf(” %[^\n]”, socios[i].Apellidos);
printf(“Teléfono: “);
scanf(” %[^\n]”, socios[i].Teléfono);
printf(“Dirección: “);
scanf(” %[^\n]”, socios[i].Dirección);
printf(“Antigüedad: “);
scanf(“%d”, &socios[i].Antigüedad);
printf(“Dorsal: “);
scanf(“%d”, &socios[i].Dorsal);
printf(“Ciudad: “);
scanf(” %[^\n]”, socios[i].Ciudad);
}
int maxAntiguedad = -1;
int indiceSocio = -1;
for (int i = 0; i < numSocios; i++) {
if (strcmp(socios[i].Ciudad, “Córdoba”) == 0 && socios[i].Antigüedad > maxAntiguedad) {
maxAntiguedad = socios[i].Antigüedad;
indiceSocio = i;
}
}
if (indiceSocio != -1) {
printf(“\nSocio con mayor antigüedad en Córdoba:\n”);
printf(“Nombre: %s\n”, socios[indiceSocio].Nombre);
printf(“Apellidos: %s\n”, socios[indiceSocio].Apellidos);
printf(“Teléfono: %s\n”, socios[indiceSocio].Teléfono);
printf(“Dirección: %s\n”, socios[indiceSocio].Dirección);
printf(“Antigüedad: %d años\n”, socios[indiceSocio].Antigüedad);
printf(“Dorsal: %d\n”, socios[indiceSocio].Dorsal);
printf(“Ciudad: %s\n”, socios[indiceSocio].Ciudad);
} else {
printf(“\nNo hay socios de Córdoba en la lista o ninguno tiene antigüedad positiva.\n”);
}
return 0;
}
-INFORMATIZAR:
En una escuela de Primaria se desea informatizar los siguientes datos
para cada alumno: nombre, apellidos, dirección, teléfono, curso actual, nota media
del curso actual.
A) Define la estructura de datos para almacenar esta información para 100 alumnos
B) Realiza una función que dada la lista de alumnos de la escuela determine el alumno
de sexto con mayor nota e imprima sus datos por pantalla.
A) La estructura de datos:
#include <stdio.H>
#include <string.H>
typedef struct{
char nombre[15];
char apellidos[30];
char dirección[50];
int teléfono[9];
int curso;
float nota;
} datos
datos alumnos[100];
B)El alumno de sexto con mayor nota:
void búsqueda (datos alumnos [100], float nota, int curso){
int i, j;
float mayor=0.0;
int pos=0;
for(i=0;i <100; i ++){
for (j=1; j<100; j++){
if( alumno[i].Curso==6 && alumno[i].Nota>mayor ){
mayor=alumno[i].Nota;
pos=i;
} }
printf ( “El nombre del alumno con la nota maxíma del sexto curso es: %c”,
alumno[pos].Nombre);
}
En un concesionario se desea informatizar el stock de automóviles para
ello se necesita guardar los siguientes datos: número de bastidor, marca, modelo,
potencia, precio, fecha de entrada.
A) Define la estructura de datos para almacenar esta información para 20 automóviles
B) Realiza una función que dada la lista de automóviles busque un automóvil por su
número de bastidor e imprima por pantalla sus datos.
A) #include
#include <string.H>
typedef struct{
int num;
char marca[30];
char modelo [30];
int potencia;
float precio;
char fecha[10];
}registro;
registro stock[20];
B)void búsqueda (registro stock[20], int n, int num){
for (i=0; i< n; i++){
if (stock[i].Num==num ){
printf(“ la marca es: % s \n”,stock[i].Marca );
printf (“el modelo es %c \n”, stock[i].Modelo);
printf(“ la potencia es: %i \n”,stock.Potencia);
printf (“el precio es %f \n”, stock[i].Precio);
printf(“ la fecha es: % s \n”,stock[i].Fecha );
}}
Se desean informatizar los datos de una empresa de transportes la
gestión de sus vehículos y las rutas realizadas. Para ello desea almacenar la
siguiente información para cada vehículo: Matrícula, años de antigüedad, nombre del
conductor, tipo de vehículo, número de kilómetros en un mes y número de rutas
realizadas por el vehículo en un mes.
A) Diseñar una estructura de datos que permita almacenar en la memoria la
información descrita anteriormente para los 100 vehículos de la empresa.
B)Escribir una función en C que calcule cual es el vehículo con mayor números de
kilómetros en un mes visualizando en pantalla la siguiente información: Matrícula,
años de antigüedad, nombre del conductor, tipo de vehículo, número de kilómetros
en un mes y número de rutas realizadas por el vehículo en un mes. Además se debe
calcular el número de medio de rutas en un mes realizadas por los vehículos de la
empresa.
A)La estructura:
#include <stdio.H>
#include <string.H>
typedef struct{
char matrícula[8];
int antigüedad;
char nombre [10];
char tipo [10];
int km;
int rutas;
}vehiculo;
vehiculo coche[100];
B)Función:
void kilómetros(vehiculo coche[100], int km){
int i;
for (i=0; i<100; i++){
for(j=1; j<100; j++){
if(coche[i].Km > coche[j].Km){
pos=coche[i]; }}}
printf (“La matricula del coche que tiene mas kilómetros recorridos es : %c”,
coche[pos].Matricula);
}
void medioRutas (vehiculo coche[100], int rutas){
int i, num=0, media=0;
for (i=0; i<100; i++){
num+= coche[i].Ruta;
}
media=num/100
printf (“el numero medio de rutas es: %i”, media); }
Se desean informatizar los datos de una biblioteca con un número
máximo de 2000 libros. Sobre cada libro se desea informatizar los siguientes datos:
Título, autor, ISBN, tema, editorial y número de préstamos en el mes actual.
A) Diseñar una estructura de datos que permita almacenar en la memoria la
información descrita anteriormente para los 2000 libros de la biblioteca.
B) Escribir una función en C que calcule cual es el libro con mayor número de
préstamos en el presente mes, sobre este libro se visualizará por pantalla la siguiente
información: ISBN, titulo, autor, editorial, tema, número de préstamos.
A)La estructura de datos:
#include <stdio.H>
#include <string.H>
typedef struct{
char nombre [20];
char autor [40];
int ISBM;
char tema [10];
char editorial [15];
int num;
} libro;
libro biblioteca[2000];
B)Función:
void préstamo ( libro biblioteca[2000], int num){
int i, mayor=0, num=0, pos;
for (i=0; i<2000; i++){
if (biblioteca[i].Num>mayor){
mayor=num;
pos=i; }}
printf (“El titulo del libro que tiene más préstamos es: %c”, libro[pos].Nombre);
printf (“El numero del libro que tiene más préstamos es: %i”, libro[pos].Num);
printf (“El autor del libro que tiene más préstamos es: %c”, libro[pos].Autor);
printf (“El editorial del libro que tiene más préstamos es: %c”, libro[pos].Editorial);
Se desean informatizar los datos de los participantes en la competiciones
de salto de longitud realizadas a lo largo de un año, en un mes se realizan dos
pruebas, al año un total de 24. En la competición tienen fijado un salto mínimo a
superar para clasificarse para otras competiciones. Sobre los atletas se desean
almacenar los siguientes datos: Nombre del atleta, provincia, club, DNI, dirección,
E-mail y los saltos obtenidos (deben guardarse en una array de tamaño 24). Responda
a las siguientes cuestiones:
A) Diseñar una estructura de datos que permita almacenar en la memoria la
información descrita anteriormente.
B) Escribir un función en C que visualice en pantalla cual es el atleta con mayor
número de saltos que superan el salto mínimo dado como parámetro a la función, así
como devuelva el número medio de saltos superados entre todos los atletas. Nota:
Considerar una función que calcule para un saltador el número de veces que ha
superado el salto mínimo.
C) Diseñar un programa en C que cree una variable competición e introduzca tantos
atletas como indique el usuario, para luego llamar al módulo del apartado II y
visualizar el número medio de saltos superados, posteriormente visualizar por
pantalla aquellos usuarios cuya provincia es “Jaén” y que los cinco primeros meses
de competición has superado el salto mínimo al menos tres veces.
A) Typedef struct {
char nombre[50];
char provincia[50];
char club[50];
char DNI[20];
char dirección[100];
char email[50];
int saltos[24]; // Array para almacenar los saltos de cada mes
} Atleta;
B) int calcularSaltosSuperados(Atleta atleta, int saltoMinimo) {
int saltosSuperados = 0;
for (int i = 0; i < 24; i++) {
if (atleta.Saltos[i] >= saltoMinimo) {
saltosSuperados++;
}
}
return saltosSuperados;
}
void mostrarAtletaMasSaltosSuperados(Atleta atletas[], int numAtletas, int saltoMinimo) {
int maxSaltosSuperados = 0;
int indiceAtletaMaximo = 0;
for (int i = 0; i < numAtletas; i++) {
int saltosSuperadosActual = calcularSaltosSuperados(atletas[i], saltoMinimo);
if (saltosSuperadosActual > maxSaltosSuperados) {
maxSaltosSuperados = saltosSuperadosActual;
indiceAtletaMaximo = i;
}
}
if (maxSaltosSuperados > 0) {
printf(“El atleta con más saltos superados es: %s (%d saltos superados)\n”, atletas[indiceAtletaMaximo].Nombre, maxSaltosSuperados);
} else {
printf(“No hay atletas que hayan superado el salto mínimo\n”);
}
float mediaSaltosSuperados = 0;
for (int i = 0; i < numAtletas; i++) {
mediaSaltosSuperados += calcularSaltosSuperados(atletas[i], saltoMinimo);
}
mediaSaltosSuperados /= numAtletas;
printf(“El número medio de saltos superados es: %.2f\n”, mediaSaltosSuperados);
}
C) #include
typedef struct {
char nombre[50];
char provincia[50];
char club[50];
char DNI[20];
char dirección[100];
char email[50];
int saltos[24];
} Atle
-ARRAY
Diseñar una función en C que dado un array de enteros obtenga la
posición que ocupa la mediana del vector sin modificar el vector ni usar un vector
auxiliar, suponer que el vector no está ordenado así como no tiene elementos
repetidos y el número de elementos del array es impar
void mediana(int v[TAM], int n){
//n-número de elementos que tiene el vector introducido en main
int i, j, contMayor=0, contMenor=0;
int valMediana=0, posMediana=0;
for(i=0; i<n; i++){
for (j=1; j<n; j++){
if (v[i]>v[j]){
contMayor++;
}else{
contMenor++;
}}
if(contMenor==contMayor){
valMediana=v[i];
posMediana=i;
break;
} contMayor=0;
contMenor=0;
}
printf ( “La mediana es %i y está en la posición %i”, valMediana, posMediana);