
\chapter{Úvod}
\label{chap:uvod}

Minimalizace logických funkcí je součástí výuky každého předmětu, který se zabývá základy syntézy logických obvodů. Tyto
předměty jsou povinné zejména na elektro-průmyslových středních a vysokých školách. 

Mezi probíranou látkou je velmi často provádění minimalizace v~Karnaughově mapě. Občas bývá ještě uvedena Booleovská
n-krychle. Ve vyšších kurzech se někdy navíc učí fungování algoritmu \mbox{Quine--McCluskey}. Přestože nejsou tyto
metody v~praxi používány, velmi dobře se na nich minimalizace ukazuje a také jsou poměrně snadno pochopitelné.

I když je výukových materiálů hodně, je přeci jenom jednodušší a také rychlejší použít počítačový program, který vše
názorně zobrazí. Bohužel, do~dnešní doby neexistuje takových aplikací mnoho, a ty co existují, jsou velmi často
zpoplatněny, nebo nejsou příliš kvalitní. Aplikace, která by dokázala přehledně zobrazit výše zmíněné metody a která by
byla zdarma, by mohla najít široké uplatnění.    


\section{Cíl}
\label{sec:cil}

Hlavním cílem této práce je vytvoření aplikace pro~vizualizaci minimalizace logických funkcí. To konkrétně znamená
vytvoření aplikace, která umí zminimalizovat zadanou logickou funkci a následně zobrazit její výslednou minimální formu
v~Karnaughově mapě nebo v~Booleovské n-krychli. Zároveň také zobrazí průběh algoritmů Quine--McCluskey
a~Espresso. Součástí je také popsání jednotlivých metod a algoritmů. Nechybí ani popis způsobu implementace a
dokumentace aplikace.   

\newpage
\section{Postupný vývoj}
\label{sec:vyvoj}

Poprvé jsem se setkal s~logickými obvody v~roce 2007 v~předmětu \emph{Logické obvody}. Tehdy jsem při~učení se
Karnaughových map hledal program, který by byl zdarma a který by mi ukázal, jak se v~mapě rozmisťují mintermy a jak se
následně minimalizují. Bohužel jsem našel jen několik poměrně nekvalitních programů, které navíc nedokázaly
zobrazit minimální pokrytí přímo v~mapě. Napadla mě tedy myšlenka udělat vlastní program.

První realizace přišla o~půl roku později, kdy jsem vytvořil jako svoji semestrální práci do~předmětu \emph{Programování
  v~jazyce C} textový program pro~minimalizace logických funkcí, který byl založen na Quine--McCluskey algoritmu. Název
programu jsem zvolil \bmin{}, což je zkratka \textbf{B}oolean \textbf{min}imizer. Vznikla tedy první verze s~označením
0.1.0, která byla asi o~dva měsíce později rozšířena o~generování výpisu z~průběhu algoritmu -- vznikla tak druhá verze
0.1.1. 

V roce 2008 jsem si zapsl předmět \emph{Technologie programování v C++} a jako semestrální práci jsem se rozhodl
rozšířit aplikaci Bmin o~grafické rozhraní, v němž by bylo možné zobrazit Karnaughovu mapu. Zvolil jsem k~tomu grafickou 
knihovnu Qt. Vznikla tak verze 0.2.0, pro níž byla zvolena licence GPL 2.0. Důvodem byla svoboda a otevřenost kódu
publikovaného pod~touto licencí.

Následující semestr jsem si vybral předmět \emph{Základy počítačové grafiky}, kde bylo nutné vytvořit jako semestrální
práci aplikaci v~OpenGL. Rozhodl jsem se pro~trochu netradiční řešení a vytvořil Booleovskou n-krychli ve 3D
prostoru. To se podařilo a vydal jsem tak verzi 0.3.0. 

Poté jsem s~vývojem aplikace na nějakou dobu přestal. Až při zvažování tématu mé diplomové práce jsem se rozhodl pro
dokončení této aplikace. Od té doby byla aplikace v~podstatě kompletně přepsaná a počet řádků zdrojového kódu se rozrostl
na~více než 17 tisíc. Zároveň došlo k~přelicencování na~GPL 3.0. Bylo vydáno několik meziverzí až do současné verze
0.6.0. Jejímu popisu je věnována celá kapitola \ref{chap:bmin}. 



