T11395.pdf

Anuncio
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE I N G E N I E R Í A ELÉCTRICA
TESIS PREVIA A LA OBTENCIÓN DEL TITULO DE
.INGENIERO
EN ELECTRÓNICA Y CONTROL
"IDENTIFICACIÓN DE TRASTORNOS DEL RITMO
DEL CORAZÓN MEDIANTE ANÁLISIS DE
ELECTROCARDIOGRAMAS
Jorga Lenin Aguilar Navas
Quito, Diciembre de 1995
"
CÓDIGO FUENTE DEL PROGKKMA
EN LENGUAJE C
Ingeniería Eléctrica
CÓDIGO FUENTE DEL PROGRSMA EN LENGUAJE C
** Modulo de menus
** Esta fruición despliega el menú del sistema que es de tipo pull-down
** se tiene la definición de los ítems de cada menú
/* Definición de código de teclas */
#defínehome 327
#defíneend335
tí define upkey 328
#defíne downkey 336
#defínelefíkey33i
#defíne rightkey 333
#defíne escape 27
#defíne enter 13
/* Librerías utilizadas en el sistema */
#include <stdio.h>
#inclnde <graphics.h>
#include <conio..h>
#include <dos.n>
^include <stdlib.h>
#inciude <siring.h>
#include <ctype.h>
#include <alloc.h>
/* Inclusión de libreria propia */
#Ínclude "airitmia.K"
/* Funciones definidas externamente en otros módulos */
extern voíd inicial(void);
extern int getkey (void);
extern void leer_arckivo (void):
extern void grafico3 (void);
exíemvoid estadis3 (void);
extem void frecuen (void);
extern void ritmo (void);
extern void ritmo2 (void);
_ -i
_
E.P.N.
.ingeniería Eléctrica
extern void ejelec (void);
extern void ondap (void);
extern void pr (void);
extern void ondaq (void);
extern void qrs (void);
extern void qt (void);
extern void st (void);
extern void ondat (void);
extern void ondau (void);
extern void ayuda (void);
/* Funciones definidas en este modulo */
void font_setup( void);
int menu_phamton(mt posx, int posy, int numopc, char *opc[]);
/* Definición de variables globales utilizadas en el programa */
FILE *infíle; /* Declaración para usar con el archivo */
charmame[32]; /* Variable para el nombre del archivo */
float RR{20]; /* Vector de los Intervalos RR */
int numint; /* Numero de intervalos
*/
/********* CÓDIGO DE LA FUNCIÓN MAIN QUE DESPLIEGA EL MENÚ *********/
void mainQ
int item_meuu = 0; /* indicara la opción que el usuario seleccione del menú */
int leer = 0;
/* si leer es cero, debo leer eí teclado */
char
"Abrá- ai-chivo",
"Salir",
char *graficosQ=
{
"Gráfico xy",
char *estadisticaQ=
E.P.N. _
{
"Estadísticas",
};
char *proceso[]=
{
"Intervalos",
"Diagnostico",
};
char *otros[]=
{
"Ritmo",
"Eje eléctrico",
"OndaP",
"Intervalo PR",
"OndaQ"}
"Complejo QRS",
'Intervalo QT",
"Segmento ST",
"OndaT",
"Onda U1',
char *aYuda(]=
r
"Parámetros",
int opción, salir = 0;
/* Llamo a función que iniciaíice la pantalla en modo gráfico */
inicialQ;
I* Escribo los títulos de los pull-down menus */
outtextxy(20,0/FArchivos");
outtexbty(110;0;"Graficos'r);
outtexbty(215,0;FEstadistica");
outtexbcy(320>Os"Proceso");
outtextxy(400,0;'Otros");
outtex(xy(460;0;'ayudafl);
rectaugle(0,10;getmaxx()Jgetmaxy());
setviewport(4714Jgetmaxx()-45getmaxy()-4,0);
Ingeniería Eléctrica
E . P . N . -Ingeniería Eléctric
/* Lazo do para escoger opciones del menú */
do
iífleer —
opción = geíkey();
opción = toupper(opcion);
if (opción = 65)
item_menu = menu__phamton(10, 1, 2, archivos);
leer = 1;
switch (item_menu)
{
case O :
Ieer = G;
leer_arcmVo();
break;
case 1 : salir — 1; break;
case 99 : opción = 89; break;
case 98 : opción = 71; break;
if (opción ==71)
{
?
1? gráficos);
leer- 1;
switch (item_menu)
case O :
ieer-0;
grafico3();
break;
case 99 : opción = 65; break;
case 98 : opción - 69; break;
if (opción = 69)
itemjnenu = menu_phamton(205, 1, I s estadística);
leer = 1;
switch (item_nienu)
{
case O :
leer = 0;
_ 4 _
E.P.N. -.Ingeniería Eléctric
estadis3();
break;
case 99 : opción = 71; break;
case 98 : opción — 80; break;
if (opción = 80)
{
itemjnenu^menujhamton^lO, 1, 2, proceso);
leer=l;
s witch( item_menu)
{
case O :
leer = 0;
frecuenQ;
break;
case 1 :
ritmoQ;
break;
case 99 :
case 98 :
opción = 69; break;
opción — 79; break;
if (opción =79)
item_menu — menu_phamton(390, 1, 10? otros);
leer = 1;
swiícb(itemjnenu)
{
case O :
Ieer-0;
rítmo2();
break;
case 1 :
leer = 0;
ejeiecQ;
break;
case 2 :
leer = 0;
ondapQ;
break;
case 3 :
break;
E.P.N. -_ -Ingeniería Eléctric
case 4 :
leer = 0;
ondaqQ;
break;
case 5 :
leer = 0
break;
case 6 :
qt();
break;
cas© 7 :
break;
case 8 :
ondatQ;
break;
case 9 :
leer=0;
ondau();
case 99 : opción = 80; break;
case 98 : opción - 89; break;
if (opción =89)
item_menu = meiui_phamton(460., 1? 1, aYuda);
leer = 1;
switch(item_menu)
{
case O :
leer-0;
ayuda();
break;
case 99 : opción = 79; break;
case 98 : opción ~ 65; break;
if (iteni_menu ^ 90)
o —
E.P.N.
Ingeniería Eléctrica
opción = 0;
leer = 0;
ufóle (salir == 0);
closegraphQ;
return;
/* Fin del main */
}
/* Setear las características de los íbnts, de las lineas, y de los
llenados de las figuras */
voíd font_setup(void)
{
>
settextstyle(DEFAULT_FONT^IORIZ_DIR,l);
setfillstyle(SOLID_FILL,0);
setIinesíyle(SOLJDJJNE,l,l);
setcolor(15);
y******:Mc*:fc*:****#***************^
/* Estafimcion se encarga de desplegar el pull-downmenu, luego pone
en reversa (light bar) ías opciones que el usuario selecciona del menú,
finalmente devuelve un numero que representa la opción seleccionada */
int menu_phamton(int posx, int posy, int numopc, char *opc[])
int i, separador =.16;
int selección, retornar,
int item_inix, item_inÍy;
int item_Jmx, item_finy;
int ítem = 0;
intx;y, largo, longitud, niai'genx, inargeny;
unsigned size;
void *bitmap, *bititem;
int altura;
int salida — 0;
int variablel, variable2;
- 7
E.P.N,
—
Ingeniería Eléctrica
/* El separador es el numero de píxeles que separa cada opción */
/* Despliego las opciones del menú desde posx, posy */
/* Debo dibujar el rectángulo que abarca el menú */
/* Averiguo cual es el Ítem del menú mas largo */
largo = íexrwidtíi(opc[0]);
altura = 8;
for (i=l; i<numopc; i++)
/* porque es en modo gráfico */
/* 8 pixeles */
longitud = textwidíh(opc[i]);
if (largo < longitud) largo = longitud;
/* Averiguo el numero total de pixels necesarios en x e y
para dibujar los bordes */
x = íargo + 30;
/* el largo normal mas 15 pixels por lado */
y = altura * numopc + separador * (numopc -i-1);
/* Con las coordenadas, debo guardar el área de la pantalla que voy a usar */
size = imagesize(posx, posy, posx -H x, posy 4- y);
biímap = malloc(size);
getimagefaosx, posy, posx + x, posy + y, bitmap);
/* Dibujo el rectángulo y lo pinto de negro */
setfiIlstyle(SOUD_FILL,0);
bar(posx> posy, posx + x, posy + y);
rectangle(posx, posy, posx + x, posy + y);
/* Escribo las opciones */
margenx = posx + 15;
margeny = posy + separador;
for (i=0; i < numopc; i+4-)
{
outtextxy(margenxjmargeny,opc[i]);
margeny = margeny + separador + 8;
>
variablel = posy -f sepai'ador/2;
variable2 ~ al twa + separador;
/* Debo prender el light bar o phamton cui-sor en ía primera opción,
esto se hace poniendo en reversa el texto del menú */
/* Necesito las coordenadas del ítem, y almacenarlo en un puntero para
su posible recuperación posterior */
E.P.N.
Ingeniería Eléctrica
ítem_mix= posx-i- separador / 2;
item_iniy = variablel;
item_fmx = item_inix + largo 4- separador,
ítem_finy — item_jniy -H varíable2;
size = imagesize(item_iaix)item_iníyjitem_ímx,ítem_íiny);
biíitem =maJíoc(síze);
getímage(item_mix?item_iniy,item_finx)item_jfinj% bititem);
putimage(itera_inix) item_iniy, bititem, NOT_PUT);
/* Proceso de selección de la opción */
do
{
selección = ge&ey();
swítch (selección)
{
case escape :
retornar = 90;
salida = 1;
break;
case enter
:
retomar = item;
salida = 1;
break;
case downkey:
putimage(item_inix,item_iniy>bititem> COPY_PUT);
if(item < numopc)
item-H-;
ií(iíem = numopc) item = 0;
item_miy ~ variablel + item * variabíe2;
item_fíny = variablel + (item +1) * variabíe2;
getimage (item__imXitem_iniy, ítem_íínx, item_finy.,b ititem);
putimage(item_mixíitem_miy>bititem^1íOT_PÜT);
break;
case upkey:
putÍmage(item_inix;item_iniy>bititem)COPY_PUT);
ií(item < nuinopc)
iíem--;
if(item < 0) item = numopc - 1;
item_iiiiy = variablel + item * variable!;
item_fmy = variable-l + (item + 1) * variable!;
getimage(iÉem_inix?item_iniy;item_fmx;item_finy5bidtem);
putímage(itemJnix,item_iniy7bititeia>íOT_PÜT);
break; .
Ingeniería Eléctrica
case home:
putimage(item__iníx,item_miy3b ititem, COPY_PUT);
ítem ~ 0;
ítem_iniy = variablel 4- ítem * variable!;
ítem_finy = variablel + (Ítem 4 1) * variable!;
getimageíitem^Jnix, itemjniy, item_ñnx, ítem Jfiny.b ititem) ;
putimagefitem^inix, item_iniy , bititem^NGT_PUT);
break;
case end:
puíimageíiteni^iníXjítem^iniy^itíteni, COPY_PUT);
ítem = numopc - 1;
item_iniy = variablel + ítem * variable!;
item_fíny = variablel 4 (ítem 4 1) * variable!;
A
>
getimage (item_inix>item_iniy, item^finx^iteinjíiiy^b ititem);
putimage(item_inix, item_imy,b ititem^NOT^PTJT) ;
break;
case leftkey:
retornar = 99;
• salida— 1;
break;
case rightkey:
retornar = 98;
salida= 1;
break;
while (salida I— 1);
/* restauro la pantalla */
putiniage(posx, posyt bitmap, COPY_PTJT);
fi-ee(bitmap);
free(b ititem);
return retornar,
}
/* Fin de desplegar el pull-down menú */
1O -
E.P.N,
__
Ingeniería Eléctrica
/******# *************** INICIAL. CPP *####*********#*************/
** Función que inicial iza el modo gráfico realizando chequeo.
** El sistema es desarrollado en el paquete Turbo C++.
**E1 modelo de memoria utilizado para la compilación
** fue médium.
**
** Realizado por Jorge Aguilar Navas - E.P.N.
** ultima versión: 2 de Mayo de 1993
/* Librerías utilizadas en el sistema */
#Íncmde <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include <cíype.h>
#include "arritmia.h"
void inicial (void)
/* Necesito un bloque de memoria que lo tomare de la memoria DOS
mediante un far pointer, para el manejador de memoria virtual */
unsigned int puní ero_blo que ~ 4096;
int gdriver t gmode, errorcode;
unsigaed bloque^memoria^ 4096;
int erroraíloc;
/* Si allocmera da error */
/* Al inicio verifico que el hardware es el adecuado */
detectgraph(&gdriver, &gmode); /* detecto el tipo de tarjeta gráfica */
eiTorcode = graphresult();
/* averiguo si existió algún error */
if (errorcode f= grOk)
/* existió un error */
{
printf ("Computadora sin tarjeta grafica\nV);
príntf ("Cualquier tecla para volver al DOSW);
getchQ;
abortQ;
/* terminar ejecución con código error */
- 11
E.P.N. -:-Ingeniería Eléctric
/* se debe conocer sí la tarjeta es una VGA */
if (gdriver != 9)
{
/* 9 es el código de la VGA */
printf ("Computadora no tiene tarjeta VGAW);
printf ("Este programa funciona solo con VGA\nW);
printf ("Cualquier tecla para volver al DOSW);
getchQ;
abortQ;
/* En este punto el computador tiene tarjeta VGA, hay que ínícíalizar
el sistema gráfico. Modo VGAffl es decir 640*480 de resolución y
un máximo de 16 colores o sombras de gris */
/* Tipo de tarjeta VGA = 9 y tipo de resolución VGAHI = 2 */
gdriver = 9;
gmode = 2;
/* Instalo eíBGI*/
initgraph (&gdriver? &gmode, " ");
errorcode = graphreEult ();
if (errorcode !— grOk)
{
printf ("Existe un error en el modo graficoW);
switch (errorcode)
{
case -2:
case -3:
case -4:
case -5 :
case -11:
printf("No existe hardware adecuad o\n");break;
printf("No existe driver egavga.bgi\n");break;
printf("EI egavga.bgi esta alíerado\n");break;
printff'Falta memoria para cargar driver\n");break;
printf("Error desconocido en modo grafíco\n");break;
}
printf(" Cualquier tecla para volver al DOS\n");
getch();
abort();
E.P.N.
Ingeniería Eléctrica
/* Reviso la memoria RAM disponible */
erroralloc — allocmen^bloque^emoría, &puntero_bíoque);
if (erroralloc í=-l)
{
príníf ("Computadora no tiene suficiente memoria RAM.W);
printf ("No puedo continuar con la ejecución del programa.\n");
ábortQ;
/* En este punto, el manejador de memoríaya esta instalado */
/* El sistema ya esta en modo gráfico. Se puede proceder a desplegar
la interfase del mismo */
retura
/* Vuelvo al DOS */
E-P.N.
Ingeniería Eléctrica
***#**************#*#**#**#*/
/* lee una tecla de bufíer del teclado y retoma su valor ASCII,
si la tecla es una función o tecla especial, retorna el valor
especificado en ía Guia de Programadores de Norton + 256 */
/* archivos include */
#in elude <dos.h>
#include "arritmía,h"
int getkey(void)
unión REGS regs;,
regs.h,ah = 0;
iütSó(Üxló, &regs, &regs);
return( (regs.li.al = 0) ? regs.h.ah-f- 256 : regs.kal);
ARCHCVO2 CPP ****:fí*****************************/
/***#*********************^
** Esta función lee el nombre del archivo de datos y lo despliega
** en la pantalla con opción a escape.
$include
#include <sys\stat.h>
#include <fcntl.h>
^include <stdlib.h>
^include <stdio.h>
fcclude <string.h>
fcclude <gr^íhics.h>
#include <conio.h>
^inciude <ctype.h>
^include <dir.h>
e "airianiah"
extera FELE *infíle;
extern charfiiame[32];
14 -
E.P.N.
Ingeniería Eléctrica
void leer_archivo(void)
{
char
texto[200];
int
void
tamanio;
*ptrbitmap;
int
letras;
char carácter;
/* el tamaño del área donde colocar el mensaje */
/* puntero a bitmap
*/
/* contador para# de letras digitadas
/* el carácter digitado
*/
int
linea, tecla;
FULE *file_pointer, /* puntero a archivo para verificar que existe */
structfíblkfíblk;
int done;
int lineas;
int fila;
int columna;
char mensage[80];
/* Despliego en pantalla todos los archivos existentes
para luego ingresar uno de ellos desde teclado
outtextxy(40?20, "Listado de archivos: *.dat");
done = fmdfírst("*.daí",&fíblk,0);
columna = 40;
lineas — 1;
while (ídone)
^lO Alineas + 30;
sprintí(mensage}" %s"
outtexbcyícolumna-íi I a,mens age);
if (fíla>260)
r
}
columna = columna + 120;
lineas = 0;
lineas-B%
done -findnext(&fíblk);
outtextxy (40,300/Tulse una tecla para continuar");
getchQ;
- 15 -
*/
*/
E.P.N.
Ingeniería Eléctrica
/* Lectura del nombre del archivo */
/* almacenar el área de la pantalla donde se desplegara el mensaje */
tamanio = ímagesize(110,340,330,385);
ptrbitmap — malloc (tamanio);
getimage(110, 340, 330, 385,ptrbítmap);
setfiUsíyle(SOIID_FnXJ0);
bar(110, 340, 330, 385);
rectangle(110, 340, 330, 385);
/* dibujo el rectángulo V
/* debo escribir el texto en el recuadro */
outtextxy(120)355,"]hgrese Nombre de Archivo ");
outtextxy(120,375,"
.DAT');
outtextxy(120>377>"
");
moveto(120,375);
/* debo hacer un proceso para la lectura del nombre */
strcpyíihame,"
");
letras = 0;
while (letras < 8)
{
carácter = getchQ;
/* leo del teclado sin eco */
if (carácter = 13) break;
carácter = toupper(carácter); /* transformo am^usculas */
if (((caracter>64) && (caracter<91)) ((caracter>47) && (caracter<58)) ||
carácter := 45 || carácter = 46)
{
fhamefletras] = carácter;
ouítexbty(120J375,fiiame);
}
letras-H-;
}
/* lo almaceno en el vector mame */
/* Es un carácter valido, ío imprimo */
/* end if */
/* end do while */
strcatí&ame/'.dat");
/* Verifico existencia de archivo */
if ( (fiie_pointer = fopeu(fiiaaie; "rb")) ^NULL )
{
outtextxy (120>405/'Archivo no existe");
outtextxy (120?425;M3htente de nuevo");
getchQ;
clearviewport();
E.P.N.
,
Ingeniería Eléctrica
i
else
{
/* Muestra en pantalla las coordenadas numéricas de ía derivación */
fblose (file_pointer);
iníile — fopenífiíame, "r");
if (infile E=NULL)
{
linea = 10;
tamanio = 0;
clearvíewportQ;
while (!feof(infíie))
{
ígets(texío} 200, infile);
o«ítextxy(5, linea, texto);
linea += 10;
íamanio-H-;
if (tamanio > 42)
/* Limite de 42 lineas por pantalla */
{
}
tecla = getkey();
clearviewportQ;
tamanio — 1;
linea = 10;
}
/* if */
if (tecla — 27) break; /* escape, debo salir */
}
/* while */
if (tecla N 27) getchQ;
fclose(infíle);
clearviewport();
f* if infile */
else
putimage(110? 340, ptrbitmap, COPY_PUT);
}
/* Fin de verificación de existencia de archivo */
fi-ee(ptrbitmap);
return;
>
/* restauro pantalla */
/* libero memoria ocupada */
/* Fin de leer archivo */
17 -
E.P.N.
Ingeniería Eléctrica
RSTADIS3 CPP
** Programa que lee datos numéricos ;
** da promedio , desviación estándar t
** numero mínimo , numero máximo
**
** Turbo Cversion 2.0
** Para compilar : tcc tesisl.c graphícs.lib egavga,obj
*#
** Realizado por Jorge Aguiíar Navas - E.P.N.
** Ultima versión: 14 de Septiembre de 1993
*/
#include <stdio.Íi>
#include <stdlib.h>
#include <floatli>
#incíude- <mam.h>
fcclude <graphics.h>
#include <coiiio.h>
#include <ctype.h>
#include- "aiTÍtmia.k"
extern FELE *infiie;
extera charfiiame[32];
void estadis3(void)
int i? ndatos, dx; dy;
fioat suin, pi'onx, may, inen, d, mayx, metix, suma, promx, e;
floatxdato^ydato;
iní tamanio;
void *ptrbitmap;
char mensage[500];
tamanio =
pírbitmap = malJoc(tamaoio);
sprintf (mensage/'ESTADISHCAS DEL ARCHIVO Vos
ouíf extxy(40,3 O^mensage);
infile ^
, "r");
E.P.N,
Ingeniería Eléctrica
if(árfUe !=NÜLL)
sum = 0.0; suma— 0.0;
ndatos-0;
whííe (fscanf(iniile,''%f %f ,&xdato,ábydato) != EOF)
if (índatos)
may = men = ydato;
if((ndatos) = 0)
menx = xdato;
if(EOF)
mayx = xdato;
5um-H=ydato;
suma-H=xdato;
if(may < ydato)
may — ydato;
if(men> ydato)
men = ydato;
ndatos~H-;
}
/* Fin del while de lectura de datos */
pr om=sura/ndato s;
prom^suma/ndatos;
rewind (infiie);
e=0.0;
for (d=0.0} i=0; i<ndatos; i++)
fscanf(mfile/Tof%^&xdato;&ydaío);
d-f=(ydato-prom)*(ydato-prom);
d/=ndatos;
éMidatos;
d-sqrt(d);
e - sqrt(e);
spríntf(mensage,"Numero de datos =%d"^idatos);
outtextxy(40;60Jmensage);
sprintf (meusage,1 humero mayor de Y =%.2f
=%.2ft5rnay?men);
oiittextxy(40;80íinensage);
sprintf (mensage,"VaIor medio de Y =%.2f
=%.2f',prom,d);
outtexbcy(40J100?mensage);
sprintf (meusage/'Nuniero mayor de X =%.2f
=%.2f" ^mayXjmenx);
outtextxy(40, 1 20,inensage);
- 19 -
Numero menor de Y
0esv. estandaí" de Y
Numero menor de X
E.P.N. -Ingeniería Eléctric
sprintf (mensage,"Valor medio de X =%.2f
Desv. estándar de X
=%.2f',promx,e);
outtextxy(4Q, 14Ü,mensage);
outtextxy(403240/'Pulse cualquier tecla para continuar...,");
while (getch()— V)
}
fclose(infile);
/* Fin del if ( infile != NULL ) */
else
putimage
free (ptrbitmap);
clearviewport();
return;
- 20 -
E.P.N.
,
Ingeniería Eléctrica
y********************** GRÁFICOS CPP ******#********************#****#*/
/*
** Programa que lee datos numéricos ;
** los muestra en forma, gráfica.
**
** Turbo C versión 2.0
** Para compilar : tcc tesisl.c graphics.lib ega.vga.obj
**
** Realizado por Jorge Aguilar Navas - E.P.N.
** Ultima versión: 15 de Septimebre de 1993
*/
#include
#incíude <sys\stat.h>
#include <fcntí.h>
#include <sídlib.h>
#include <string.h>
#include <stdio.h>
#include <floalh>
#include <math.h>
fccíude <graphics.h>
#include <conio.h>
^include <ctype.h>
#include "arritmia,h'F
extern PILE ^infíle;
extern char ihame[32];
void sraíico3(void)
í
int n? ndatos;
doubie may^ mayx;
doubíe yr> ys? xorigen, yorígen, xmax, ymax; xdaío, ydato;
iut tamanio;
void *ptrbiímap;
int gdriver? gmode? errorcode;
chai' mensagel[80];
tamanio = imagesize(110;105;330J50)ptrbitmap = mal 1 o c( tamanio);
getímage(110?105,330,150¡)pírbitmap);
- 21 -
E.P.N. _
Ingeniería Eléctrica
infile = fopen(&ame, V);
if (infíle !=NULL)
{
ndaíos — 0;
while (fscanf(inftíe,"%íf%lf ',&xdato,&ydato) Í-EOF)
{
if(!ndatos)
may — ydaio;
ií(EQF)
mayx = xdato;
ií(may<ydato)
may = ydato;
ndatos-H%
>
fclose (infííe);
infíle = fopen(feame, "r");
if (infíle NKÜIX)
{
xmax — getmaxx();
ymax - getmasy();
xorigen = 0. 1 * xmax;
yorígen = ymax/2, 0;
moveto (xorigen, 0.1*ymax);
lineto (xorígen, 0.9*ymax);
moveto (xorígen, yorigen);
lineto (O.P^xmax, yorígen);
moveto (xorigen, yorigen);
yr = 0. 8*xmax*xdato/mayx;
ys = 0.4*ymax*ydaío/may;
lineto (xorigen+yr, yorigen-ys);
n-H-
spríntf(mensagel9"GRAHCO DEL ARCHIVO %s"?fiianie);
outtextxy(90,20,mensagel);
outtextxy(0.5*xinax, 0.95 * ymax, "Presione cualquier tecla para continuar");
getch ();
fclose (infile);
E.P,N.
!
else
putimage(110,105,ptrfíitm^í,COF5r_PUT);
íree(ptrbitmap);
c le arviewportQ;
return;
23 -
Ingeniería Eléctrica
E.P.N.
Ingeniería Eléctrica
/*****##******************
CPP ********************************/
** Función que calcula la frecuencia ventricuíar aproximada asi corao
el vector de los intervalos R-R necesarios para que lafimcion RTTMO.CPP
ios- anaíice y detecte e indique la arritmia a la que correspondea
/* Definición de constantes */
#defme FACTOR 0.004
^define ESCALA 60.0
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
fecíude <math.h>
#include <graphics.h>
#incíude <conio.h>
^include <cíype.h>
^include "arritiniah"
extern FILE *mfíle;
extern char feame[32];
extern float RR[20]; /* Vector de los Intervalos RR */
extern numint;
/* Numero de inténsalos a analizar */
void frecuen(void)
int ndatos, ndato;
float may, mayx, xdato, ydato, frt
float R[15];
float X[15];
float RI[15];
float FV[15];
intN[15];
float aux;
int i - 0;
int lineas -0;
char mensage[80];
sprmtf (niensage/TNTERVALOS R-R DEL ARCHIVO %s",mame);
outtexíxy (40í10*íineas+30,mensage);
24
E.P.N.__
Ingeniería Eléctrica
lineas = lineas+ 2;
infile - ibpen(fhame,V);
if(infiie!=NULL)
ndatos — 1; ndato — -1;
while (ficanf(infile)"%f %f',&xdato,&ydato) !=EOF)
if ( ndatos = 1)
may = ydato;
if( ndatos !=1)
if (may < ydato)
may = ydato;
mayx = xdato;
else
f
aiix = may - ydato;
if(aux>50.0)
ndato"H~;
Rfndato] = may;
X[ndato] — mayx;
N[ndatoj — ndatos - 1;
spridf(mensage/'R[%d] - %.2f X[%d] - %.2f
# de dato
=
%d"índatoíR[ndato]>ndato,X[ndato]>N[ndato]);
outtexíxy (40,10*lineas-í-30Jmensage);
}
may = ydato;
may — ydato;
)
/* Fin del if (may > ydato ) */
}
/* Fin del if ( ndatos 1= 1 )"*/
ndatos — ndatos + 1;
}
/* Fiu del while */
fclose (infile);
/* Fin del la apertura del archivo */
E.P.N.
_
_
Ingeniería Eléctrica
KR[0] = 0.9;
KR[1] = 0.9;
FV[0] - ESCALA / RR[0];
FV[1] =ESCALA/KR[1];
FV[2] = ESCALA / RK[2];
for ( i = 0; i <= ndaío; i-H- )
RR[i+3] = FACTOR * RI[i];
FV[i-H3] - ESCALA / RR[i+3];
lineas-H-;
i-0;
i^0; i<?=ndaío-i-2; i-H-)
sprintf
(mensage/'RR[%d]
=
%.2f
outtextxy (40,10*lmeas+30Jmensage);
lineas-H-
numint = ndato + 3;
íineas-H-,
sprintf (mensage/'numint = %d",numint);
outtextxy (40ílO*lineas+30,mensage);
lineas = lineas + 2;
sprintf (mensage/'PuIse cualquier tecla para continuar...");
outtextxy (40,10*lineas'i-30,mensage);
while (getch()=V)
clearviewport();
rehiro;
FV[%d]
-
%.2f
E.P.N.
,
.Ingeniería Eléctrica
CPP
/* Función que analiza el ritmo del corazón y da el diagnostico de la Arritmia basado en el
análisis de los intervalos R-R que proporciona la función írecuen.cpp */
#include <stdio.h>
#include <stdlib.h>
#include <floath>
#include <math.h>
#include <graphics.h>
#include <conio.h>
#include <ctype.h>
#üiclude "arritmia,h"
extera charihame[32];
extern íloatRRpO]; /* Vector de los IníervaJos RR */
extern int nummfc. /* Numero de intervalos a analizar */
/* Funciones para calcular promedio y varianza de los intervalos */
float x_media (float vector[],int numero);
floaí x_var (float vectorQ,int nuiuero^fioat media);
/* Funciones para cambiar los valores de íos criterios de identificación */
float cambiar_valor (float criterio, int hileras);
iiit otra_vez (int hileras);
/* Función principal que analiza el Ritmo */
void ritmo(void)
char mensage[80]; /* Variable utilizada para los mensajes */
float AR[10]; /* Vector de los promedio AR
*/
float rraiix; /* Variable auxiliar para- el vector de intervalos */
float araux; /* Variable auxiliar para el vector de promedios */
float rraux2;
float araux2;
float dif2;
float abso!2;
float dif; /* Auxiliar usado parahallar la diferenciay
float absol; /* el valor absoluto entre elementos de vectores */
int dist = 3; /* Numero de intervalos a ser promediados
*/
- 27 -
E,P.N,
Ingeniería Eléctrica
int i;
/* Contador de los elementos del vector Promedios
int j, k; /* Contadores de la suma de los intervalos
*/
float suma; /* Variable para la suma de los intervalos */
int numprom; /* Variable que indica el numero del vector promedio V
intsaíida=0; /* Bandera para dar por terminado todos los lazos */
int salidae = 0; /* Bandera para leer el siguiente intervalo R-R */
float promediOjVarianza; /* Variables para promedio y varianza total */
int lineas = 0; /* Defino un contador de lineas para la presentación en pantalla */
int 1;
/* Variable usada para lazo de calculo de promedios */
int m;
/* Variable usada para lazo de calculo de promedios */
int n;
/* Variable usada para tazo de impresión de promedios */
int salidap — 0; /* Bandera que indica que detecto PVC
*/
int salidai = 0;
int fl = 0;
/* Bandera que indica que el ultimo R-R fue prematuro */
iut £2 = 0;
/* Bandera que indica que el ultimo R-R fue prematuro */
/* y cae dentro del primer tercio del promedio anterior */
iní íp — 0;
/* Bandera que indica que los dos últimos latidos
*/
/* foeron identificados como una PVC */
int ib = 0;
/* Bandera que indica que el ultimo R-R fue prematuro */
/* y le sigue una PVC
*/
int ft = 0;
/* Bandera que indica que los dos últimos R-R fueron */
/* prematuros */
float varitmo;
float brad;
floaítaq;
float bloav_veces;
float bloav_r;
float laíijjrema;
char ch;
int opción;
int letras;
char carácter,
int escape = 0;
int filas — 0;
float nuevovalor;
/* Valores por defecto de los criterios de identificación */
varitmo^ 0,0005;
brad = 1.2
bloav_veces = 1.5;
bloav_r = 1.5;
laíi_prenia = 0.9;
clearviewport();
E.P.N, - Ingeniería Eléctric
outtextxy(40,20/'Estos son los valores de los criterios por defecto");
outtextxy(40,40,"l. Varítmo <^ 0.0005");
outtextxy(40,507"2. Brad> 1.2 segundos");
outtexbcy(40,60;"3. Taq <^0.5 segundos");
outtextxy(40)70J"4. BIoav_veces > 1.5 veces");
outtexrxy(40,80,"5. Bioav_r < 1.5 segundos");
outtextxy(40,90,"6. Lati_prema- 0.9 veces");
outtexíxy(40,llQ,"Desea cambiar algún parámetro ??");
outtextxy(40,120,"Si (s) o No (n)");
outtextxy(4QI140J"Responda con una letra..:");
ch = getchQ;
sprintf(mensage/'%c'';ch);
outtextxy(260,140¿nensage);
ch = toupper(ch);
outtextxy(40}10*fílas+160)"Indique con un numero que parámetro desea
cambiar...");
opción = getchQ;
sprintf (mensage/'/'bc'^ opción);
outtexíxy(47 0,
while ( escape == O )
{
if ( (opción = T) && (escape — 0))
filas —filas+ 1;
nuevovalor = cambiar__valor (varitmo,fílas);
filas = filas+ 2;
sprintf (mensage?"El nuevo valor de Varitmo es
%f, nuevovalor);
outtextxy(40,10*fílas-H160>raensage);
A'aritmo — nuevovalor;
filas-filas +1;
outtextxy(40,10:fifiÍas-i-160/'Desea cambiar otro parámetro ??
(«fe)...");
ch — getchQ;
sprintf(inensage?"% c"..ch);
ch = touj)per(ch);
jf(ch = 'S')
opción = otra_vez (filas);
else escape — 1;
} /* Fin de la opción 1 */
E . P . N , -Ingeniería Eléctric
if ( (opción = '2') && (escape = 0) )
{
filas — filas + 1;
nuevovalor = cambiar_valor (bradsfilas);
filas = filas + 2;
sprintf (mensage,"EÍ nuevo valor de Erad es %f",nuevo valor);
outtexbcy(4QIlQ*fil3s+160,mensage);
brad = nuevovalor;
filas = filas + 1;
outtextxy(40)lQ*filas-t-160,'rDesea cambiar otro parámetro ??
(s/n)...");
ch — getch();
sprmtfljnensage,' '% c " , ch) ;
ch = toupper(ch);
if(ch = r S f )
opción = otra_vez (filas);
else escape = 1;
} /* Fin de la opción 2 */
if ( (opción = '3') && (escape = 0) )
{
filas = filas + 1;
nuevovalor = cambiar_valor (taq?fíías);
filas = filas + 2;
sprinif (mensage/Tll nuevo valor de Taq es %f '¿nievo valor);
outtextxy(40)10*filajs+160tmensage);
taq — nuevovalor?
filas = filas + 1;
outtextxy(40,10*filas-H60,"Desea cambiar otro parámetro ??
(s/n)...»);
ch — getchQ;
sprintfímensage/'^óc", ch);
outtexíxy(370>10*filas+160^nensage);
ch = toupper(ch);
if(ch='S r )
opción - otra_vez (filas);
else escape — 1;
} /* Fin de la opción 3 */
if ( (opción = '4') && (escape = 0) )
filas Afilas-1-1;
nuevovalor = canibiar_valor (bloav_veces,fílas);
filas = filas 4- 2;
sprintf (mensage,"El nuevo valor de Bloav_veces es
?/of',nuevovalor);
E.P.N.
Ingeniería Eléctrica
outtextxy(40,10*filas-l-160,mensage);
bloav_veces — nuevovaior,
filas Afilas +1;
oiittextxy(40,10*fíÍas-M60)"Desea cambiar otro parámetro ??
O/n)...");
ch ~ getch();
spríntí][mensage)''0/ocM)ch);
outtexrxy(370J10*fílas-H6QJmensage);
ch — toupper(ch);
if(ch = 'S')
opción = otra_vez (filas);
else escape = 1;
} /* Fin de la opción 4 */
if ((opción = '5') && (escape == 0))
{
filas = filas + 1;
nuevovaior = cambiar_valor (bloa\^_r,filas);
filas-filas+
2;
sprintf (mensage)frEi nuevo valor de Bloavj- es
%f ..nuevoval or);
outtextxy(40)10*filas-i-160ímensage);
bloavjr = nuevovaior,
filas — filas 4-1;
outtextxy(40)10*fiías+160>"Desea cambiar otro parámetro ??
(s/n)../');
ch = getch();
sprintf(mensage,"% c", ch);
outtextxy(370,10*filas+160)mensage);
ch = toi^per(ch);
if(ch = 'S')
opción = oíra_vez (filas);
else escape— 1;
} /* Fin de la opción 5 */
if ( (opción = '6') &£ (escape == 0 ) )
{
filas —filas +1;
nuevovaior — cambiar_valor (Iaíijprema-.filas);
filas —filas-4-2;
sprintf (mensage,"El nuevo valor de Lati_prema es
%f' ,nuevQval or);
outtexíxy(40r10*filas+160,mensage);
Íatí-jM*eiaa=nuevovaior;
filas -filas + 1;
E.P,N.
Ingeniería Eléctrica
outtextxy(40,10*fílas+160}'T>esea cambiar otro parámetro ??
(s/n)...»);
ch — getchQ;
sprintf(mensage, "%c" ,ch);
outtextxy(370,10*fílas+160,mensage);
ch = toupper(ch);
if(ch = 'S ( )
opción = otra_vez (filas);
else escape = 1;
} /* Fin de la opción 6 */
}
} /*Findelwhile*/
/* Fin del si */
filas = filas + 2;
outtextxy(4Q?lO*fiIas+160,"Si ya no desea cambiar mas parámetros de ENTER para
continuar");
getchQ;
clearviewportQ;
sprintf (mensage,"DIAGNOSTICO DEL ARCHIVO %s",fcame);
outtextxy (40}10*lineas+30>mensage);
/* Lazo for para calcular eí vector de promedios AR[i] */
m= ;
numprom = numint - dist;
1 = numprom;
for (1 — numprom; 1 >= 0; I—)
{
}
suma- 0.0;
for (m « k; m <$= k+(dist-l); m++)
{
suma= suma-)-IUR.[ni];
}
/* Fin del for que calcula la suma parcial de los elementos */
AR[1] "suma /dist;
/* Fin del for para calcular el vector de Promedios */
sprintf (mensage, "numint = %d"5numint);
outtexbty (40.,10*iineas+30,inensage);
lineas -lineas + 2;
E.P.N.
Ingeniería Eléctrica
/* Lazo para imprimir los elementos del vetor promedio calculado */
n = numprom;
íbr ( n — numprom; n >= 0; n— )
{
sprintf (mensage,"AR[%ííJ = %.2f ';n,AR[n]);
outtextxy (40310*lineas^305mensage);
lineas-H-;
}
lineas-H-;
/* Análisis de promedio y varianza de todo el vector dé intervalos para
analizar si corresponde a un ritmo sinusai normal
*/
promedio = xjnedia (RR,numint);
varianza=x_var (RR,numint,prorne dio);
cíif = promedio - AR[0];
= (dif<0?-dif:dif);
if ( (varianza>= 0.0) && (varianza <=variímo) &&(absol>=0.0) &&(absol<?=
0.06))
}
sprintf (mensage^Promedio = %.2f y Varianza, = %f proras di o?varianza);
outtextxy (40,10*Hneas+30>mensage);
lineas ~ lineas + 2;
outtexíxy (40í10*lineas-h30/fDIA(>íOSTECO : RITMO SINUSAL
NORMAL");
lineas-H-;
salida = 1;
E.P.N. _
Ingeniería Eléctrica
/*:)e:t:*:k**j|c:f:**4-*#:tí#;fc#:£*:)c#:£:f*:fc:£^
/************ Laso principal FOR para el análisis de ARRITMIAS ********/
j = numprom - 1;
for ( i = 3, j = (numprom - 1) ; i <= (numint - 1)7 j >= 0; i++, j— )
{
if(salida=0)
if ( (RR[i+2] > brad) && (AR[j-2] > brad) &&
(salida =-0))
{
sprintf (mensage/'ARp/od] = %.2f y RR[%d]
outtextxy (40,10*lmeas-l-30ímensage);
lineas — lineas + 2;
outtextxy (40,10*lineasi-30)"DlAGNOSTICO
: BRADICARDIA SINUSAL");
lineas-H-;
salida = 1;
if ( (ARü-2] <?=taq) && (ARQ-2] í= 0) && (salida
= 0) && (salidap = 0) )
{
sprintf (mensage,"AR[%d3 ~
%.2f'j-2,ARG-2]);
outtextxy (40?10*lineas+30^nensage);
lineas = lineas + 1\y (40)10*lmeas+30>"DrAGNOSfnCO
: TAQUICARDIA SINÜSAL'1);
íineas-H-,
salida- 1;
/* if que analiza si todas las banderas son cero */
if ( (fl — 0) && (Í2 = 0) && (íp = 0) && (fe = 0) &&
(ft — 0 ) )
{
/* Si existe latido prematuro */
if ( (RR[i] < Iatí_prema*ARO+l]) && (salida = 0) )
{
£1 = 1;
- 34 -
E.P.N. ,_
Ingeniería Eléctrica
-
araux-AR[j+l]/3.0;
spríníf (mensage,"%.2£RR[%d] < %.2f *
outtexíxy (40J10*lineas+30írnensage);
lineas-H-;
A Si cae dentro del primer tercio del promedio anterior */
if(KR[i]<araux)
{
£> = !;
sprintf (mensage/'G = %d",f2);
outtexíxy (40,10*lineas4-3Q,mensage);
lineas-H-;
salidae = 1;
else saüdae = 1;
eíse
f
bloav_yeces*AR[j-Ki]) &&
bloav_r) && (salida= 0) )
sprintf (mensage;'RR[%d] =%.2£
AR[%d] =%.2fy RR[%dl =%.2f
outtextxy
lineas = lineas -f 2;
outtextxy
(40,10:fcHneas4-30í"DIAGNOST[CO : BLOQUEO A-V DE 2o. GRADO. MOBITZ 1");
Uneas-H-;
salida = 1;
} /* Fin del if que analiza si todas las banderas son cero */
else salidae = 0;
} /*Findelifsisalida=0 */
if ( (i > 3) &£ (salida— 0) && (salidae — 0) )
{
/******** ^ #*#******y
if ( fl = 1 ) /* Si el ultimo R-R fue prematuro */
{
sprintf (inensage/'fl ™ ?/ód"?fl);
outtextxy (40;10*lineas+30?mensage);
lineas-H-;
spriníf(mensage;"%.2í(RU[%d])-f%.2f(RR[%d])2*%.2f(AR[%d])'';KR[i]íi,RR[i-l];i-l3ARO+2]j+2);
outtextxy (40>10*lineas+30,mensage);
lineas-H-;
_
-T c:
_
E.P.N.
/* Pausa Compensatoria Toral */
Ingeniería Eléctrica
rraux = RR[i]+RR[i-1];
araux = 2.0*AR[j-t-2];
dif = rraux - araux;
absol = ( dif < O ? -dif:dif);
sprintf (mensage,"absol = %.2f,absol);
outtextxy (40,10*íineas+30)mensage);
lineas-H-,
if ( (absol >= 0.0) && (absol <?= 0.3))
ñ-0;
Hneas-H-;
outtextxy
(40f10*lineas+30í"DIAC3NOSTICO : CONTRACCIÓN VENTRICÜLAR PREMATURA
(PVC)»);
}
lineas-H-;
salidap = 1;
else
/* Inicio del NO del segundo if */
sprintf (mensage,"%.2f(AR[%d]) <
%.2f(RR[%d])-fyo.2í(RR[%d]) <
outtextxy (40,10*lineas+30,mensage);
iineas-H-;
if ( (AR[j+2] < rraux) && (rraux < araux) )
{
/* Inicio del SI del tercer if */
fl-0;
sprintf (measage/'Ü -%d",íl);
outtextxy (40>10*lineas+30,men8age);
lineas = lineas + 2;
outtextxy
(40;10*lrneas+30,'T>ÍAGNOSTICO : LATIDO AURICULAR PREMATURO (APB)");
lineas-H-;
salida = 1;
}
/* Fin del SI del tercer if */
else /* Inicio del NO del tercer if */
{
dif = AR[j+2] - iraux;
absol = (dif<0?-dif:dif);
sprintf (mensage/'absol =
%.2f'7absol);
outtextxy (40,IO*lineas+30jnensage);
if ( (absol >= 0.0) && (absol <- 0.3) )
{ /* Inicio del SI del cuarto if */
- 36 -
E.P.N, _
_____ _
Ingeniería Eléctrica
±1 = 0;
sprintf (mensage,"KR[%d] =
outtextxy
(40,10*lineas*i-30Jmensage);
lineas Alineas + 2;
outtexbcy
(40)10*lineas+30)"DIAGNOSTICO : INTERPOLADO PVC");
lineas-H-;
salidai — 1;
/***** C ******/
if ( KR[i] < lati_prema*AR[j-H2] )
else
{
fl-0;
}
}
else
{
}
/* Fin del NO del tercer if */
/* Fin del NO del segundo if */
/* Fin del SI del if que analiza si el ultimo */
/* intervalo R-R fue prematuro */
/* Inicio del NO del if que analiza si el */
/* ultimo R-R fiíe prematuro */
:£•/ -c^ __ i \
if ( RR[i] < !ati_prema*AR[j+3]
< %.2f * %.2£AR[%d]"
outtextxy(40,10*lúieas+30ímensage);
lineas-H-;
íp = G;
fe-1;
salidas = 1;
37
E.P.N.
Ingeniería Eléctrica
else
salidae = 1;
}
/* Fin del SI del if ( fp — 1) */
else
{
/* Inicio del NO del if (fp = 1) */
if ( salidae = O )
;f f-ph = i \. ^ J.U
1 I
lineas++;
sprintf
(mensage/'%. 2í(RR[%d])4T0,2f(RR[%d]) 2:t:%.2f(AR[%cfI)"JRR[i],i^R[i-l]íi-l,AR{j+4]j+4);
ouítextxy
(40,10*line3s+30,mens3ge);
lineas++;
difi = araux2 - rraux2;
ab8oI2 = (difí < O ?
-dií2:dif2);
sprintf
%.2f',absol2);
outtextxy
(40>10*lineas+30>mensage);
íineas+-í-,
if((abso!2>=0.0)&&
(absol2<-0.3))
{
sprintf
(mensage/'RR[%d] - %.2f'¿RRp]);
outtextxy
(40?10*liiieas-l-30Jmensage);
lineas = lineas
+ 2;
outtextxy
(40>10*lineas+30,"DIAGNOSTICO : BIGEMINISMO YENTRICULAR");
lineas-H-;
salida= 1;
i.
- 38
}
E,p.N. _
__
-_Ingeniería Eléctrica
else
{
if(fl = l )
sprinti^raensage/'il- %d",ñ);
outtexbty(40J10*lineas-í-30)mensage);
lineas-H-;
rraux = rraux +
araux —
2*AR[j+3];
dif = araux rraux;
absol = ( dif <
0.0 ? -difrdif );
sprintf
(mensage/1 absol = %.2f ';absol);
outtextxy
(40,10*lineas-í-30)mensage);
if ( (absol
0.0) && (absol <?- 0.3))
sprintf
outtextxy
(40,10*lineas-í-30íinensage);
lineas — lineas
+ 2;
outtextxy
(40>10*íineas+30/'DIAGNOSTICO : TRIGEMIN1SMO VENTRICULAR");
lineas-H-;
salida= 1;
>
} /* Fin del fi=l*/
}
/*FindelNOdelfi>=l*/
/*Fiudelif(i>5)*/
}
}
/* Fio del NO del if ( fp = 1 ) */
}
}
}
}
/*Findelif(i>4) */
/* Fin del NO del if que analiza si el */
/* ultimo R-R fiíe prematuro */
/*Findelif(¡>3)*/
/* Fin del for que lee todos los intervalos
- 39 -
*/
E.P.N.
Ingeniería Eléctrica
lineas-H-;
if ((salida = 0) && (salidap = 0) && (salidae == 0) && (salidai = 0) )
outtextxy (40,10*lineas+30,(rDJAGNOSTICO DESCONOCIDO");
lineas = lineas -i- 2;
outtexíxy (¿K^lQ^ineas-i-SÍVTulse cualquier tecla para continuar
while (getch()=l\nl)
clearviewport();
returo;
/* Fin de ía función que calcula el ritmo */
/********* FUHCÍOÜ para calcular promedio *********/
fíoat x_media (float vector[],int numero)
float suma^ 0.0;
inti;
for (i = 0; i < numero; i++)
suma = suma + vector[i];
return(suma/numero);
}
JQjj para calcular varianza **
float x_var (float vectorQ^int numero,float media)
{
fíoat sumatoria^ 0.0;
float x;
int i;
for (i — 0; i < numero; i-H-)
{
x= vectorfí] - media;
sumatoria — sumatoria + pow (x.,2);
retuni( sumatorí a/numero);
- 4O
");
E.P.N.
_____Lngeniería Eléctrica
íloat cambiar_valor (float criterio, ínt hileras)
{
char cadena[80];
int let;
char cara;
charprevio[7];
float parámetro;
hileras = hileras 4- 1;
s-printf^cadena/'Indique el nuevo valor de %£ ..:",criterio);
outtextxy(40)10*MíerasH-1603cadena);
let=0;
whüe(let<8)
{
cara= getchQ;
/* leo del teclado sin eco */
if ( cara= 13 ) break;
if ( ((cara>47) && (cara<58)) || cara=46)
{
previo[let] = cara;
/* lo almaceno en el vector previo */
outtextxy(10*let+370,10:(!hilerafi-M60,cadena);
/* Es un
carácter valido, lo imprimo */
/* end do while '*/
hileras ~ hileras 4- 1;
parámetro = atof(previo);
return parámetro;
int olra_vez (int hileras)
char cadena[80];
int nuevaopcion;
hileras =hiJeras 4-1;
outtextxy(40,10*hileras4160/1ndique con un numero que otro parámetro desea
cambiar...");
nuevaopcion — getch();
sprmtí^cadena/'%c'',nuevaopcion);
outtextxy(520,10*hileras+160Jcadena);
hileras = hileras 4-1;
return nuevaopcion;
E . P . N . -Ingeniería Eléctric
2 CPP ******************************/
/********** Función que muestra teoría sobre el ritmo del corazón *******/
#include <stdio.h>
#include <stdlib.h>
#include <£raphics.h>
#include "arritmia-h"
void ritmo2(void)
{
iní: tainanio;
void *ptrbitinap;
tatnatiio = imagesize(110,105,330,150);
ptrbitmap — inalloc(tamanio);
geümage(HOí105,330?150Jptrbitmap);
outtextxy(40;60;"EI RITMO es IRREGULAR y es debido a:");
outtexíxy(40,70?"l. Arritmia sinusal");
outtextxy(40,805"2. Extrasistoles:");
outtextxy(60í90:;"a Supraveníricular.");
outtexbiy(60,100,"b. Ventricular");
outtexrxy(40,110s"3. Fibrilacion Auricular");
outtextxy(40,120;"4. Aleteo auricular con bloqueo variable");
outtextxy(4G,13Q,"5. Fibrilacion veníricular");
outtextxy(40,KO/'6. Bloqueo auricuiovenfricular variable");
outtextxy(40,l50>"7. Taquical'dia auricular con bloqueo variable");
outtexfxy(40,180/'El RITMO es REGULAR:");
outtextxy(40,2GO/'Seguir con el análisis del EJE ELÉCTRICO");
outtextxy(40,220/Tulse cualquier teclapara continuar...");
while (getcli()=V)
cíearviewport();
íree(pírbitmap);
return;
E.P.H. _
ingeniería Eléctrica
EJELEC CPP ********************************/
punción que analiza ía desviación del eje eléctrico ******/
#incíude <stdio.h>
#include <sídíib.h>
#inc!ude <graphics.h>
#include "arritmia,h"
void ejelec(void)
int tamanio;
void *ptrbitmap;
tamanio = imagesize(110)105)330,150);
ptrbitmap = maíloc(tamanio);
getimage(110;105,330;150;pü-bitmap);
outtextxy(70,20/rEl Eje esta desviado hacia la izquierda y es debido a:");
Quttexíxy (70,40/1. Hipertrofia y dilatación del ventrículo izquierdo");
outtexbty(70J50,"2. Corazón rotado hacia la izquierda");
outtexbcy(70J60>"3. Bloqueo de rama izquierda");
outtextxy(70>7Q>H4. Corazón Horizontal");
outtextxy(70,80/'5. Común en la primera infancia y menos en niños");
outtextxy(70J110,"No existe desviación del Eje:");
outtexbty(70,130,"Seguir con el análisis de LA ONDAP");
outtextxy(110,Í60J"PuÍse cualquier tecla para continuar...");
vvhiíe (getch()=V)
putimage(110,105;pírbitmap>COPY_PUT);
clearviewportO;
fre e (ptrbitmap);
return;
- 43
E.P.N.
Ingeniería Eléctrica
/**•************************ ONDAP CPP *********************** *********/
/********************* Análisis de la ONDA P ****#*************#****/
#include <stdio.h>
#include <sídlib.fa>
#include <graphics.h>
#ínclude "arritmía,h"
void ondap(void)
{
int tamanio;
void :|ípfrbitinap;
tamanio = imagesize(110,105,330,150);
ptrbitraají = mailoc(tamanio);
getimage(110J105;330J150;ptrbiünap);
outtextxy(70,20;"La ondaP es anormal y es debido a;");
outtexbtyíTO^O,"!. Ondas P ausentes:");
outtextxy(90>50/'a Ritmo Idioventricular");
outtextxy(90,60?"b. Fibrilacion auricular");
outtextxy(70?70,"2. P Pulmonar");
outtexb^(70,80,"3. P Mitra!");
outtextxy(70;90/'4. Ondas P invertidas:");
outtextxy(90,100>"a,Dextrocardia");
outtexbty(90>110>"b. Ritmo Nodal");
outtexbty(90,120,"c. Puede ser fisiológico");
outtextxy(90?130,"d Colocación incorrecta de electrodos");
outtexbcy(70,140J"5. Ondas P múltiples:");
outtextxy(90)150,"a Fibrilacion auricular");
outtextxy^íUóO/'b. Aleteo auricular");
outtextxy(90?170;"c. Taquicardia auricular");
outtextxy(90}180,"d. Bloqueo auriculoventricuíar");
outtextxy(70,210,"LaondaP es normal:");
outtexbo<70,230)"Seguir con el análisis del INTERVALO P-R");
outtexbtyfllO^O/'Puise cualquier tecla para continuar...1');
while (getch()=V);
clearviewport();
free(ptrbÍmiap);
re tura;
E.P.N.
Ingeniería Eléctrica
/**************************** p£ CPP *********** **##**##*# ***#*****/
y********************* Análisis del INTERVALO P-R ***#*************/
#iixciude <stdío.h>
#include <stdlib.h>
#include <£raphics.h>
#include "arritmia.li"
void pr(void)
int tamanio;
voíd *ptrbitmap;
tamanio = imagesize(110,105,330}150);
ptrbítmap = malíoc(tamanio);
getimage(110)105J330í150,pírbitmap);
outtextxy(70,20/'EÍ Intervalo P-R es anormal y es debido a:");
outtextxy(70,40;fl. Intervalo P-R prolongado:");
outtextxy(90>50)"a.SobredoBÍs de digital");
outtextxy(90,60?"b. Bloqueo incompleto de primer grado11);
outtextxy(90,70,)fc. Hiperpotasemia");
outtextxy^O^O/'l. Intervalo P-R corto;");
outtextxy(90,90,"a Síndrome de WOLF-PARK3NSON-WHTTE");
outtextxy(90?100;'b. Ritmo nodal");
outtexixy(70,ll(V'3. Intervalo P-R variable");
outíext3íy(70J120?"4. Intervalo P-R disociado en bíoqueo de tercer grado");
outtextxy(70,15Q,"EI Intervalo P-R es norma!:");
outtextxy(70,170;"Seguir con el análisis de la ONDA Q");
outtextxy(110>200)"Puíse cualquier tecla para continuar.,.");
while (getch()=V)
clearviewport();
fi*ee(pírbitmap);
retum;
45
E.P.N.
Ingeniería Eléctrica
/****#*****#*:»:************* ONDAQ CPP ********************************/
yi)!******^*************** Análisis de la ONDA O ***********************/
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#incíude "arritmiah"
voíd ondaq(void)
int tamanio;
void *ptrbitmap;
tamanio = imagesize(110T105,330,150);
ptrbiímap =malloc(tamanio);
getimage(110,105,330,150,ptrbitmap);
outtextxy(70,20,"La Onda Q es anormal y es debido a:");
outtextxy(70,40,"l. Infarto de miocardio");
outtextxy(70,50,"2. Miocardiopatia");
outtextxy(70,80?"La Onda Q es normal:");
outtextxy(70,10(VfSeguir con el análisis del Complejo QRS");
outtextxy(110,140>"Pulse cualquier tecla para continuar...");
while (getch()=V)
clearviewport();
free(ptrbitmap);
return;
E.P.N.
Ingeniería Eléctrica
./**** ************** ******** QJíjg CPP ********************************/
/******#**##*#****#**#* .Análisis del COMPLEJO QRS ******************/
#include <stdio.h>
#include <stdlib.h>
#Ínclude <graphics.h>
#include "arrítmia.h"
void qrs(void)
int tamanio;
void *ptrbiímap;
tamanio ~ i
ptrbitraap = mailoc(tamanio);
getimage(l 10,105 }330)150íptrbitaiap);
outtextxy(70>20,"EI Complejo QRS es anormal y es debido a:");
outtextxy(70,40,f'l. QRS ensanchado");
outtextxy(70,50,"2. QRS de bajo voltaje");
outtextxy(7Q,60?"3. Cambios en su morfología");
outtextxy(70,90}í(EÍ Complejo QRS es normal:");
outtexbcy(70,llQ}"Seguir con el análisis deíINTERVALO Q-T");
oottextxyíllOjlSO/'Pulse cualquier tecla para continuar...");
while (getch()=-V)
clearviewportQ;
free(ptrbitmap);
return;
-
47 -
E.P.N.
Ingeniería Eléctrica
Análisis del INTERVALO O-T *********#*********/
#include <stdío.h>
#include <stdltb.ti>
#incíude <graphics.h>
#include "arrítmia.h"
void qt(void)
int tamanio;
void *ptrbitmap;
tamanio = ^85681X6(110,105,330,150);
ptrbiímap = malloc(tamanio);
getimage(110,105,330>150,ptibitm^));
outtextxy(70>20/'El intervalo Q-T es anormal y es debido a:");
outtextxy(70,40,"l. Q-T prolongado");
outtextxy^O^O/'Z. Q-T acortado");
outtextxy(70>80>"El intei^alo Q-T es normal:");
outtextxy(70,100/'Seguír con el análisis del Segmento S-T");
outtextxy(110,140,"Pulse cualquier tecla para continuar...");
while (getch()^'\nf)
clearviewport();
free(ptrbitmap);
return;
E.P.N.
Ingeniería Eléctrica
/#*** #* *********************** g-j* Qpp *******************************/
y********************** ^^naügjg del SEGMENTO S-T *******************/
#include <stdio.li>
#include <stdlib.h>
#include <graphics.h>
^include "arritmia.h"
voíd st(void)
int tamanio;
void *ptrbitmap;
tamanio = imagesize(110í105,330>150);
pírbitmap = malíoc(tamanio);
getimage(110>105>330>150,pírbitmap);
outtextxy(70,20,"El Segmento S-T es anormal y es debido a:");
ourttexteyíTO^O/'l. S-T elevado");
outtexb¿(70>40,"2. S-T deprimido");
outtextxy^O^O/'EÍ Segmento S-T es normal:");
outtextxy(70,90/'Seguir con el análisis de ía ONDA T");
outtextxyCllO^nO/Tuíse cualquier tecla para continuar...");
while (getch()=%')
clearviewport();
iree(ptrbitmap);
return;
- 49 -
E.P.N.
Ingeniería Eléctrica
ONDAT CPP **#*#*******#*****************/
e la ONDA T ************#***********/
#include <stdio.h>
#include <stdlib.h>
#include <£raphics.h>
#include "arrítmia-h"
voíd ondat(void)
int tamanio;
vo id *ptrbitmap;
tamanio — únagesize(l 10,105 ,330,150);
ptrbitmap = malloc(tamanío);
getimage(110>105}3307150)ptrbitmap);
O/'La Onda T es anormal y es debido a:");
O,"!. Ondas T altas y picudas");
O/^. Ondas T planas");
O/'S. Ondas T invertidas");
O/'La onda T es normal:");
outtexbty(70í110í"Seguir con el análisis de ONDA U");
outtextxyCllO^lSO/'Puise cualquier teclapara continuar,..");
while
cleanaewport();
fi-ee(ptrbitmap);
retum;
- 5O -
E.P.N.
Ingeniería Eléctrica
************************#******#**/
/***#**#*##* #*##*##*#* ^jiaJígjg ¿e Ja ONDA TJ ****#******************/
#include <stdio.h>
#include <stdlib.h>
•#include <graphics.h>
#Ínclude "arritmía.h"
void ondau(void)
int tamanio;
void ^trbitmap;
tamanio — i
ptrbitmap = malloc(tamanio);
outtextxy(70,20,"La ONDA U es anormal y es debido a:");
outtexbty(70>40,"l. Ondas U prominentes");
outtexbty(70,50,"2. Ondas ü invertidas");
outtextxy(70?80,"La onda U es normal:");
ouítextxy(90,100>"PASAR POR ALTO");
outtextxy(130J140,'Tulse cualquier tecla para continuar...");
vvhile (getchO— \n')
cíearviewport();
free(ptrbitmap);
return;
E.P.N. _
-_ —_ Ingeniería Eléctrica
/***##*###*##*#**#****** AYUDA CPP *************** *******#****#**#*/
Ayuda para el análisis de los parámetros ********-#*****/
#incíude
#include <stdlib.h>
#ínclude <£raphics.h>
#include Narritmia.h"
void ayuda(void)
outtextsy(40,20Jt'Se tiene opción a cambiar seis parámetros:");
outtexlxy(40,40,"l. Para eí análisis de Ritmo Sinusal Normal: Varítmo");
outtextxy(40,50,"2. Para el análisis de Bradicardia: Brad");
ouifexíxy^O^O/^. Para el análisis de Taquicardia: Taq");
outtexfxy(40,7(V'4. Para el análisis de Bloqueo AV Mobitz tipo I:");
ouítextxy^O^SO/'aDel numero de veces el promedio: Bloav_veces");
outtextxy(60>90,"b.De la duración del siguiente intervalo: Bíoav_r");
outtextxy(40,100)"5. Para el análisis de Latido Prematuro: Lati_prema");
outtextxy(40;140)"l. Varitmo");
outtextxy(60,160,"Este parámetro indica el valor de la varianza del vector de intervalos.");
outtextxy(60,17Q,"Como sabemos el ritmo normal no debe tener mucha variación,");
outtexíxy(60>180í"p°r lo que el valor por defecto de la varianza se lo puso menor o igual");
outtextxy(6~0}190)"a 0.005. Para cambiarlo, queda al criterio razonable del medico.");
outtextxy(40,210;'2. Brad");
outtextxy(ó"0>230/rEste valor se refiere a que si el ultimo intervalo analizado");
Guttextxy(ó~0,240,"es mayor que 1.2 seg o lo que es lo mismo su frecuencia menor a");
outtextxy(60)250>"50 latidos por minuto. Para cambiarlo, se acepta un valor máximo de");
outtextxy(60í260f"60 lat/min o lo que es lo mismo que el intervalo sea mayor que 1 seg.");
outtextxy(40,280,"3. Taq");
outtextxyí^O^OO/'Esíe valor indica que un promedio de intervalos R-R");
ouíte?rtxy(óO?310,"es menor o igual a 0.5 seg o lo que es lo mismo");
ouítextxy(60.,320/'su frecuencia es mayor que 120 latidos por minuto.");
outtextxy(6"0>33Ú,'Tara cambiarlo, se acepta que sea mayor que 100 latidos");
outtextxy(60,340?"o lo que es lo mismo menor o igual a 0.6 seg.");
outtextxy(40,370,"Pulse cualquier tecla para continuar...");
wiiüe (getch()=V)
clearviewportQ;
E.P.N.
_
_____
Ingeniería Eléctrica
outtextxy(4Q,40,"4. Bloav_vecesM);
outtextxyfóO.óO/'Este parámetro nos indica que debe cumplirse que");
ouítextxy(60,70,"un intervalo R-R sea mayor en 1.5 veces el promedio");
outtextxy(60.i80/'de intervalos anterior.");
outtextxy(60390,f'Para cambiar el valor de 1.5 se deberá llegar auno");
ouítexíxy(605100}"diferente de acuerdo al testeo clínico.");
outtexbty(60,120,"Se deberá cumplir ademas el parámetro Bloav_r para que");
ouítexbfy(60,130?"se detecte Bloqueo AV de segundo grado (Mobitz tipo I).");
outtextxy(40,150,"5. Bloav_r");
outtextxyíóO^iyO/'Este valor nos indica que el siguiente intervalo R-R");
outtexrxy(6Q,180,"del que se esta analizando, debe ser menor de 1.5 seg.");
outtexrxy(60,190)'Tara cambiar el valor de 1.5 se deberá llegar auno");
outtextxy(60,200,"diferente de acuerdo al testeo clínico.");
outtextxy(60,22Q,"Se deberá cumplir ademas eí parámetro Bíoav_veces para que");
outtextxy(60,23Q,"se detecte Bloqueo AV de segundo grado (Mobitz tipo I).");
outtexteyOtOjZSO,'^. Lati^prema");
outtextxy(60)270/'Este parámetro rige para las arritmias que presentan");
outtexrxy(60?28G,"uno o varios latidos prematuros» en la presente tesis constan:");
outtexbiy(ó"Q,29(VfPVCí Bigeminismo, PVCI, Trigeminismo y APB.");
outtextxy^O^lG/'Se define latido prematuro si un intervalo R-R es menor en 0.9");
outtextxy^G^O/'veces ei previo promedio de intervalos R-R.");
outtextxy(60,330>'Tara cambiar el valor de 0.9 se deberá llegar a uno");
outtextxy(60,340}"diferente de acuerdo al tesíeo clínico.");
outtextxy(40(370/'Pulse cualquier tecla para continuar...");
whiíe (getch()=V)
clearviewport();
return;
— 53
Descargar