Program rieši problém generovania testov prostredníctvom Boolovskej diferencie
Delphi & Pascal (česká wiki)
Kategórie: Programy v C, C++
Program: Prac_ndf.c, Booldif.zip
Soubor exe: Booldif.exe
Potřebné: Adresar.c, Color.c, Derivac.c, Error.c, Funkcie.c, Help.c, Key.c, Line_edi.c, Main.c, Menu.c, Obsluha.c, Okno.c, Prac_ndf.c, Slovnik.c, Slov_fon.c, Statist.c, Util.c, Video.c, Vystupy.c, Adresar.h, Color.h, Define.h, Error.h, Funkcie.h, Glob.h, Key.h, Line_edi.h, Mbooldif.h, Menu.h, Okno.h, Slov_fon.h, Util.h, Video.h
Příklady: Example.zip, Bin_10_o.ndf, Bin_10_o.ndf, Bin_1and.ndf, Bin_2rad.ndf, Bin_3rad.ndf, Bin_4rad.ndf, Hard.ndf, I_reg_lo.ndf, Reg_jk.ndf, Scitac_s.ndf, Scp_1rad.ndf, Scp_2rad.ndf, Scp_2r_1.ndf, Scp_3rad.ndf, Scp_4r_2.ndf, Scp_6r_3.ndf, Scp_8r_4.ndf, Sc_1r_pj.ndf, Sc_1r_sj.ndf, Sc_1_aoi.ndf, Sc_2r_4.ndf, Sc_3r_6.ndf, Sc_7400n.ndf, Sc_aon.ndf, Simp3_a.ndf, Simp3_b.ndf, Simp4_a.ndf, Simp4_b.ndf, Simp4_c.ndf, Simp6_a.ndf, Test_vod.ndf, Zle.ndf
Manual: Prirucky.zip
Program: Prac_ndf.c, Booldif.zip
Soubor exe: Booldif.exe
Potřebné: Adresar.c, Color.c, Derivac.c, Error.c, Funkcie.c, Help.c, Key.c, Line_edi.c, Main.c, Menu.c, Obsluha.c, Okno.c, Prac_ndf.c, Slovnik.c, Slov_fon.c, Statist.c, Util.c, Video.c, Vystupy.c, Adresar.h, Color.h, Define.h, Error.h, Funkcie.h, Glob.h, Key.h, Line_edi.h, Mbooldif.h, Menu.h, Okno.h, Slov_fon.h, Util.h, Video.h
Příklady: Example.zip, Bin_10_o.ndf, Bin_10_o.ndf, Bin_1and.ndf, Bin_2rad.ndf, Bin_3rad.ndf, Bin_4rad.ndf, Hard.ndf, I_reg_lo.ndf, Reg_jk.ndf, Scitac_s.ndf, Scp_1rad.ndf, Scp_2rad.ndf, Scp_2r_1.ndf, Scp_3rad.ndf, Scp_4r_2.ndf, Scp_6r_3.ndf, Scp_8r_4.ndf, Sc_1r_pj.ndf, Sc_1r_sj.ndf, Sc_1_aoi.ndf, Sc_2r_4.ndf, Sc_3r_6.ndf, Sc_7400n.ndf, Sc_aon.ndf, Simp3_a.ndf, Simp3_b.ndf, Simp4_a.ndf, Simp4_b.ndf, Simp4_c.ndf, Simp6_a.ndf, Test_vod.ndf, Zle.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é.
POZNÁMKA: Zdrojové kódy ktoré simulujú prostredie Turbo Vision niesu dielom autora.
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 MENU.C * * * *****************************************************************************/ #include <stdlib.h> #include <dos.h> #include <alloc.h> #include <string.h> #include "key.h" #include "util.h" #include "glob.h" #include "menu.h" #include "video.h" #include "okno.h" #include "error.h" #pragma warn -wsus #include "menu.def" #pragma warn +wsus //************************************************************************// // PULL_DOWN_MENU // // 30.10.1997 // //************************************************************************// int pull_down_menu(struct HL_Menu *hlavne,struct Menu podmenu[],int volba) { int pocet_volieb; int k=0,i; int koniec=0; struct Polozka_HL_Menu *polozka; polozka=hlavne->polozky; pocet_volieb=0; while(polozka->text!=NULL) { polozka++; pocet_volieb++; } pocet_volieb--; while(!koniec) { k=0; if(volba!=0) { hlavne->posledna_volba=volba-1; goto enter; } switch(vodorovne_menu(hlavne)) { case -1: exit(1); case DOWN: enter: case ENTER: while(k==0) { i=hlavne->posledna_volba; switch(zvisle_menu(&podmenu[i])) { case -1: neodstranitelna_chyba(); case ESC: zatvor_okno(); zrus_menu(); volba=0; k=1; break; case ENTER: zatvor_okno(); zrus_menu(); /*k=1; koniec=ENTER;*/ break; case LEFT: zatvor_okno(); zrus_menu(); if(--hlavne->posledna_volba<0) hlavne->posledna_volba=pocet_volieb; break; case RIGHT: zatvor_okno(); zrus_menu(); if(++hlavne->posledna_volba>pocet_volieb) hlavne->posledna_volba=0; break; } tlac_vodorovne_menu(hlavne); zvyrazni_vodorovne_menu(hlavne); } break; } } return koniec; } //************************************************************************// // ZVISLE_MENU // // 30.10.1997 // //************************************************************************// int zvisle_menu(Menu *menu) { register int i; int rx,ry; int zx,zy; int volba=0; int kl=0; vypni_kurzor(); zisti_suradnice(menu,&zx,&zy,&rx,&ry); if (otvor_okno(zx,zy,zx+rx,zy+ry,menu->attr_okna,menu->attr_okraja,menu->typ_okraja)!=TRUE) return(-1); zarad_menu(menu); i=0; while (menu->polozky[i].text!=NULL) tlac_riadok_menu(zx,zy,i++,menu,rx-2); for (i=0;i<rx-2;i++) nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar); while (volba==0) { tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key); kl=key(); tlac_riadok_menu(zx,zy,menu->posledna_volba,menu,rx-2); switch(kl) { case UP: if (--menu->posledna_volba<0)menu-> posledna_volba=ry-3; break; case DOWN: if (++menu->posledna_volba>=ry-2) menu->posledna_volba=0; break; case PGDOWN: case END: menu->posledna_volba=ry-3; break; case PGUP: case HOME: menu->posledna_volba=0; break; case LEFT: volba=LEFT; break; case RIGHT: volba=RIGHT; break; case ESC: return ESC; case ENTER: opak_enter: if (menu->polozky[menu->posledna_volba].cinnost == MENU) { zvisle_menu(menu->polozky[menu->posledna_volba].c.podmenu); zatvor_okno(); zrus_menu(); volba=0; } else { if (menu->polozky[menu->posledna_volba].c.fnc != NULL) { tlac_riadok_menu(zx,zy,menu->posledna_volba,menu,rx-2); volba=menu->polozky[menu->posledna_volba].c.fnc(); } } break; case F1: for (i=0;i<rx-2;i++) nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar); if (menu->polozky[menu->posledna_volba].help!=NULL) help(*menu->polozky[menu->posledna_volba].help); break; default: kl=prevod_na_velke(kl); for (i=0;i<ry-2;i++) if (kl==prevod_na_velke(menu->polozky[i].hot_key)) { menu->posledna_volba=i; goto opak_enter; } break; } info_okno(); for (i=0;i<rx-2;i++) nastav_atribut(zx+1+i,zy+1+menu->posledna_volba,menu->attr_bar); } return volba; } //************************************************************************// // VODOROVNE_MENU // // 30.10.1997 // //************************************************************************// int vodorovne_menu(struct HL_Menu *menu) { register int i=0; int pocet_volieb; int volba=0; int kl=0; struct Polozka_HL_Menu *polozka; polozka=menu->polozky; pocet_volieb=0; while(polozka->text!=NULL) { polozka++; pocet_volieb++; } pocet_volieb--; vypni_kurzor(); tlac_vodorovne_menu(menu); zvyrazni_vodorovne_menu(menu); tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key); while(volba==0) { switch(kl=key()) { case LEFT: if(--menu->posledna_volba<0) menu->posledna_volba=pocet_volieb; break; case RIGHT: if(++menu->posledna_volba>pocet_volieb) menu->posledna_volba=0; break; case PGDOWN: case END: menu->posledna_volba=pocet_volieb; break; case PGUP: case HOME: menu->posledna_volba=0; break; case DOWN: case ESC: case ENTER: volba=kl; break; case F1: if(menu->polozky[menu->posledna_volba].help!=NULL) help(*menu->polozky[menu->posledna_volba].help); break; default: kl=prevod_na_velke(kl); for(i=0;i<=pocet_volieb;i++) if(kl==prevod_na_velke(menu->polozky[i].hot_key)) { menu->posledna_volba=i; volba=ENTER; } break; } tlac_vodorovne_menu(menu); zvyrazni_vodorovne_menu(menu); tlac_riadok_help(menu->polozky[menu->posledna_volba].spodny_riadok,menu->attr_spodneho_riadku,menu->attr_hot_key); } return volba; } //************************************************************************// // TLAC_VODOROVNE_MENU // // 30.10.1997 // //************************************************************************// void tlac_vodorovne_menu(struct HL_Menu *menu) { register int i=0,j; char *p; int bol; int zx,zy; int attr1,attr2; struct Polozka_HL_Menu *polozka; zy=menu->riadok; attr1=menu->attr_okna; attr2=menu->attr_hot_key; polozka=menu->polozky; while(polozka->text!=NULL) { bol=0; zx=polozka->stlpec; p=polozka->text; j=0; while(*p!='\0') { if(*p!=polozka->hot_key) { tlac_znak(zx+j,zy,attr1,*p); } else if(bol==0) { tlac_znak(zx+j,zy,attr2,*p); bol=1; } else tlac_znak(zx+j,zy,attr1,*p); j++; p++; } i++; polozka++; } } //************************************************************************// // ZVYRAZNI_VODOROVNE_MENU // // 30.10.1997 // //************************************************************************// void zvyrazni_vodorovne_menu(struct HL_Menu *menu) { register int j; register char i; char *p; int bol=0; int zx,zy; int attr1,attr2; zy=menu->riadok; attr1=menu->attr_bar; attr2=(menu->attr_hot_key & 0x0f)|(menu->attr_bar & 0xf0); zx=menu->polozky[menu->posledna_volba].stlpec; p=menu->polozky[menu->posledna_volba].text; i=menu->polozky[menu->posledna_volba].hot_key; j=0; while(*p!='\0') { if(*p!=i) { tlac_znak(zx+j,zy,attr1,*p); } else if(bol==0) { tlac_znak(zx+j,zy,attr2,*p); bol=1; } else tlac_znak(zx+j,zy,attr1,*p); j++; p++; } } //************************************************************************// // TLAC_RIADOK_MENU // // 30.10.1997 // //************************************************************************// void tlac_riadok_menu(int zx,int zy,int riadok,struct Menu *menu,int sirka) { register int i=0,bol=0; char *p; p=menu->polozky[riadok].text; while(*p!='\0') { if(*p!=menu->polozky[riadok].hot_key || bol!=0) tlac_znak(zx+1+i,zy+1+riadok,menu->attr_okna,*p); else { tlac_znak(zx+1+i,zy+1+riadok,menu->attr_hot_key,*p); bol=1; } i++; p++; } while(i<sirka) { tlac_znak(zx+1+i,zy+1+riadok,menu->attr_okna,' '); i++; } } //************************************************************************// // TLAC_RIADOK_HELP // // 30.10.1997 // //************************************************************************// void tlac_riadok_help(char *p,unsigned char attr1,unsigned char attr2) { register int i=0; register int j; j=attr1; while(*p!='\0') if(*p=='~') { j=attr2; p++; } else { if(*p==' ') j=attr1; tlac_znak(i++,_riadkov-1,j,*p++); } tlac_do_konca_riadku(i,_riadkov-1,attr1,' '); } //************************************************************************// // ZISTI_SIRKU_OKNA // // 30.10.1997 // //************************************************************************// int zisti_sirku_okna(Polozka_Menu *polozky) { register int i=0,j; int max=0; char *p; while(polozky[i].text!=0) { j=0; p=polozky[i].text; i++; while(*p++!='\0') j++; if(j>max) max=j; } return max+2; } //************************************************************************// // ZISTI_VYSKU_OKNA // // 30.10.1997 // //************************************************************************// int zisti_vysku_okna(Polozka_Menu *polozky) { register int i=0; while(polozky[i++].text!=NULL); return i+1; } //************************************************************************// // INIC_MENU // // 30.10.1997 // //************************************************************************// void inic_menu(struct HL_Menu *hlavne,struct Menu podmenu[]) { register int i; struct Polozka_HL_Menu *h; struct Menu *m; h=hlavne->polozky; m=podmenu; while(h->text!=NULL) { m->horny=hlavne->riadok+1; i=zisti_sirku_okna(m->polozky); if(h->stlpec==0) m->lavy=0; else if(h->stlpec+i+4>_stlpcov) m->lavy=_stlpcov-i-3; else m->lavy=h->stlpec-1; m++; h++; } info_okno(); } /*------------------------------END-----------------------------------------*/