Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)



Podobné dokumenty
Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Aplikace pro vykreslování grafů elementárních funkcí

Nejzajímavější jsou události MouseDown a KeyDown.

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

Středoškolská odborná činnost. Obor SOČ: 1. Matematika a statistika GRAFY FUNKCÍ

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Metodický list k didaktickému materiálu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Takto chápanému druhu objektů se říká TŘÍDA.

Metodický list k didaktickému materiálu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Jazyk C# a platforma.net

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Rovnice přímek v rovině

Metodický list k didaktickému materiálu

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Jazyk C# - přístup k datům

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

Podmíněné vykonávání

Pokročilá práce s proměnnými

Jazyk C# a platforma.net

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C# - přístup k datům

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Evropská obchodní akademie, Děčín I, Komenského náměstí 2, příspěvková organizace IČ tel

prostřednictvím ICT Téma didaktického materiálu RNDr. Václava Šrůtková

Zápis programu v jazyce C#

Jazyk C# - přístup k datům

1. Téma 12 - Textové soubory a výjimky

UniLog-D. v1.01 návod k obsluze software. Strana 1

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Větvení programů příkaz IF

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Komponenty v.net. Obsah přednášky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Teoretické minimum z PJV

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

PREPROCESOR POKRAČOVÁNÍ

KTE / ZPE Informační technologie

Metodický list k didaktickému materiálu

Algoritmizace a programování

Generické programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Metodický list k didaktickému materiálu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Náhodná a pseudonáhodná čísla

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Rozklad na prvočinitele. 3. prosince 2010

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Předdefinované dialogy

Cvičné příklady Hodina 2

Java a XML. 10/26/09 1/7 Java a XML

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Objektově orientované programování

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

PROGRAMOVÁNÍ PRO MS WINDOWS 1

Jazyk C# (seminář 6)

Robotika Kybernetika, automatizace a měření FEKT VUT v Brně

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Programování v jazyku C# II. 4.kapitola

1 Webový server, instalace PHP a MySQL 13

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

1. Téma 03 - Rozhodování

Transkript:

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz) Autor: Radek Vystavěl Díl 12: Algebra Lineární transformace MATEMATIKA Lineární transformace, neboli přeet hodnoty x podle vztahu ax + b, je velice užitečnou, leč výukou mnohdy opomíjenou záležitostí. Invariance vůči této transformaci může tvořit první jednoduchý test nějaké teorie, prakticky se s ní setkáme při různých přetech. V tomto díle seriálu ji aplikujeme v programu kreslícím graf zadaných bodů. Pro vykreslení grafu je potřeba souřadnice [x, y] bodů vyjádřené v nějakých reálných (fyzikálních) jednotkách přeítávat na souřadnice elové požadované kreslicími funkcemi. Interval x, xkonc, resp. y, ykonc reálných hodnot chceme lineárně transformovat na interval resp. 0, výška grafu. x,, resp. xkonc y,, typicky na 0, šířka grafu, ykonc Formulací a vyřešením příslušné soustavy rovnic lze dospět k intuitivně srozumitelnému vztahu mezi reálnou veličinou x a jejím elovým protějškem x : x x x = x + ( xkonc x ), x x konc případně ve výetně jednodušší formě: a x konc x ax x + = b, kde xkonc x =, bx = x ax x x x Analogické vztahy lze samozřejmě nalézt pro transformaci v souřadnici y. x

KONCEPČNÍ OTÁZKY PROGRAMU Program bude přijímat data ve formě textového souboru, na jehož každém řádku budou dvě čísla x a y, navzájem oddělena středníkem. Tento tzv. CSV formát lze snadno generovat libovolným vlastním programem a lze jej také snadno editovat v Poznámkovém bloku či Excelu. Meze na osách se zadají buď ručně, nebo si je program zjistí sám jako nejmenší a největší hodnotu v datech. TECHNICKÉ OTÁZKY NA PLATFORMĚ.NET/C# Jako plochu pro kreslení grafu lze využít standardní ovládací prvek panel. Seznam bodů se uloží v typu List<Bod>, kde Bod bude vlastní třída zapouzdřující dvě desetinná čísla x a y. Stav zaškrtnutí ( fajka ) zaškrtávacího políčka se zjišťuje dotazem na hodnotu jeho vlastnosti Checked. Při změně stavu zaškrtnutí vzniká událost CheckedChanged. Pro výběr souboru uživatelem lze použít standardní dialogové okno nástroj OpenFileDialog z Toolboxu. K načtení textového souboru do pole slouží metoda File.ReadAllLines. K rozdělení řetězce na jednotlivé podřetězce oddělené středníky slouží řetězcová metoda Split. Grafické funkce (např. DrawLine pro kreslení čáry) lze volat v obsluze události Paint po získání odkazu na kreslicí plochu z parametru e obslužné metody. Událost Paint lze z programu vyvolat voláním metody Refresh.

ŘEŠENÍ Uvádím zdrojový kód řešení. Nejprve třída Bod: using System; namespace Graf class Bod public double x, y; public Bod(double x, double y) this.x = x; this.y = y; A nyní hlavní část kódu: using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windows.Forms; namespace Graf public partial class oknoprogramu : Form // Členské proměnné const int okraj = 2; // kolik elů vynechat na okraji double ax, bx, ay, by; // koeficienty transformace List<Bod> seznambodů = new List<Bod>(); // Konstruktor okna (ze šablony Windows Forms Application) public oknoprogramu() InitializeComponent(); // Obslužné metody událostí private void oknoprogramu_load(object sender, EventArgs e) políčkoautomaticky.checked = true; MinimumSize = Size; private void políčkoautomaticky_checkedchanged(object sender, EventArgs e) polexáteční.readonly = polexkoncové.readonly = poleyáteční.readonly = poleykoncové.readonly = políčkoautomaticky.checked;

