Program rieši problém generovania testov prostredníctvom Boolovskej diferencie

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: Programy v C, C++

Program: Prac_ndf.cBooldif.zip
Súbor exe: Booldif.exe
Potrebné: Adresar.cColor.cDerivac.cError.cFunkcie.cHelp.cKey.cLine_edi.cMain.cMenu.cObsluha.cOkno.cPrac_ndf.cSlovnik.cSlov_fon.cStatist.cUtil.cVideo.cVystupy.cAdresar.hColor.hDefine.hError.hFunkcie.hGlob.hKey.hLine_edi.hMbooldif.hMenu.hOkno.hSlov_fon.hUtil.hVideo.h
Príklady: Example.zipBin_10_o.ndfBin_10_o.ndfBin_1and.ndfBin_2rad.ndfBin_3rad.ndfBin_4rad.ndfHard.ndfI_reg_lo.ndfReg_jk.ndfScitac_s.ndfScp_1rad.ndfScp_2rad.ndfScp_2r_1.ndfScp_3rad.ndfScp_4r_2.ndfScp_6r_3.ndfScp_8r_4.ndfSc_1r_pj.ndfSc_1r_sj.ndfSc_1_aoi.ndfSc_2r_4.ndfSc_3r_6.ndfSc_7400n.ndfSc_aon.ndfSimp3_a.ndfSimp3_b.ndfSimp4_a.ndfSimp4_b.ndfSimp4_c.ndfSimp6_a.ndfTest_vod.ndfZle.ndf
Manual: Prirucky.zip

Program rieši problém generovania testov prostredníctvom Boolovskej diferencie. Riešenie vyplýva z metódy matematicej derivácie logických zápisov funkcie v tvare Boolovského zápisu. Vytvára vektory porúch pre daný obvod, pričom zohľadňuje všetky vetviace sa vodiče. Výsledkom je úplný test.
Je implementovaný v programovacom jazyku C pre operačný systém MS-DOS, alebo iný s ním kompatibilným. Program je vhodný pre interaktívny spôsob komunikácie s užívateľom, čo umožňuje pohodlné pracovné prostredie podobné systémom Turbo Vision.

Ako príklad skúste nasledovné.
  • Menu->Voľby->Vstup->Zo Súboru. Vyberte si niektorý z ukážkových súborov.
  • Menu->Činnosť->Boolovské diferencie->Primárne vodiče
  • Menu->Činnosť->Boolovské diferencie->Vnútorné vodiče
  • Menu->Výsledky - môžete si pozrieť výsledky práce programu


POZNÁMKA: Zdrojové kódy ktoré simulujú prostredie Turbo Vision niesu dielom autora.
/*****************************************************************************
*									     *
*                                Subor OKNO.C                                *
*									     *
*****************************************************************************/
 
#include <dos.h>
#include <stdlib.h>
#include <alloc.h>
 
#include "glob.h"
#include "menu.h"
#include "video.h"
#include "okno.h"
#include "util.h"
 
 
 
struct Okno 	far * _okno=NULL;
struct Rmenu	Rmenu={0,{NULL}};
 
char far *_ramcek[]={	"        ",
			"ÚÄżłŮÄŔł",
			"Ő͸łžÍÔł",
			"ÉÍťşźÍČş"};
 
 
//************************************************************************//
// ZISTI_SURADNICE							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void zisti_suradnice(struct Menu *menu,int *zx,int *zy,int *rx,int *ry)
{
 *zx=menu->lavy;
 *zy=menu->horny;
 *rx=zisti_sirku_okna(menu->polozky);
 *ry=zisti_vysku_okna(menu->polozky);
 if(*rx>=_stlpcov)
	*rx=_stlpcov-2;
 if(*ry>=_riadkov)
	*rx=_riadkov;
 if(*zx+*rx>=_stlpcov)
	*zx-=(*zx+*rx)-_stlpcov;
 if(*zy+*ry>=_riadkov)
	*zy-=(*zy+*ry)-_riadkov;
}
 
 
//************************************************************************//
// ZARAD_MENU								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void zarad_menu(Menu *menu)
{
 
 if(Rmenu.pocet <MAXRMENU)
	Rmenu.menu[Rmenu.pocet++]=menu;
}
 
 
//************************************************************************//
// ZRUS_MENU								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void zrus_menu(void)
{
 
 if(Rmenu.pocet >0)
	Rmenu.pocet--;
}
 
 
//************************************************************************//
// REDRAW_MENU								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void redraw_menu(void)
{
 int	i;
 
 tlac_vodorovne_menu(&hlavne_menu);
 zvyrazni_vodorovne_menu(&hlavne_menu);
 tlac_riadok_help(hlavne_menu.polozky[hlavne_menu.posledna_volba].spodny_riadok,hlavne_menu.attr_spodneho_riadku,hlavne_menu.attr_hot_key);
 
 for(i=0;i<Rmenu.pocet;++i)
	redraw_podmenu(Rmenu.menu[i]);
}
 
 
//************************************************************************//
// REDRAW_PODMENU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void redraw_podmenu(Menu *menu)
{
 register int	i;
 int	zx,zy,rx,ry;
 
 if(menu == NULL) return;
 zisti_suradnice(menu,&zx,&zy,&rx,&ry);
 nakresli_okno(zx,zy,zx+rx,zy+ry,menu->attr_okna,menu->attr_okraja,menu->typ_okraja);
 
 i=0;
 while(menu->polozky[i].text!=NULL)
	tlac_riadok_menu(menu->lavy,menu->horny,i++,menu,rx-2);
 
}
 
 
//************************************************************************//
// NAKRESLI_OKNO							  //
//                                                            30.10.1997  //
//************************************************************************//
 
