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

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

Program: Prac_ndf.cBooldif.zip
Soubor exe: Booldif.exe
Potřebné: 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
Pří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 FUNKCIE.C                               *
*                                                                            *
*****************************************************************************/
 
 
#include <stdlib.h>
#include <dos.h>
#include <process.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <io.h>
#include <sys\stat.h>
#include <sys\types.h>
 
#include "glob.h"
#include "menu.h"
#include "key.h"
#include "video.h"
#include "okno.h"
#include "error.h"
#include "adresar.h"
#include "slov_fon.h"
//************************************************************************//
// Funkcie pouzivane priamo pri volani z MENU.DEF                         //
//                                                            30.10.1997  //
//************************************************************************//
 
#include "funkcie.h"
#include "util.h"
#include "line_edi.h"
#include "mbooldif.h"
 
 
//************************************************************************//
// POPIS popis k programu                                                 //
//                                                            12.11.1997  //
//************************************************************************//
 
int popis1( void )
{
 help( Help[0] );
 return;
}
 
//************************************************************************//
// POPIS popis k programu                                                 //
//                                                            12.11.1997  //
//************************************************************************//
 
int popis2( void )
{
 help( Help[30] );
 return;
}
 
//************************************************************************//
// POPIS popis k programu                                                 //
//                                                            12.11.1997  //
//************************************************************************//
 
int popis3( void )
{
 help( Help[31] );
 return;
}
 
//************************************************************************//
// POPIS popis k programu                                                 //
//                                                            12.11.1997  //
//************************************************************************//
 
int popis4( void )
{
 help( Help[32] );
 return;
}
 
//************************************************************************//
// POPIS popis k programu                                                 //
//                                                            12.11.1997  //
//************************************************************************//
 
int popis5( void )
{
 help( Help[33] );
 return;
}
 
//************************************************************************//
// POMOC k programu                                                       //
//                                                             1.11.1997  //
//************************************************************************//
 
int pomoc( void )
{
 help( Help[0] );
 return;
}
 
 
//************************************************************************//
// DOS vola command.com (emulacia dos prompt)                             //
//                                                            30.10.1997  //
//************************************************************************//
 
int dos(void)
{
 
 if( otvor_okno(0,0,_stlpcov-2,_riadkov-2,0x70,0x70,0)==FALSE)
     chybove_okno(chyba[3]);
   else
   {
    vypln_okno(0,0,_stlpcov,_riadkov,' ',0x07);
    tlac_retazec(0,0,0x07,"Pre n vrat zadaj exit.");
    presun_kurzor(0,1);
    zapni_kurzor();
    system("");
    vypni_kurzor();
    zatvor_okno();
   }
 return 0;
}
 
 
//************************************************************************//
// NORTON zavola norton ak je v path nadefinovany                         //
//                                                            30.10.1997  //
//************************************************************************//
 
int norton(void)
{
 
 if( otvor_okno(0,0,_stlpcov-2,_riadkov-2,0x70,0x70,0)==FALSE)
     chybove_okno(chyba[3]);
   else
    {
     vypln_okno(0,0,_stlpcov,_riadkov,' ',0x07);
     tlac_retazec(0,1,0x07,"Pre n vrat stla‡ F10.");
     presun_kurzor(0,2);
     zapni_kurzor();
     system("nc");
     vypni_kurzor();
     zatvor_okno();
    }
 return 0;
}
 
//************************************************************************//
// KONIEC rozculi sa z uzivatelom                                         //
//                                                            30.10.1997  //
//************************************************************************//
 
int koniec(void)
{
 povodny_font();
 vrat_jadro();
 del_tmp("*.tmp");     				// aby neboli ziadne tmp subory k citaniu
 ukonc();
 exit(1);
 return 0;
}
 
//************************************************************************//
// RESET uvolni pamat, v mojom pripade aj zmaze TMP subori                //
//                                                            30.10.1997  //
//************************************************************************//
 
int reset(void)
{
 init_jadro();
 del_tmp("*.tmp");
 del_tmp( TmpSubor[4] );
 hlasky(chyba[25]);
 return ENTER;
}
 
//************************************************************************//
// RESET uvolni pamat so statistickymi udajmi                             //
//                                                            20.11.1997  //
//************************************************************************//
 
