Práctica 7c: Uso de estructuras en C.

Anuncio
Práctica 7c: Uso de estructuras en C.
Objetivos
En esta práctica el objetivo principal es el de poner en práctica los principios básicos del uso de
estructuras y librerías de funciones en C.
Evaluación
La práctica consta de 3 cuestiones, de los cuales habrá que realizar correctamente al menos 1 para
aprobar la práctica.
Procedimiento
Cada cuestión consta de un enunciado y de una plantilla en lenguaje C. El alumno usará dicha
plantilla para verificar el correcto funcionamiento de algoritmo que haya diseñado y su implementación
en lenguaje C. En la plantilla se indica dónde debe el alumno insertar su código. Este mismo código
deberá copiarse y enviarse a través del servidor de docencia teniendo especial cuidado de
seleccionar correctamente la línea de inserción en función del ejercicio que esté resolviendo.
Entrega de la práctica a través del servidor
Los resultados de todas la práctica se entregará usando Goodle GMS. Para el correcto
funcionamiento de las siguientes páginas su navegador debe permitir cookies y la ejecución de
javascript. Goodle se encuentra situado en la siguiente dirección:
http://bono.us.es/sdocencia/
La entrega de la práctica consiste en copiar el código desarrollador en cada cuestión en el cuadro de
respuestas correspondiente de Goodle. Hay que copiar el código una vez se haya comprobado el
correcto funcionamiento del programa.
IMPORTANTE:
•
Cada ejercicio se debe resolver utilizando únicamente las variables definidas en el molde que
se proporciona
•
Debe respetar la estructura que se le propone sin cambiar nombres de variables ni omitir
ninguna línea de código.
1
Cuestión 710
Se desea diseñar un programa que sume dos matrices cuyo número de filas y columnas tendrán un
valor menor o igual que 100. Se definen los siguientes tipos de datos para realizar este programa:
struct matriz {
float A[100][100];
int fil;
int col;
};
Diseñar una función que dadas dos estructuras tipo struct matriz que contienen las dos matrices
a sumar, devuelva en otra estructura tipo struct matriz, la suma de ambas, si es posible. En caso
de no ser posible la suma, la función debe devolver un valor 0 en el campo fil y col de la matriz
resultante, para indicar que no se ha podido realizar la suma.
Prototipo
struct matriz suma_mat(struct matriz, struct matriz);
Programa de ejemplo
#include <stdio.h>
struct matriz {
float A[100][100];
int fil;
int col;
};
struct matriz suma_mat(struct matriz, struct matriz);
void escribe_matriz(struct matriz);
main(void)
{
struct matriz A={{{1,2,3},{4,5,6}},2,3};
struct matriz B={{{3,2,1},{2,1,0}},2,3};
struct matriz R;
R=suma_mat(A,B);
if ((R.fil==0) && (R.col==0))
printf("\n No se pueden multiplicar");
else
escribe_matriz(R);
getch();
}
void escribe_matriz (struct matriz a)
{
int i,j;
for(i=0;i<a.fil;i++)
{
printf("\n");
for(j=0;j<a.col;j++)
printf("%f \t", a.A[i][j]);
}
}
struct matriz suma_mat(struct matriz a, struct matriz b)
{
/*INICIO codigo de alumno*/
/*FIN codigo de alumno*/
}
2
Cuestión 704
Se desea diseñar un programa para hacer una lista con todas las películas en DVD de un videoclub.
Para almacenar toda la información de las películas (título, género, año y duración), se ha pensado
en utilizar un vector de estructuras, en el que cada elemento tiene la información de una película. El
número de películas del videoclub puede cambiar, pero nunca será mayor de 1000, por lo que se
utilizará un vector de dimensión 1000. Se definen los siguientes tipos de datos para realizar este
programa:
struct dvd {
char titulo[100];
char genero[100];
int anio;
struct tiempo duracion;
};
struct tiempo {
int hor;
int min;
int seg;
};
El número de DVDs del videoclub se almacena en la variable entera numdvd.
Ejemplo de lista:
Braveheart, Drama histórico, 1995, 2h37’00’’
Forest Gump, Drama, 1994, 2h2’00’’
La lista de Schindler, Drama y suspense, 1993, 2h55’00’’
…
Diseñar una función que busque en la lista todas las películas de un determinado año. La función
recibe la dirección de inicio del vector de estructuras, el número de DVDs del videoclub, el año y la
dirección de comienzo de un vector de enteros en los que almacenar los índices de las películas
buscadas. Debe devolver el número de películas del videoclub del año indicado. Además, debe
almacenar en las primeras componentes del vector de enteros los índices de estas películas dentro
de la lista del videoclub.
Prototipo
int buscaanio(struct dvd* lista, int numdvd, int anio, int * pos);
Programa de ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct tiempo {
int hor;
int min;
int seg;
};
struct dvd {
char titulo[100];
char genero[100];
int anio;
struct tiempo duracion;
};
int buscaanio(struct dvd* lista, int numdvd, int anio, int * pos);
3
void main(void)
{
struct dvd lista[1000];
int numdvd;
int numanio;
int pos[1000];
int i,j;
strcpy(lista[0].titulo,"Braveheart");
strcpy(lista[0].genero,"Drama historico");
lista[0].anio=1995;
lista[0].duracion.hor=2;
lista[0].duracion.min=37;
lista[0].duracion.seg=0;
strcpy(lista[1].titulo,"Forest Gump");
strcpy(lista[1].genero,"Drama");
lista[1].anio=1994;
lista[1].duracion.hor=2;
lista[1].duracion.min=2;
lista[1].duracion.seg=0;
strcpy(lista[2].titulo,"La lista de Schindler");
strcpy(lista[2].genero,"Drama y suspense");
lista[2].anio=1993;
lista[2].duracion.hor=2;
lista[2].duracion.min=55;
lista[2].duracion.seg=0;
numdvd = 3;
numanio = buscaanio(lista,numdvd,1993,pos);
printf("\nLista de DVDs del videoclub de 1993:\n");
for(j=0;j<numanio;j++)
{
i = pos[j];
printf("[%d] %-30s %-20s %-5d
%dh%d'%d''\n",i,lista[i].titulo,lista[i].genero,lista[i].anio,lista[i].dura
cion.hor,lista[i].duracion.min,lista[i].duracion.seg);
}
getch();
}
4
Ejercicio 717
Se desea diseñar un programa que divida dos polinomios. El tipo de estructura que almacena un
polinomio viene dado por:
struct polinomio {
int grado;
float coef[101];
} ;
donde en la posición 0 del vector coef se almacena el coeficiente del término independiente, en la
posición 1 el coeficiente del grado 1, y así sucesivamente.
Diseñar una función que dadas dos estructuras tipo struct polinomio que contienen los dos
polinomios a dividir, devuelva en otras dos estructuras tipo struct polinomio, el cociente y el
resto de la división de ambos.
Nota: Puede suponer que el polinomio divisor no tiene ningún coeficiente nulo.
Nota: Ayúdese de funciones auxiliares que multipliquen y resten polinomios.
Ejemplo:
Prototipo
void div_pol(struct polinomio p1, struct polinomio p2, struct polinomio *
pcociente, struct polinomio * presto);
Programa de ejemplo
#include <stdio.h>
struct polinomio {
int grado;
float coef[101];
} ;
void div_pol(struct polinomio, struct polinomio, struct polinomio *, struct
polinomio *);
void escribe_pol(struct polinomio);
5
main(void)
{
struct polinomio A,B,C,R;
int i;
printf("Introduce grado del primer polinomio (<=100)\n");
scanf("%d",&(A.grado));
for(i=A.grado;i>=0;i--)
{
printf("\n Coeficiente x^%d: ",i);
scanf("%f",&A.coef[i]);
}
printf("Introduce grado del segundo polinomio (<=100)\n");
scanf("%d",&(B.grado));
for(i=B.grado;i>=0;i--)
{
printf("\n Coeficiente x^%d: ",i);
scanf("%f",&B.coef[i]);
}
div_pol(A,B,&C,&R);
printf("\n Polinomio del cociente");
escribe_pol(C);
printf("\n Polinomio del resto");
escribe_pol(R);
getch();
}
void escribe_pol (struct polinomio p)
{
int i;
for(i=p.grado;i>=0;i--)
printf("\nCoeficiente grado %d es %f",i, p.coef[i]);
}
void div_pol(struct polinomio a, struct polinomio b, struct polinomio *c,
struct polinomio *r)
{
/*************INICIO CÓDIGO DE ALUMNO*****************/
/***************FIN CÓDIGO DE ALUMNO******************/
}
6
Descargar