FUNCIONES.CPP (Boletín 6)
#include <stdio.h>
#include "funciones.h"
// Ejercicio 5
void SumaFila(MatrizReal m, int numc, int numf, VectorReal res, int *numElem) {
int i, j;
float suma = 0;
for(i = 0; i < numf; i++) {
for(j = 0; j < numc; j++) {
suma = suma + m[i][j];
}
res[i] = suma;
suma = 0;
}
*numElem = numf;
}
// Ejercicio 6
void SumaColumna(MatrizReal m, int numc, int numf, VectorReal res, int *numElem) {
int i, j;
float suma = 0;
for(i = 0; i < numc; i++) {
for(j = 0; j < numf; j++) {
suma = suma + m[j][i];
}
res[i] = suma;
suma = 0;
}
*numElem = numf;
}
// Ejercicio 7
void ExtraeDiagonal(MatrizReal m, int numf, int numc, VectorReal v, int *numElem) {
int i, j;
for(i = 0; i < numf; i++) {
for(j = 0; j < numc; j++) {
if(i == j) {
v[i] = m[i][j];
}
}
}
*numElem = numf; // ó numc
/* Otra solución posible
for(i = 0; i < numf; i++) {
v[i] = m[i][i];
*/
}
// Ejercicio 8
void extraeFila(MatrizReal m, int numc, int indice, VectorReal res, int *numElem) {
int c;
for(c = 0; c < numc; c++) {
res[c] = m[indice][c];
}
*numElem = numc;
}
// Ejercicio 9
void extraeColumna(MatrizReal m, int numf, int indice, VectorReal res, int *numElem) {
int f;
for(f = 0; f < numf; f++) {
res[f] = m[indice][f];
}
*numElem = numf;
}
// Ejercicio 10
void extraeSubMatriz(MatrizReal m, int dim, int a, int b, MatrizReal res, int *numf, int *numc) {
int f, c;
if(a < 0 || a >= dim)
printf("NÚMERO a NO VÁLIDO");
if(b < 0 || b >= dim)
printf("NÚMERO b NO VÁLIDO");
for (f = a; f < dim; f++) {
for (c = b; c < dim; c++) {
// Implementación pendiente
}
}
}
FUNCIONES.H
#define N 20
#define M 20
typedef float VectorReal[N];
typedef float MatrizReal[N][M];
void SumaFila(MatrizReal, int, int, VectorReal, int*);
void SumaColumna(MatrizReal m, int numc, int numf, VectorReal res, int *numElem);
TEST.CPP
#include "funciones.h"
#include <iostream>
#include <stdio.h>
using namespace std;
void main(void) {
MatrizReal m = {{1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}};
VectorReal res;
int numElem;
int i;
// Ejercicio 5
SumaFila(m, 3, 3, res, &numElem);
cout << "El vector resultado tiene: " << numElem << endl;
cout << "
";
for(i = 0; i < numElem; i++) {
printf("%.2f ", res[i]);
}
// Ejercicio 6
SumaColumna(m, 3, 3, res, &numElem);
cout << "
El vector resultado tiene: " << numElem << endl;
cout << "
";
for(i = 0; i < numElem; i++) {
printf("%.2f ", res[i]);
}
}
TIPOS.H (Boletín 7)
#include <stdio.h>
#define MAXCAR 256
typedef FILE* Fichero;
typedef char Cadena[MAXCAR];
typedef char TablaCaracteres[MAXCAR];
typedef int TablaEnteros[MAXCAR];
typedef struct {
Cadena nombre;
Cadena apellidos;
int edad;
} Persona;
int lecturaGenoma(Cadena);
int cargaTablaConLecturaGenoma(Cadena, TablaCaracteres);
void lecturaGenomas(Cadena, TablaEnteros, int*);
PROGRAMAPRINCIPAL.CPP
#include "tipos.h"
void main(void) {
int numN, i, numElem;
TablaCaracteres tc;
TablaEnteros te;
// EJERCICIO 5
printf("
-- Ejercicio 5:
");
numN = lecturaGenoma("genoma.txt");
printf("
El número de nucleótidos es %d", numN);
// EJERCICIO 6
printf("
-- Ejercicio 6:
");
numN = cargaTablaConLecturaGenoma("genoma.txt", tc);
printf("
El número de nucleótidos es %d", numN);
for(i = 0; i < numN; i++) {
printf("%c", tc[i]);
}
// EJERCICIO 7
printf("
-- Ejercicio 7:
");
lecturaGenomas("genomas.txt", te, &numElem);
printf("
El número de genomas es %d", numElem);
for(i = 0; i < numElem; i++) {
printf("Organismo %d con %d nuc", i, te[i]);
}
}
FUNCIONES.CPP (Operaciones con Ficheros)
#include "tipos.h"
// E5
int lecturaGenoma(Cadena nomF) {
char car;
int cont = 0;
Fichero f;
f = fopen(nomF, "r"); // Modo lectura (r)
if(f == NULL)
printf("
Error en la apertura del fichero");
else {
fscanf(f, "%c", &car); // Lectura anticipada del fichero
while(!feof(f)) { // Mientras no sea fin de fichero
cont++;
printf("%c", car);
fscanf(f, "%c", &car);
}
fclose(f);
}
return cont;
}
// E6
int cargaTablaConLecturaGenoma(Cadena nomF, TablaCaracteres tc) {
Fichero f;
char car;
int cont = 0;
f = fopen(nomF, "r");
if(f == NULL)
printf("
Error en la apertura del fichero");
else {
fscanf(f, "%c", &car);
while(!feof(f)) {
tc[cont] = car;
cont++;
fscanf(f, "%c", &car);
}
fclose(f);
}
return cont;
}
// E7
void lecturaGenomas(Cadena nomF, TablaEnteros t, int *ne) {
Fichero f;
char nuc;
int pos, cont = 0;
*ne = 0;
f = fopen(nomF, "r");
if(f == NULL)
printf("
Error en la apertura del fichero");
else {
fscanf(f, "%c", &nuc);
while(!feof(f)) {
cont++;
fscanf(f, "%c", &nuc);
if(nuc == '\n') {
pos = *ne;
t[pos] = cont;
*ne = *ne + 1;
cont = -1;
}
}
fclose(f);
}
}
// EJ8
/*
void leePac(Cadena nomf, TablaPacientes tp, int *numPac) {
Fichero f;
Cadena ap1, ap2, nom;
Paciente pac;
f = fopen(nomF, "r");
if(f == NULL)
printf("
Error en la apertura del fichero");
else {
*numPac = 0;
fscanf(f, "%s%s%s", ap1, ap2, nom); // Leer el paciente
while (!feof(f)) {
strcpy(pac.nombre, nom);
strcpy(pac.apellidos, strcat(ap1, ap2)); // Concatenar
pos = *numPac;
tp[pos] = pac;
*numPac = *numPac + 1;
fscanf(...);
}
fclose(f);
}
}
*/