Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

matrix_calculator

A simple matrix calculator written as a semester project in Pascal language.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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 metody Gauss(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.