int reset_s(void)
{
int i;
 
 for( i=0; i < max_stat; i++ ) {
     s_stat->s_text[0]='\0';            // aka operacia
     s_stat->cas=0;	                // cas pri vzniku udalosti
     s_stat->pamet=0;	                // kolko zozralo pamete
    }
 
 p_stat=0;
 return ENTER;
}
 
//************************************************************************//
// NIE neukoncime program                                                 //
//                                                            30.10.1997  //
//************************************************************************//
 
int nie(void)
{
 return ENTER;
}
 
//************************************************************************//
// NASTAV REZIM aky rezim sa nastavuje DEMO,VYUK, ...                     //
//                                                            30.10.1997  //
//************************************************************************//
 
int nastav_rezim(void)
{
 Rezim=podmenu[6].posledna_volba;
 return ENTER;
}
 
 
//************************************************************************//
// INIT_JADRO nadefinuje a alokuje mem pre premenne                       //
//                                                            30.10.1997  //
//************************************************************************//
 
void init_jadro(void)
{
 pamet();                                       // ukaz ako si na tom z pametou
 znuluj(&h_fnc,1);
 znuluj(&deriv_f,1);		                // tu bude hlavna funkcia, a derivovana
 znuluj(&subst_NDF,1);                          // slovnik substitucii
 znuluj(&slovnik,1);                            // aj slovnik poruch
 strcpy( index, "  " );                         // aky index ma subst premenna
 pamet();                                       // ukaz ako si na tom z pametou
 return;
}
 
//************************************************************************//
// CITAJ_DISK cita bool. dif zo suboru                                    //
//                                                            30.10.1997  //
//************************************************************************//
 
int citaj_disk(void)
{
 char meno[256]="*.";
 int prip=0;
 
 strcat(meno,Pripony[prip]);
 znuluj(&slovnik,1);            // slovnik znulovany
 if( citaj_meno_suboru(meno,1)==TRUE)
    if( citaj_subor_z_disku(meno,prip)==FALSE)
	{
	 chybove_okno(chyba[7]);
	 return ESC;
	}
      else
	{
	 strcpy(Meno_suboru,meno);
	 return ENTER;
	}
 return ENTER;
}
 
 
//************************************************************************//
// CITAJ_SUBOR_Z_DISKU							  //
//                                                            30.10.1997  //
//************************************************************************//
 
citaj_subor_z_disku(char *meno,int prip)
{
 FILE *f;
 char pom[1];
 int i;
 
 if((f=fopen(meno,"r"))==NULL)
    {
     chybove_okno(chyba[3]);
     return (FALSE);
    }
 
 init_jadro();			// odznova
 del_tmp("*.tmp");		// zmazem aj TMP subory v ktorych su odlozene vysledky
 
 switch(prip)
       {
	case 0 :  {
		  strcpy( ret_f,"" ); strcpy( pom," ");
		  while ( !feof(f) && ( pom[0]!='\n' ) && ( pom[0]!='\r' )) {
			i=fscanf(f,"%c",&pom[0]);	// precitam znak
			if (( pom[0]!='\n' ) && ( pom[0]!='\r' ) && ( i== 1 ) )
			    strcat( ret_f, pom);	// taka finta
		       }
		  break;
		  }
       }
 moje_ascii(ret_f);
 fclose(f);
 return(0);
}
 
 
//************************************************************************//
// Zapise moje vysledky do suboru na disku                                //
//                                                             8.10.1997  //
//************************************************************************//
zapis_disk(void)
{
 int zx,zy;
 struct ffblk ffblk;
 char meno[256]="*.";
 char DOSprik[max_ret];
 int  prip=2;
 
 strcat(meno,Pripony[prip]);
 if (citaj_meno_suboru(meno,0)==TRUE)
    {
     // opytame sa ci chce prepisat, ak existuje
     if( findfirst(meno,&ffblk,0) == 0 ) {
         sprintf( DOSprik," SŁbor %s existuje.", meno );
         zx=_stlpcov/2-strlen(DOSprik)/2 - 1;
         zy=_riadkov/2-3;
         view_okno(zx,zy,zx+40,zy+6,atributy[20],atributy[21],2,"");
 
         tlac_retazec(zx+1,zy+1,atributy[20],DOSprik );
         tlac_retazec(zx+strlen(DOSprik)/2-7,zy+2,atributy[20],"PrepĄsaŸ ho nov˜m ?" );
 
         // polozime otazku prepisat subor ???
         if( anonie( zx+ strlen(DOSprik)/2 -4, zy+4 ) == FALSE ) return(0);
         zatvor_okno();
        }
     // zmazeme ak existuje
     sprintf( DOSprik,"if exist %s del %s >nul", meno, meno );
     system( DOSprik );
     ukladaj_cinnost( meno );
    }
 return(0);
}
 
