FUNDAMENTOS DE PROGRAMACIÓN PRÁCTICA 25: LENGUAJE C (III) Curso: 2010/11 Versión: 1.0.0 SOLUCIONES vectores.h #ifndef VECTORES_H_INCLUDED #define VECTORES_H_INCLUDED #include <stdio.h> #define DIM 20 typedef double Vector[DIM]; void leeVector(Vector, int); void escribeVector(const Vector, int); int buscaElementoVector(const Vector , int, double); double mediaAritmeticaVector(const Vector, int ); double productoEscalar(const Vector, const Vector , int ); void mayoresVector(const Vector , int , double, Vector , int *); #endif matrices.h #include <stdio.h> #include "vectores.h" #define #define typedef typedef typedef typedef FIL 20 COL 10 double Matriz[FIL][COL]; enum {falso, cierto} boolean; int * intP; double * doubleP; void leeMatriz (Matriz, int , int); void escribeMatriz (const Matriz, int, int ); void buscaElementoMatriz(const Matriz, int, int, double, intP, intP); void maximoMatriz(const Matriz , int, int c, intP, intP, doubleP); void sumaMatriz(const Matriz , const Matriz, int , int, Matriz); void mediasPorFila(const Matriz , int , int , Vector); void mediasPorColumna(const Matriz, int, int, Vector); #endif vectores.c #include "vectores.h" void leeVector(Vector v, int n) { int i; for(i=0;i<n;i++) { printf("deme el elemento %d-esimo: ",i); scanf("%lf",&v[i]); } } Práctica 25: Lenguaje C (III) 2 void escribeVector(const Vector v, int n) { int i; printf("los elementos del vector son: \n"); printf("[ "); for(i=0;i<n;i++) printf("%5.2lf ",v[i]); printf ("]\n"); } int buscaElementoVector(const Vector v, int n, double x) { int i,pos = -1; for(i=0;i<n;i++) if (v[i] == x) { pos = i; break; } return pos; } double mediaAritmeticaVector(const Vector v, int n) { double suma = 0.0; int i; for(i=0;i<n;i++) suma += v[i]; return suma/n; } double productoEscalar(const Vector v, const Vector w, int n) { double p = 0; int i; for(i=0;i<n;i++) p = p + v[i] * w[i]; return p; } void mayoresVector(const Vector v, int n, double x, Vector w, int *m){ int i,j = 0; for(i=0;i<n;i++) if(v[i] >= x) { w[j] = v[i]; j++; } *m=j; } Práctica 25: Lenguaje C (III) 3 matrices.c #include "vectores.h" #include "matrices.h" void leeMatriz (Matriz m, int f, int c) { int i,j; for(i=0;i<f;i++) for(j=0;j<c;j++){ printf ("escriba el elemento (%d,%d): ",i,j); scanf("%lf",&m[i][j]); } } void escribeMatriz (const Matriz m, int f, int c) { int i,j; for(i=0;i<f;i++) { for(j=0;j<c;j++) printf("%5.2lf printf("\n"); } ",m[i][j]); } void buscaElementoMatriz(const Matriz m, int f, int c, double x, intP fenc, intP cenc) { int i,j; boolean enc = falso; *fenc = -1; *cenc = -1; for(i=0;i<f && !enc;i++) for(j=0;j<c && !enc;j++) if(m[i][j] == x) { *fenc = i; *cenc = j; enc = cierto; } } void maximoMatriz(const Matriz m, int f, int c, intP fm, intP cm, doubleP max) { int i,j; *max = m[0][0]; *fm = 0; *cm = 0; for(i=0;i<f;i++) for(j=0;j<c;j++) if(m[i][j] > *max) { *fm = i; *cm = j; *max = m[i][j]; } } Práctica 25: Lenguaje C (III) void sumaMatriz (const Matriz m, const Matriz n, int f, int c, Matriz sum) { int i,j; for(i=0;i<f;i++) for(j=0;j<c;j++) sum[i][j] = m[i][j]+n[i][j]; } void mediasPorFila(const Matriz m, int f, int c, Vector medias) { int i; for(i=0;i<f;i++) medias[i] = mediaAritmeticaVector(m[i], c); } void mediasPorColumna(const Matriz m, int f, int c, Vector medias) { int i,j; Vector columnas; for(j=0;j<c;j++) { for(i=0;i<f;i++) columnas[i] = m[i][j]; medias[j] = mediaAritmeticaVector(columnas, f); } } 4