void nakresli_okno(unsigned int lavy,unsigned int horny,
	       unsigned int pravy,unsigned int dolny,
	       unsigned char attr_okna,unsigned char attr_okraja,
	       unsigned char typ_okraja)
{
   vypln_okno(lavy+1,horny+1,pravy-1,dolny-1,' ',attr_okna);
   ramcek(lavy,horny,pravy-lavy,dolny-horny,attr_okraja,typ_okraja);
   tien(lavy,horny,pravy-lavy,dolny-horny,0x08);
}
 
 
//************************************************************************//
// OTVOR_OKNO								  //
//                                                            30.10.1997  //
//************************************************************************//
 
int otvor_okno(unsigned int lavy,unsigned int horny,
	       unsigned int pravy,unsigned int dolny,
	       unsigned char attr_okna,unsigned char attr_okraja,
	       unsigned char typ_okraja)
 {
   if(zarad_okno(lavy,horny,pravy-lavy+2,dolny-horny+1)!=TRUE)return FALSE;
   nakresli_okno(lavy,horny,pravy,dolny,attr_okna,attr_okraja,typ_okraja);
   return TRUE;
 }
 
 
//************************************************************************//
// ZARAD_OKNO								  //
//                                                            30.10.1997  //
//************************************************************************//
 
int zarad_okno(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska)
{
   struct Okno far *p;
 
   if((p=(struct Okno far *)farmalloc(sizeof(Okno)))==NULL)return FALSE;
   if((p->data=(unsigned int far *)farmalloc(sirka*vyska*sizeof(int)))==NULL)
      {
      farfree(p);
      pamet();
      return FALSE;
      }
   pamet();
   p->lavy=lavy;
   p->horny=horny;
   p->sirka=sirka;
   p->vyska=vyska;
   uloz_okno(lavy,horny,sirka,vyska,p->data);
   p->prev=_okno;
   _okno=p;
   return TRUE;
}
 
 
//************************************************************************//
// ZATVOR_OKNO								  //
//                                                            30.10.1997  //
//************************************************************************//
 
int zatvor_okno(void)
{
   struct Okno far * p;
 
   if(_okno!=NULL)
      {
      obnov_okno(_okno->lavy,_okno->horny,_okno->sirka,_okno->vyska,_okno->data);
      p=_okno;
      _okno=_okno->prev;
      farfree(p->data);
      farfree(p);
      pamet();
      return TRUE;
      }
   return FALSE;
}
 
 
//************************************************************************//
// ZATVOR_OKNO1								  //      //
//                                                            30.10.1997  //
//************************************************************************//
 
int zatvor_okno1(void)
{
   struct Okno far * p;
 
   if(_okno!=NULL)
      {
      obnov_okno1(_okno->lavy,_okno->horny,_okno->sirka,_okno->vyska,_okno->data);
      p=_okno;
      _okno=_okno->prev;
      farfree(p->data);
      farfree(p);
      pamet();
      return TRUE;
      }
   return FALSE;
}
 
 
//************************************************************************//
// ULOZ_OKNO								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void uloz_okno(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska,unsigned int far *mem)
{
 
   _BX=2*(_stlpcov*horny+lavy);
   _CH=sirka;
   _CL=(_stlpcov-sirka)*2;
   _DL=vyska;
   _DH=_CH;
 
   _SI=FP_OFF(mem);
   asm push es
   asm push ds
   _ES=VIDEOSEGMENT;
   _DS=FP_SEG(mem);
n1:
   asm mov ch,dh
n2:
   asm mov ax,es:[bx]
   asm mov ds:[si],ax
   asm inc si
   asm inc si
   asm inc bx
   asm inc bx
   asm dec ch
   asm jnz n2
   asm add bx,cx
   asm dec dl
   asm jnz n1
   asm pop ds
   asm pop es
   return;
}
 
 
//************************************************************************//
// OBNOV_OKNO								  //     //
//                                                            30.10.1997  //
//************************************************************************//
 