private void tlačítkopřekresli_click(object sender, EventArgs e) Překresli(); private void tlačítkonahrajdata_click(object sender, EventArgs e) // Zjisti jméno souboru s daty if (oknootevřenísouboru.showdialog()!= DialogResult.OK) return; string jménosouboru = oknootevřenísouboru.filename; // Načti data do prázdného seznamu bodů seznambodů.clear(); string[] poleřádků = File.ReadAllLines(jménoSouboru); foreach (string řádek in poleřádků) string[] položky = řádek.split(';'); try if (položky.length!= 2) throw new Exception(); float x = Convert.ToSingle(položky[0]); float y = Convert.ToSingle(položky[1]); Bod novýbod = new Bod(x, y); seznambodů.add(novýbod); catch MessageBox.Show("Chyba v řádku " + řádek); // Vykresli data Překresli(); private void panelgrafu_paint(object sender, PaintEventArgs e) Graphics kreslicíplocha = e.graphics; foreach (Bod bod in seznambodů) VykresliBod(kreslicíPlocha, bod); // Metody jádra programu private void Překresli() StiKoeficienty(); panelgrafu.refresh();

private void StiKoeficienty() // Ignoruj prázdný seznam bodů if (seznambodů.count == 0) return; // Zjisti meze na osách double xpoč, xkonc, ypoč, ykonc; if (políčkoautomaticky.checked) // Zjisti meze z dat (jako nejmenší a největší hodnoty) xpoč = ypoč = double.maxvalue; xkonc = ykonc = double.minvalue; foreach (Bod bod in seznambodů) if (bod.x < xpoč) xpoč = bod.x; if (bod.x > xkonc) xkonc = bod.x; if (bod.y < ypoč) ypoč = bod.y; if (bod.y > ykonc) ykonc = bod.y; else // Zjisti meze z textových polí try xpoč = Convert.ToDouble(poleXáteční.Text); xkonc = Convert.ToDouble(poleXkoncové.Text); ypoč = Convert.ToDouble(poleYáteční.Text); ykonc = Convert.ToDouble(poleYkoncové.Text); catch // Chyba v zadaných mezích, dál nekreslíme return; // Ošetři problémy / singularity if (xpoč >= xkonc) xkonc = xpoč + 1; if (ypoč >= ykonc) ykonc = ypoč + 1; // Pixelové meze v panelu int xpočpix = okraj; int xkoncpix = panelgrafu.clientsize.width - 1 - okraj; int ypočpix = panelgrafu.clientsize.height - 1 - okraj; int ykoncpix = okraj; // Sti koeficienty transformace ax = (xkoncpix - xpočpix) / (xkonc - xpoč); bx = xpočpix - ax * xpoč; ay = (ykoncpix - ypočpix) / (ykonc - ypoč); by = ypočpix - ay * ypoč;

private void VykresliBod(Graphics kreslicíplocha, Bod datovýbod) // Transformuj na elové souřadnice int x = Convert.ToInt32(ax * datovýbod.x + bx); int y = Convert.ToInt32(ay * datovýbod.y + by); // Nakresli bod jako dvojici čárek Pen pero = new Pen(panelGrafu.ForeColor); kreslicíplocha.drawline(pero, x-1, y, x+1, y); kreslicíplocha.drawline(pero, x, y-1, x, y+1); V odkazu najdete také kompletní projekt pro Visual C#. Spustitelný.EXE soubor z podsložky bin/debug využijete i v případě, že toto vývojové prostředí na svém ítači nemáte. K běhu zmíněného.exe souboru je na cílovém ítači zapotřebí přítomnost.net Framework 3.5 (pokud není u vás nainstalován, stáhněte si jej zdarma ze stránek společnosti Microsoft). V další odkazu najdete testovací data k programu. KAM DÁL V PROGRAMU Program je vděčný, dá se rozšiřovat mnoha směry, například: Kreslení os x, y včetně popisků na nich; Fixace měřítka mezi oběma osami; Zobrazení a editace datových bodů načtených ze souboru. KAM DÁL V.NET/C# O ovládacím prvku panel a kreslení grafiky se více dovíte v 6. kapitole knihy Moderní programování učebnice pro začátečníky. O práci se standardním dialogovým oknem pro výběr souboru se více dovíte v 5. kapitole knihy Moderní programování učebnice pro středně pokročilé. O práci se seznamy List<Typ> se více dovíte v 6. kapitole knihy Moderní programování učebnice pro středně pokročilé. O práci se soubory CSV se více dovíte v 7. kapitole knihy Moderní programování učebnice pro středně pokročilé. PROGRAMOVÁNÍ NÁZORNĚ A SROZUMITELNĚ Chcete se naučit programovat nebo se v programování zdokonalit? Akreditované ítačové kurzy společnosti moderníprogramování mohou být vaší správnou volbou. Na kurzech se učíte prakticky, lektor vám pomáhá překonat problémová místa, na cokoli se můžete zeptat. Prozkoumejte nabídku kurzů na http://www.moderniprogramovani.cz/kurzy/

Základní řada programovacích kurzů: Programování pro začátečníky Programování v.net/c# pro středně pokročilé Programování v.net/c# pro pokročilé Programujeme na nové platformě, v novém jazyce: Přecházíme na Javu Přecházíme na.net/c# Databáze Databáze a SQL pro začátečníky (neprogramátorský kurz) Databázové aplikace na platformě.net/c# Web Tvorba webu, HTML a CSS pro začátečníky (neprogramátorský kurz) Základy webových aplikací ASP.NET Pokročilé webové aplikace ASP.NET