FUNDAMENTOS DE PROGRAMACIÓN
CONTROL
26/11/2013 (MAÑANA)
Queremos hacer un estudio sobre si la raza de un toro y su longitud están relacionadas. Para ello vamos a disponer de las razas (cadenas de caracteres) y longitud (números reales) de una muestra de toros, en dos arrays relacionados por la posición. Se pide: Defina los tipos necesarios para guardar los nombres de las razas y las longitudes de la muestra. Se supone no tendremos más de 500 datos. 1. Escriba una función que lea desde teclado y guarde los datos de raza y longitud de los toros de la muestra. La lectura terminará cuando se lea como raza la palabra FIN. No olvide devolver el número de datos leídos. 2. Escriba una función que dadas las razas y longitudes de la muestra y una cadena de caracteres s devuelva las longitudes de los toros de raza s. 3. Escriba una función tal que dado las longitudes de una muestra devuelva el máximo. 4. Suponga ya escrita (NO es necesario hacerla) la función mínimo para un array de longitudes. Escriba una función tal que dado las longitudes de una muestra devuelva el rango. El rango de una muestra de valores se calcula restando el máximo y el mínimo: rango = máximo - mínimo. 5. Escribe un programa principal que lea la muestra por teclado y calcule el máximo y el rango de longitudes para las siguientes razas: Brava Cachena Hereford Jersey La salida del programa debería ser: Los toros de raza Brava tienen una longitud máxima de *** y un rango de **** Los toros de raza Cachena tienen una longitud máxima de *** y un rango de **** Los toros de raza Hereford tienen una longitud máxima de *** y un rango de **** Los toros de raza Jersey tienen una longitud máxima de *** y un rango de ****
FUNDAMENTOS DE PROGRAMACIÓN
CONTROL
26/11/2013 (MAÑANA)
SOLUCIONES #define NUMCAR 256 #define NUMDAT 500 typedef char Cadena[NUMCAR]; typedef Cadena TablaCadenas[NUMDAT]; typedef float TablaReales[NUMDAT];
1. Lectura int leeDatos(TablaCadenas traza, TablaReales tlon){ int num=0; Cadena raza; float longitud; printf("deme una raza: \n"); scanf("%s",raza); while (strcmp(raza,"FIN")!=0){ printf("deme una longitud: \n"); scanf("%f",&longitud); fflush(stdin); // ES NECESARIO PERO NO SE EXIGE strcpy(traza[num],raza); tlon[num]=longitud; num++; printf("deme una raza: \n"); scanf("%s",raza); } return num; }
2. Filtro int filtraPorRaza(const TablaCadenas traza, const TablaReales tlon, int n, TablaReales tlonfil, Cadena s){ int num=0, i; for(i=0;i
3. Máximo float maximoLon(const TablaReales t, int n){ float max; int i;
max=t[0]; for(i=0;imax){ max=t[i]; } } return max; }
4. Rango float rangoLon(const TablaReales t, int n){ float r; r = maximoLon(t,n)-minimoLon(t,n); return r; }
5. Programa Principal void main(void){ TablaCadenas te; TablaReales tp,tf; int numd,numf; numd=leeDatos(te,tp); printf("leidos %d registros\n",numd); numf=filtraPorRaza(te,tp,numd,tf,"Brava"); printf("Los toros de raza Brava tienen una longitud máxima de %f y un rango de %f\n",maximoLon(tf,numf),rangoLon(tf,numf)); numf=filtraPorRaza(te,tp,numd,tf,"Cachena"); printf("Los toros de raza Cachena tienen una longitud máxima de %f y un rango de %f\n",maximoLon(tf,numf),rangoLon(tf,numf)); numf=filtraPorRaza(te,tp,numd,tf,"Hereford"); printf("Los toros de raza Hereford tienen una longitud máxima de %f y un rango de %f\n",maximoLon(tf,numf),rangoLon(tf,numf)); numf=filtraPorRaza(te,tp,numd,tf,"Jersey"); printf("Los toros de raza Jersey tienen una longitud máxima de %f y un rango de %f\n",maximoLon(tf,numf),rangoLon(tf,numf)); }
ANEXO float minimoLon(const TablaReales t, int n){ float min; int i; min=t[0]; for(i=0;i
} return min; }