void obnov_okno(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska,unsigned int far *mem)
{
   _BX=2*(_stlpcov*horny+lavy);
   _CH=sirka;
   _CL=(_stlpcov-sirka)*2;
   _DL=vyska;
   _DH=_CH;
   _SI=FP_OFF(mem);
   asm push es
   asm push ds
   _ES=VIDEOSEGMENT;
   _DS=FP_SEG(mem);
n1:
   asm mov ch,dh
n2:
   asm mov ax,ds:[si]
   asm mov es:[bx],ax
   asm inc si
   asm inc si
   asm inc bx
   asm inc bx
   asm dec ch
   asm jnz n2
   asm add bx,cx
   asm dec dl
   asm jnz n1
   asm pop ds
   asm pop es
   return;
}
 
 
//************************************************************************//
// OBNOV_OKNO1								  //
//                                                            30.10.1997  //
//************************************************************************//
 
void obnov_okno1(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska,unsigned int far *mem)
{
   register unsigned int r;
   register unsigned int s;
 
   while(1)
      {
      _BX=2*(_stlpcov*horny+lavy);
      _CH=sirka;
      _CL=(_stlpcov-sirka)*2;
      _DL=vyska;
      _DH=_CH;
      _SI=FP_OFF(mem);
      asm push es
      asm push ds
      _ES=VIDEOSEGMENT;
      _DS=FP_SEG(mem);
n1:
      asm mov ch,dh
n2:
      asm mov ax,ds:[si]
      asm cmp ax,es:[bx]
      asm jnz n3
      asm inc si
      asm inc si
      asm inc bx
      asm inc bx
      asm dec ch
      asm jnz n2
      asm add bx,cx
      asm dec dl
      asm jnz n1
      asm pop ds
      asm pop es
      return;
n3:
      asm pop ds
      asm pop es
n4:
      s=rand()%sirka;
      r=rand()%vyska;
      if(peek(VIDEOSEGMENT,2*(_stlpcov*(horny+r)+lavy+s))!=peek(FP_SEG(mem),FP_OFF(mem)+2*(sirka*r+s)))
	 poke(VIDEOSEGMENT,2*(_stlpcov*(horny+r)+lavy+s),peek(FP_SEG(mem),FP_OFF(mem)+2*(sirka*r+s)));
      else goto n4;
      delay(1);
      }
}
 
 
//************************************************************************//
// RAMCEK                                                                 //
//                                                            30.10.1997  //
//************************************************************************//
 
void ramcek(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska,unsigned char attr,unsigned char typ_ramceka)
{
   _SI=FP_OFF(_ramcek[typ_ramceka]);
   _DI=FP_SEG(_ramcek[typ_ramceka]);
   _BX=2*(_stlpcov*horny+lavy);
   _CL=sirka-2;
   _DX=(_stlpcov-sirka+1)*2;
   _CH=vyska-2;
 
   asm push es
   asm push ds
   _ES=VIDEOSEGMENT;
   _AH=attr;
   asm mov ds,di
 
   asm push cx
   asm mov ch,0
   asm inc cl
   asm shl cx,1
   asm mov di,cx
   asm pop cx
 
   asm mov al,ds:[si]
   asm mov es:[bx],ax
   asm inc bx
   asm inc bx
   asm mov al,ds:1[si]
   asm push cx
n1:
   asm mov es:[bx],ax
   asm inc bx
   asm inc bx
   asm dec cl
   asm jnz n1
   asm pop cx
   asm mov al,ds:2[si]
   asm mov es:[bx],ax
   asm add bx,dx
   asm mov al,ds:3[si]
n2:
   asm mov es:[bx],ax
   asm add bx,di
   asm mov es:[bx],ax
   asm add bx,dx
   asm dec ch
   asm jnz n2
   asm mov al,ds:6[si]
   asm mov es:[bx],ax
   asm inc bx
   asm inc bx
   asm mov al,ds:5[si]
n3:
   asm mov es:[bx],ax
   asm inc bx
   asm inc bx
   asm dec cl
   asm jnz n3
   asm mov al,ds:4[si]
   asm mov es:[bx],ax
   asm add bx,dx
   asm mov al,ds:7[si]
   asm pop ds
   asm pop es
 
}
 
 
 
//************************************************************************//
// TIEN                                                                   //
//                                                            30.10.1997  //
//************************************************************************//
 
void tien(unsigned int lavy,unsigned int horny,unsigned int sirka,unsigned int vyska,unsigned char attr)
{
   _DI=sirka*2-2;
   _BX=2*(_stlpcov*(horny+1)+lavy+sirka)+1;
   _DX=(_stlpcov-2)*2;
   _CH=vyska-1;
   _CL=sirka+1;
 
   asm push es
   _ES=VIDEOSEGMENT;
   _AL=attr;
 
n1:
   asm mov es:[bx],al
   asm inc bx
   asm inc bx
   asm mov es:[bx],al
   asm inc bx
   asm inc bx
   asm add bx,dx
   asm dec ch
   asm jnz n1
   asm sub bx,di
n2:
   asm mov es:[bx],al
   asm inc bx
   asm inc bx
   asm dec cl
   asm jnz n2
   asm pop es
}
 
 
/*---------------------------------END--------------------------------------*/