Hoja_5

Anuncio
1º IEM-ITL
Fundamentos de Informática
Hoja de Problemas 5 – Punteros
Ejercicio 1
Escribir un programa que solicite al usuario el tamaño de la clase, asigne memoria dinámicamente a un vector y
mediante la función:
void Leer(float *vec, int n);
solicite las notas de todos los alumnos.
Posteriormente, debe informar de cuál es la nota media utilizando la función:
float Media (int n, float *vec)
Y debe indicar también cuál es la nota máxima y cuántos alumnos la tienen, mediante la función:
void Maximo(int n, float *vec, float *dxmax, int *dnum)
Ejercicio 2
Un rally automovilístico del Campeonato del Mundo se efectúa en un solo día. Las reglas estipulan que cada
automóvil tome salida a una hora distinta. La participación está limitada a 10 autos y cada uno recibe un único número
de identificación ( 1 – 10 ). Escribir un programa que lea la hora de salida y la hora de llegada a la meta de cada
participante y nos diga quién es el ganador.
Al iniciar el programa se preguntará cuántos participantes hay, verificando que dicho valor sea positivo pero menor o
igual a 10. A continuación leerá los datos de la hora de salida y la hora de llegada (en segundos) de los automóviles
que se almacenan en dos vectores de tamaño adecuado al número de participantes ( vector salida y vector llegada ).
A partir de los datos de salida y llegada de los automóviles el programa debe obtener el número de identificador del
ganador de rally. Para realizar el programa escribir las funciones siguientes:
Una función que lea los datos de hora de salida y llegada de los coches participantes. El prototipo de la función es:
void LeerHoras (int salida[ , int llegada[ ], int num_participantes);
Una función que reciba los vectores de hora de salida y llegada y determina el ganador y devuelve el número de
identificación del coche ganador. El prototipo de la función es:
void Ganador (int salida[ , int llegada[ , int num_participantes, int
*identificador_ganador);
Función main para llamar a las funciones anteriores y presentar el coche ganador ( por su número de identificación).
Nota:La hora de salida ó llegada de cada automóvil se indica preguntando el número de segundos desde las 0 horas del
día de la carrera. El tiempo total que tarde cada automóvil en realizar el recorrido se calcula como diferencia de la hora
de llega en segundos y de la hora de salida en segundos.
Ejercicio 3
a) Escribir una función void leer_matriz (int *dni, int *dnj, float z[ ][N]) que pida y
guarde en *dni y *dnj las dimensiones de una matriz y en z los elementos de la matriz que también pide. Las
dimensiones máximas de la matriz son N*N.
b) Escribir una función void escribir_matriz (int ni, int nj, float z[ ][N]) que presente en pantalla
la matriz z de ni*nj elementos.
c) Escribir una función void sumar_matrices (int ni,int nj, float z1[ ][N], float z2[ ][N],
float zs[ ][N]) que reciba una matriz z1 de ni*nj y otra z2 de las mismas dimensiones y devuelva su suma en zs.
d) Escribir una función principal que lea dos matrices, compruebe que se pueden sumar, y presente en pantalla las
matrices datos y la matriz suma.
1º IEM-ITL
Fundamentos de Informática
Ejercicio 4
Escribir un programa para calcular los lados de un polígono.
El programa debe declarar tres vectores de la longitud indicada por el usuario para guardar las coordenadas X de los
puntos del polígono, las coordenadas Y y las longitudes de los lados. A continuación realizará las siguientes
operaciones:

Llamar a la función LeerPuntos() para realizar la lectura de las coordenadas X e Y de cada punto.

Llamar a la función CalcularLados() para obtener las longitudes de todos los lados, teniendo en cuenta que el
último lado va desde el último punto del polígono hasta el primero.

Llamar a la función CalcularPerímetro() para obtener la suma de todos los lados

Mostrar las longitudes de todos lo lados y la longitud total
Ejemplo:
Punto 1 (x1,y1)
do
La
Punto 3
1
o2
0
3
La
do
do
La
d
La
Punto 2
Punto 4
Punto 0
(x0,y0)
5
do
La
do
La
4
Punto 5
lado0= sqrt ( (x1-x0)2 + (y1-y0)2)
Ejercicio 5
Escribir un programa que lea una frase, contabilice el número de vocales distintas que existen (mediante una función
ContarVocales()) , genere dinámicamente un vector de enteros con el número de vocales encontradas (desde el
programa principal) y posteriormente, con la función RellenarVocales() rellene el vector de enteros con el número
de veces que dicha vocal aparece en la frase y otro vector de caracteres, que indique la letra a la que corresponde cada
posición del vector de enteros. Usar la función Mostrar() para sacar por pantalla: cada vocal existente en la frase,
cuántas apariciones tiene.
Ejercicio 6
En un curso en que hay matriculados nat alumnos se imparten nst (nst<10) asignaturas (valores nat y nst
introducidos por el usuario). Cada alumno tiene una nota en cada asignatura que se guarda en una matriz nat * nst
Los nombres de los alumnos se guardan en una matriz de caracteres nom (capaz de almacenar nat nombres de
alumnos, de cómo máximo 30 caracteres cada nombre), los de las asignaturas en otra matriz de caracteres asig
(capaz de almacenar los nombres de las nst asignaturas de no más de 20 caracteres cada nombre).
Desde el programa principal, solicitar el valor nst y nat, y posteriormente:
a) Escribir una función LeerAsignaturas () que rellene los nombres de las asignaturas.
b) Escribir una función LeerNombres () que rellene los nombres de las los alumnos.
c) Escribir una función LeerNotas() que solicite cada nota de cada alumno en cada asignatura (al solicitar
cada nota, debe saber a qué alumno y a qué asignatura va a corresponder).
d) Escribir una función MostrarMediaAlumnos() que muestre por pantalla la nota media que cada alumno
ha tenido en sus asignaturas y devuelva al programa principal tanto el índice del alumno con mayor nota
media como el índice del alumno con menor nota media. La información del alumno con mayor y menor nota
media debe mostrarla desde exprograma principal.
e) Escribir una función MostarMediaAsignatura() que muestre por pantalla la nota media de cada
asignatura.
1º IEM-ITL
Fundamentos de Informática
Ejercicio 7 (Ab 09)
Completar el siguiente programa para analizar el número de elementos pares e impares del vector vec y guardarlos
respectivamente en los vectores v_par y v_impar, una vez se les ha asignado memoria dinámica. Todo el código de
este ejercicio se ha de realizar en el programa principal (no se van a usar funciones).
#define N 100
int main(void)
{
int vec[N];
int n_vec;
//número de elementos guardados en vec
int *v_par;
int n_par;
//número de elementos pares
int *v_impar;
int n_impar;
//número de elementos impares
/* Lectura de datos */
n_vec = Leer(vec);
/* Contar elementos pares e impares */
....
/*Asignar memoria dinámicamente y
Construir vectores par e impar */
....
}
En caso de haber construido los vectores de par e impar mediante funciones, ¿cuál habría sido el prototipo para
RellenarVectorPar()?:
……………………..RellenarVectorPar(………………………………………………………………………………………………………………………)
¿Cómo hubiera sido la llamada a la función desde el programa principal?
Ejercicio 8 (Ab 09)
Diseñar una función BuscarValores() que reciba como argumento de entrada un vector de 10 números reales y
devuelva como resultado el valor máximo, el valor mínimo y el valor medio del vector.
Declaración de variables en el main() y llamada a la función BuscarValores():
…
Descripción y código de la función BuscarValores()
…
Descargar