//************************************************************************//
// ANONIE otazka na nieco                                                 //
// TRUE-odpovedal ano FALSE odpovedal nie                     30.10.1997  //
//************************************************************************//
int anonie( int x, int y )
{
char *odp[]={" Ano "," Nie "};
int odpoved=1;
int kl=0;
 
 tlac_retazec(x,y,atributy[20],odp[0]);
 tlac_retazec(x+7,y,atributy[17],odp[1] );
 do {
    kl=key();
    if( kl == LEFT  ) if( odpoved == 0 ) odpoved=1;
                                    else odpoved=0;
    if( kl == RIGHT ) if( odpoved == 1 ) odpoved=0;
                                   else odpoved=1;
 
    if(( kl == LEFT ) || ( kl == RIGHT ))
       {
        if( odpoved == 1 ) {
           tlac_retazec(x,y,atributy[20],odp[0]);
           tlac_retazec(x+7,y,atributy[17],odp[1]);
          }
        else {
           tlac_retazec(x,y,atributy[17],odp[0]);
           tlac_retazec(x+7,y,atributy[20],odp[1]);
          }
       }  // end if( odpoved == 0 )
   } while(( kl != ENTER ) && ( kl != ESC ));
 
 if(( kl == ESC ) || ( odpoved == 1 )) return( FALSE );
 return( TRUE );
}
 
//************************************************************************//
// NASTAV_VYSTUP kam ma ukladat vysledky vypoctu                          //
//                                                            30.10.1997  //
//************************************************************************//
 
int nastav_vystup(void)
{
 Vystup=podmenu[8].posledna_volba;
 return ENTER;
}
 
 
//************************************************************************//
// CITAJ_SUB malo by vystupovat ako neaky SETUP subor                     //
// nacitanie vstupnych udajov so suboru			      30.10.1997  //
//************************************************************************//
int cit_sub( void )
{
 return (TRUE);
}
 
//************************************************************************//
// VRAT_JADRO vratenie pamate vyhradenej pre jadro			  //
//                                                            30.10.1997  //
//************************************************************************//
 
void vrat_jadro()
{
 znuluj(&h_fnc,1);
 znuluj(&subst_NDF,1);
 znuluj(&deriv_f,1);
 return;
}
 
 
//************************************************************************//
// DEL_TMP maze TMP subori z disku                                        //
//                                                            30.10.1997  //
//************************************************************************//
 
void del_tmp( char subor[] )
{
 char del_ret[128];
 
 sprintf( del_ret," if exist %s del %s >nul", strspoj(temp,subor),strspoj(temp,subor) );
 system( del_ret );
}
 
//************************************************************************//
// Boolovska diferencia podla premennych bez medzivodicov                 //
// i:upravena funkcia o:diferencie podla premennych           22.11.1997  //
//************************************************************************//
 
int dif_bez_mv( void )
{
 diferencie( 0 );
 return( 0 );
}
 
//************************************************************************//
// Boolovska diferencia podla premennych aj s medzivodicami               //
// i:upravena funkcia o:diferencie podla premennych           22.11.1997  //
//************************************************************************//
 
