Catalog · How the catalog works
matrix_calculator
A simple matrix calculator written as a semester project in Pascal language.
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Maticov� kalkul�tor
Richard Kl�ma, 2. ročn�k, Zimn� semestr 2017/2018, Programov�n� I
Stručn� zad�n�
Program nab�z� maticov� kalkul�tor s grafick�m u�ivatelsk�m rozhran�m.
Přesn� zad�n�
Maticov� kalkul�tor pracuje s maticemi, jejich� prvky jsou racion�ln� č�sla
v desetinn�m i zlomkov�m z�pisu. Pomoc� maticov�ho kalkul�toru je mo�n� matice
mezi sebou sč�tat, odč�tat a n�sobit, je-li to mo�n�. Jednotliv� matice lze tak�
n�sobit racion�ln� konstantou, transponovat, přev�d�t do Gaussova tvaru a
poč�tat jejich determinant. S v�sledn�mi maticemi lze d�le pracovat nebo je
exportovat do textov�ho souboru.
Maticov� kalkul�tor tak� umo��uje poč�tat soustavy line�rn�ch rovnic a� o sedmi
nezn�m�ch, pokud maj� pr�v� jedno řeŠen�. U�ivatel zad� matici soustavy, a pokud
m� soustava pr�v� jedno řeŠen�, maticov� kalkul�tor ho najde. Pokud m� soustava
nekonečn� mnoho řešen�, program u�ivateli ozn�m�, �e soustava nem� jednoznačn�
řešen�. Pokud soustava řešen� nem�, program tuto skutečnost u�ivateli rovn�
ozn�m�.
Zvolen� algoritmus
Algoritmy pou�it� v implementaci maticov�ho kalkul�toru jsou př�močar� algoritmy pro prov�d�n� z�kladn�ch operac� se zlomky a maticemi. Tyto algoritmy zahrnuj� např. sč�t�n� zlomků, n�soben� zlomků, kr�cen� zlomků na z�kladn� tvar, převod matice do Gaussova tvaru, vyhodnocen� matice soustavy line�rn�ch rovnic, atd.
Diskuze v�b�ru algoritmu
Algoritmy pou�it� v programu jsou standardn� u��van� algoritmy pro pr�ci s maticemi. Algoritmy pro pr�ci se zlomky jsou navr�eny tak, aby pr�ce se zlomky byla co nejpř�močařejš� a nejjednodušš�.
Program
Hlavn� jednotkou je formul�řov� jednotka Unit1. Ta se star� o b�h formul�ře,
o jeho vzhled a zm�ny vzhledu, o nač�t�n� vstupn�ch dat od u�ivatele a z
textov�ch souborů, v�pis v�stupn�ch dat do určen�ch m�st na formul�ři,
exportov�n� v�stupn�ch dat do textov�ch souborů a zobrazov�n� zpr�v určen�ch
u�ivateli. Jej� funkc� je tak� vol�n� metod ostatn�ch jednotek. Nejdůle�it�jš�mi
funkcemi t�to jednotky jsou:
Button1Click� načten� matice z formul�řov�ho okna pro zad�v�n� matic,Button3Click� načten� matice z textov�ho souboru,Button14Click� exportov�n� v�sledn� matice do textov�ho souboru,Button15Click� vol�n� Gaussovy metody v jednotce UMatice.
Dalš� jednotkou v programu je jednotka UMatice. Ta se star� o pr�ci s maticemi
jako takov�mi, tedy o sč�t�n�, odč�t�n�, n�soben� a transpozici matic, převod
do Gaussova tvaru, poč�t�n� determinantu a vyhodnocov�n� matice soustavy
line�rn�ch rovnic. Jej�mi nejdůle�it�jš�mi funkcemi jsou:
Secti(TMatice, var TMatice),Odecti(TMatice, var TMatice),Vynasob(TMatice, var TMatice)� sečte, resp. odečte, resp. vyn�sob� dv� matice mezi s sebou, -NasobKonstantou(string)� vyn�sob� matici konstantou,Transponuj� transponuje matici,Gauss(var boolean, var TMatice),Gauss (var TMatice)� převede danou matici do Gaussova tvaru, pokud je to mo�n�; varianta s referenčn�m parametrem typu boolean nav�c vr�t� informaci, jestli je potřeba zm�nit znam�nko při poč�t�n� determinantu matice (operace prohozen� ř�dků při poč�t�n� determinantu m�n� jeho znam�nko), -VyhodnoceniGauss(var TDynPole)� vyhodnot� matici soustavy line�rn�ch rovnic (převede matici do Gaussova tvaru a od posledn�ho ř�dku určuje řešen�) a vrac� vektor řešen�, -Determinant(var TZlomek)� spoč�t� determinant matice (převede matici do Gaussova tvaru a vyn�sob� spolu prvky na hlavn� diagon�le, popř. podle informace z metodyGauss(var boolean, var TMatice)zm�n� znam�nko determinantu).
Všechny tyto funkce vrac� hodnotu typu boolean, kter� ř�k�, jestli dan� funkce
prob�hla v poř�dku, nebo jestli b�hem jej�ho vyhodnocov�n� nastal n�jak�
speci�ln� př�pad a operace tak nemohla prob�hnout (např. pokud matice, ze kter�
u�ivatel chce poč�tat determinant, nen� čtvercov�, funkce
Determinant(var TZlomek) vr�t� false).
D�le tato jednotka obsahuje pomocn� funkce na hled�n� maxim�ln� hodnoty ve
sloupci matice, prohazov�n� ř�dků, apod.
Posledn� jednotkou pou��vanou v programu je jednotka <code>UZlomky</code>. Ta zajiš�uje pr�ci se zlomky ve tvaru <code>p/q</code>, kde <code>p ∈ ℤ</code>, <code>q ∈ ℕ</code>, konkr�tn� např. o kr�cen�, sč�t�n�, odč�t�n� a n�soben� zlomků. Nejdůle�it�jš�mi funkcemi t�to jednotky jsou:
- Zkrat � zkr�t� zlomek na jeho z�kladn� tvar (tj. p, q jsou nesoud�ln�
č�sla),
- Secti(TZlomek), Odecti(TZlomek), Nasob(TZlomek) � sečte, resp. odečte,
resp. vyn�sob� vlastn� zlomek se zlomkem předan�m v parametru,
Vysledek� vr�t� hodnotu vlastn�ho zlomku jako re�ln� č�slo.
D�le tato jednotka obsahuje pomocn� funkce pro pr�ci se zlomky, např. převr�cen� hodnoty zlomku, určen� absolutn� hodnoty zlomku, porovn�n� dvou zlomků, apod.
Alternativn� programov� řešen�
Algoritmy pou�it� v implementaci jsou co nejpř�močařejš�. N�kter� algoritmy by
pravd�podobn� šlo nahradit v�konn�jš�mi, nicm�n� nepřisp�lo by to k přehlednosti
zdrojov�ho k�du.
Funkce formul�řov� jednotky Unit1 maj� defaultn� n�zvy, co� trochu
znepř�jem�uje čten� k�du, nicm�n� u ka�d� z t�chto funkc� je stručn� koment�ř,
k čemu dan� funkce slou��, aby bylo na prvn� pohled jasn�, o jakou funkci se
jedn�.
Reprezentace vstupn�ch dat a jejich př�prava
U�ivatel komunikuje s programem pomoc� tlač�tkov�ho formul�ře, kde ka�d�
tlač�tko obsahuje popis sv� funkcionality. Vyskytuj� se tak� přep�nače, kter�
slou�� k tomu, aby bylo jednoznačn� určeno, se kterou matic� se m� pracovat.
Zad�vat matice mů�e u�ivatel př�mo ve formul�ři prostřednictv�m připraven�
mř�ky (kter� je omezen� maxim�ln�mi rozm�ry 12 � 12) nebo načten�m matice z
textov�ho souboru, ve kter�m je na prvn�m ř�dku počet ř�dků a počet sloupců
matice odd�len� mezerami a na dalš�ch ř�dc�ch jsou po ř�dc�ch vypsan� prvky
matice dan�ho rozm�ru. Pokud vstupn� soubor nen� ve spr�vn�m form�tu, program
u�ivatele uv�dom� a načten� neprob�hne. Matici soustavy line�rn�ch rovnic
u�ivatel zad�v� př�mo ve formul�ři do připraven� mř�ky, jej� velikost si před
t�m s�m nastav�.
Program nab�z� tak� lištov� menu v horn� č�sti formul�ře, kter� ale poskytuje
stejn� mo�nosti jako tlač�tkov� formul�ř.
Reprezentace v�stupn�ch dat a jejich př�prava
V�stupn� data jsou graficky reprezentov�na ve formul�ři, kde u�ivatel vid� v�sledky sv�ch operac� s maticemi a vyhodnocov�n� soustav rovnic v připraven�ch mř�k�ch. U�ivatel tak� mů�e v�sledek sv�ch operac� a vyhodnocov�n� soustav rovnic exportovat do v�stupn�ho textov�ho souboru, kter� m� stejn� form�t jako platn� vstupn� soubor programu a mů�e tak b�t pou�it pro dalš� načten� matice ze souboru.
Průb�h pr�ce
Pr�ce na programu prob�hala relativn� hladce, z poč�tku nejv�ce času zabral grafick� n�vrh formul�ře, posl�ze byly nejn�ročn�jš�mi funkcemi na implementaci funkce pro převod do Gaussova tvaru a vyhodnocen� matice soustavy line�rn�ch rovnic. Jednotka pro pr�ci se zlomky byla naps�na samostatn� ji� dř�ve pro jin� můj program, a tedy mi přišlo v�hodn� ji vyu��t i v tomto programu (proto se v jednotce vyskytuj� n�kter� funkce a procedury, kter� nejsou nikde v programu pou�ity).
Co nebylo dod�l�no
Nebylo dod�l�no lepš� poč�t�n� soustav line�rn�ch rovnic, kdy při nekonečn�m
počtu řešen� program pouze vypisuje informaci o tomto stavu, přičem� by mohl
soustavu vyřešit parametrizac� n�jak�ch prom�nn�ch a vr�tit vektor v�sledků.
Za zamyšlen� by st�la tak� historie proveden�ch operac� a s t�m se v�zaj�c�
funkce Undo a Redo.
Dalš�m n�padem, kter� by šlo realizovat, by byla jak�si př�kazov� ř�dka, kde by u�ivatel mohl po načten� matic (ne nutn� nejv�še dvou z�rove� � tak� by šlo dod�lat) zad�vat př�kazy, kter� by s maticemi cht�l prov�st, např. ve tvaru <code>((A - B) * (1/3) * C) � (D * (E + I6))</code> a tyto operace by se n�sledn� provedly. Jednalo by se tedy o přips�n� n�jak�ho interpreteru pro tuto př�kazovou ř�dku.

