Ejercicios Resueltos en C: Arrays, Primos, Matrices y Funciones
1) Construya una función tal que, dado un array de números reales y un valor real P, devuelva cuántos elementos hay que sumar desde el primer valor para superar P.
#define MAX 100
typedef double ArrayReal [MAX];
int SuperarP (ArrayReal A, int tamA, double P) {
int i; double suma; int resul;
suma = 0.0;
resul = 0;
while (suma <= P) {
resul++;
suma = suma + A[i];
i++;
}
return resul;
}
2) Dado un valor entero n, construya una función que devuelva en un array los n primeros valores primos. Supongamos n menor de 100.
#define TAM 100
typedef int ArrayEnteros [TAM];
void primerosPrimos (ArrayEnteros, int);
int siguientePrimo (int);
int esPrimo (int);
void primerosPrimos (ArrayEnteros t, int n) {
int i; int sp = 1; // sp: siguiente primo
for (i = 0; i < n; i++) {
t[i] = sp;
sp = siguientePrimo(sp);
}
}
int siguientePrimo (int n) {
int r = n + 1;
while (esPrimo(r) == 0) {
r = r + 1;
}
return r;
}
int esPrimo (int n) {
int i; int r = 1;
for (i = 2; i < n; i++) {
if (n % i == 0) {
r = 0;
break;
}
}
return r;
}
3) Tenemos un array de cadenas con los nombres de unos alumnos y un array de valores reales con sus notas (ambos del mismo tamaño). Construya una función que, dados ambos arrays, devuelva otro con los alumnos que han aprobado (nota mayor o igual que 5).
AlumnosAprobados(VectorNotas tnotas, tablaCadena alumnos, int n, TablaCadena taprobados) {
int numAprobados = 0, i;
for (i = 0; i < n; i++) {
if (tnotas[i] >= 5) {
taprobados[numAprobados] = alumnos[i];
numAprobados++;
}
}
return numAprobados;
}
4) Dada una matriz de números reales, construya una función que devuelva su valor máximo.
#define NUMFIL 100
#define NUMCOL 50
#define TAM 200
typedef double matrizReal [NUMFIL][NUMCOL];
typedef double vectorReal [TAM];
double valorMaximo (const matrizReal m, int nf, int nc) {
int i, j;
double vm = m[0][0];
for (i = 0; i < nf; i++) {
for (j = 0; j < nc; j++) {
if (m[i][j] > vm) {
vm = m[i][j];
}
}
}
return vm;
}
5) Dada una matriz de números reales, construya una función que devuelva un array con la suma de sus elementos por filas.
#define NUMFIL 100
#define NUMCOL 50
#define TAM 100
typedef double MatrizReal [NUMFIL][NUMCOL];
typedef double ValorReal [TAM];
void sumFil (const MatrizReal m, int nc, int nf, ValorReal resul) {
int i, j;
for (i = 0; i < nf; i++) {
double sumfil = 0.0;
for (j = 0; j < nc; j++) {
sumfil = m[i][j] + sumfil;
}
resul[i] = sumfil;
}
}