int dif_s_mv( void )
{
 diferencie( 1 );
 return( 0 );
}
 
 
//************************************************************************//
// ZATVORKY_A algebraicky odstrani zatvorky                               //
//                                                            24.11.1997  //
//************************************************************************//
int zatvorky_a( void )
{
char pom[ max_ret ];
int zx,zy;
FILE *f,*fopen();
 
 zx=_stlpcov/2-38;
 zy=_riadkov/2-2;
 otvor_okno(zx,zy,zx+76,zy+7,atributy[39],atributy[40],1);
 tlac_retazec(zx+2,zy+1,atributy[39],"T to funkcia algebraicky odstr ni z tvorki a zobrazĄ.(Doplnkov  funkcia)");
 tlac_retazec(zx+2,zy+2,atributy[39],"Zadaj funkciu f= a-priamy z pis <shift>+a-invertovan˜ napr.(ŕbc+aáâ)");
 tlac_retazec(zx+2,zy+4,atributy[39],"f=");
 
 pom[0]='\0';
 riadkovy_editor(zx+5,zy+4,65,max_ret-1,atributy[13],atributy[12],pom);
 zatvor_okno();
 
 f=fopen( strspoj(temp, TmpSubor[5] ), "w" );
 fprintf(f,"\n P“vodn  funkcia :\n %s\n\n Po algebraickom odstr nenĄ z tvoriek:\n ", pom );
 
 if( view_okno(zx,zy,zx+46,zy+5,atributy[20],atributy[21],2,"")==FALSE) {
   chybove_okno( chyba[1] );
   return(0);
   }
 tlac_retazec(zx+1,zy+2,atributy[20]," Odstra¤ujem z tvorky ");
 
 odstran_zatvorky( pom, 1 );
 fprintf(f,"%s\n", pom );
 fclose(f);
 zatvor_okno();
 
 zx=_stlpcov/2-38;
 zy=_riadkov/2-7;
 if( view_okno(zx,zy,zx+76,zy+10,atributy[42],atributy[43],3," Doplnkov  funkcia ")==FALSE) {
   chybove_okno( chyba[1] );
   return(0);
   }
 
 zapni_kurzor();
 zobraz_tmp ( TmpSubor[5],0 );
 vypni_kurzor();
 zatvor_okno();
 return(0);
}
 
 
//************************************************************************//
// ZATVORKY_M matemeticky odstrani zatvorky                               //
//                                                            24.11.1997  //
//************************************************************************//
int zatvorky_m( void )
{
char pom[ max_ret ];
int zx,zy;
FILE *f,*fopen();
 
 zx=_stlpcov/2-38;
 zy=_riadkov/2-2;
 otvor_okno(zx,zy,zx+76,zy+7,atributy[39],atributy[40],1);
 tlac_retazec(zx+2,zy+1,atributy[39],"T to funkcia matemeticky odstr ni z tvorki a zobrazĄ.(Doplnkov  funkcia)");
 tlac_retazec(zx+2,zy+2,atributy[39],"Zadaj funkciu f= a-priamy z pis <shift>+a-invertovan˜ napr.(ŕbc+aáâ)");
 tlac_retazec(zx+2,zy+4,atributy[39],"f=");
 
 pom[0]='\0';
 riadkovy_editor(zx+5,zy+4,65,max_ret-1,atributy[13],atributy[12],pom);
 zatvor_okno();
 
 f=fopen( strspoj(temp, TmpSubor[5] ), "w" );
 fprintf(f,"\n P“vodn  funkcia :\n %s\n\n Po matemetickom odstr nenĄ z tvoriek:\n ", pom );
 
 if( view_okno(zx,zy,zx+46,zy+5,atributy[20],atributy[21],2,"")==FALSE) {
   chybove_okno( chyba[1] );
   return(0);
   }
 tlac_retazec(zx+1,zy+2,atributy[20]," Odstra¤ujem z tvorky ");
 
 odstran_zatvorky( pom , 0 );
 fprintf(f,"%s\n", pom );
 fclose(f);
 zatvor_okno();
 
 zx=_stlpcov/2-38;
 zy=_riadkov/2-7;
 if( view_okno(zx,zy,zx+76,zy+10,atributy[42],atributy[43],3," Doplnkov  funkcia ")==FALSE) {
   chybove_okno( chyba[1] );
   return(0);
   }
 
 zapni_kurzor();
 zobraz_tmp ( TmpSubor[5],0 );
 vypni_kurzor();
 zatvor_okno();
 return(0);
}
 
/*---------------------------------END--------------------------------------*/