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