Funciones Matriz Dinámica

3 12 2007

Funciones necesarias para manejar una matriz dinámica: inicializar, introducir elemento, sacar elemento, limpiar.

Código testado, funciona perfectamente.


stdmatriz.c
/*LIBRERIAS*/
#include
#include
#define STDMATRIZ_C
/*TIPOS*/
struct matriz
{
int **datuak;
int dim_et;
int dim_tr;
};
typedef struct matriz *MATRIZ;
/*PROTOTIPOS*/
#include "stdmatriz.h"
/*FUNCIONES*/
MATRIZ iniM(int dim_et, int dim_tr)
{
MATRIZ m;
int i=0, err=0;
m=(MATRIZ)malloc(sizeof(struct matriz));
if (m==0)
return NULL;
else
{
m->datuak=(int **)calloc(dim_tr,sizeof(int*));
if(m->datuak==0)
return NULL;
else
{
do
{
m->datuak[i]=(int *)calloc(dim_et,sizeof(int));
if (m->datuak[i]==0)
err=1;
i++;
}
while(idim_et=dim_et;
m->dim_tr=dim_tr;
return m;
}
}
char matrizeanSartu(MATRIZ m,int et,int tr,int balioa)
{
if (etdim_et) && trdim_tr))
{
m->datuak[et][tr]=balioa;
return 0;
}
else
return 1;
}
int matrizetikAtera(MATRIZ m,int et,int tr)
{
int balioa;
return (balioa=m->datuak[et][tr]);
}
void freeM(MATRIZ m)
{
free(m);
}

stdmatriz.h
#ifndef STDMATRIZ_H
#define STDMATRIZ_H
#ifndef STDMATRIZ_C
typedef void *MATRIZ;
#endif
MATRIZ iniM(int dim_et, int dim_tr);
char matrizeanSartu(MATRIZ m,int et,int tr,int balioa);
int matrizetikAtera(MATRIZ m,int et,int tr);
void freeM(MATRIZ m);
#endif


pruebasMatriz.c
#include
#include
#include "stdmatriz.h"
int main(void)
{
void *m;
int dim_et=2,dim_tr=2;
int et,tr;
m=iniM(dim_et,dim_tr);
for (et=0;et<dim_et;et++)
{
for (tr=0;tr<dim_tr;tr++)
{
matrizeanSartu(m,et,tr,0);
printf("%d",matrizetikAtera(m,et,tr));
}
printf("\n");
}
freeM(m);
getchar();
return 0;
}

En Dev-C++ hay que quitar el #ifndef que define el typedef void *MATRIZ, y poner el tipo de la matriz (struct matriz {…}; typedef struct matriz *MATRIZ;):

strmatriz.h
#ifndef STDMATRIZ_H
#define STDMATRIZ_H
struct matriz
{
int **datuak;
int dim_et;
int dim_tr;
};
typedef struct matriz *MATRIZ;
MATRIZ iniM(int dim_et, int dim_tr);
char matrizeanSartu(MATRIZ m,int et,int tr,int balioa);
int matrizetikAtera(MATRIZ m,int et,int tr);
void freeM(MATRIZ m);
#endif

También hay que meter los 3 en el mismo proyecto.
En linux, hay que compilar por comandos y usando gcc los dos .c’s, y despues linkarlos con gcc poniendo:

gcc -Wall stdmatriz.o main.o -o pruebas


Acciones

Information

One response

4 12 2007
Igor Ordoñez Rodriguez

Ok Dani ahora lo pruebo por cierto voy a poner informacion sobre el puerto de serie en linux, lo veo bastane mas dificil que en Windows, os dejo la informacion arriba y valoramos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: