1 / 38

Tutoriál 3 8.3.2014 Jiří Šebesta

Počítače a programování 2. Tutoriál 3 8.3.2014 Jiří Šebesta. TÉMA. PROGRAMOV ÁNÍ V MS VISUAL STUDIU: Z ákladní pojmy Formulářová aplikace Příklady formulářových aplikací Objekt DataGridWiev Inverzní matice. Základní pojmy (1/4). Projekt pro Windows: hlavičkové soubory

kita
Download Presentation

Tutoriál 3 8.3.2014 Jiří Šebesta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Počítače a programování 2 Tutoriál 3 8.3.2014 Jiří Šebesta

  2. TÉMA PROGRAMOVÁNÍ V MS VISUAL STUDIU: Základní pojmy Formulářová aplikace Příklady formulářových aplikací Objekt DataGridWiev Inverzní matice

  3. Základní pojmy (1/4) Projekt pro Windows: hlavičkové soubory soubory xxx.h zdrojové soubory soubory xxx.c nebo xxx.cpp zdroje (resources) = především grafické objekty s danými vlastnostmi a chováním soubory xxx.rc(xxx.ico)

  4. Základní pojmy (2/4) Zdroje: nabídky klávesové zkratky bitové rastry, ikony, kurzory znakové řetězce panely nástrojů dialogová okna • Dialogové okno: • základní objekt (každé okno je dialogové okno) • ovládací prvky v dialogovém okně jsou opět dialogová okna se speciálními vlastnostmi • platí princip nadřízený vs. podřízený dialog

  5. Dialogové okno (resp. prvek): • vlastnosti (properties) – proměnné defi-nující vlastnosti okna (prvku)a události (events), tj. funkce vyvolané při vzniku určité události v objektu (okně), např. kliknutí myší Základní pojmy (3/4) • modalita oken • modální okno, ne-lze opustit bez za-vření (příznak stylu WS_VISIBLE nastaven) • nemodální lze kdykoli opustit (defokusovat)

  6. Základní typy Win aplikací: • využívající MFC(Microsoft Foundation Class Library) • SDI (Single-document interface) – aplikace, kdy se pracuje pouze s jedním dokumentem • MDI (Multiple-document interface) – aplikace, kdy se pracuje s více dokumenty současně (např. MS Visual Studio je MDI aplikace) • Aplikace na bázi dialogu – jedno dialogové okno pro jednodušší programy • využívající standardní prostředky Windows • Formulářová aplikace pro Windows Základní pojmy (4/4) • Kde získat MS Visual Studio Professional 2008/2010: MSDN AA FEKT VUT v Brně

  7. Založení projektu: Formulářová aplikace (1/10)

  8. Tvorba formuláře (úprava vlastností + vkládání ovládacích prvků) : Formulářová aplikace (2/10)

  9. Formulářová aplikace (3/10) this->ColorBox->BackColor= system::Drawing::Color::Transparent; this->ColorBox->Controls->Add(this->RB_blue); this->ColorBox->Controls->Add(this->RB_green); this->ColorBox->Controls->Add(this->RB_red); this->ColorBox->ForeColor= system::Drawing::SystemColors::ControlText; this->ColorBox->Location = System::Drawing::Point(2,86); this->ColorBox->Name = L"ColorBox"; this->ColorBox->Size = System::Drawing::Size(88, 100); this->ColorBox->TabIndex = 1; this->ColorBox->TabStop = false; this->ColorBox->Text = L"Color"; Automaticky vygenerovaný kód pro nastavení ovládacího prvku veform.h : • thisreprezentuje ukazatel na tento formulář

  10. Generování funkce pro ošetření události Formulářová aplikace (4/10) ve form1.h je vygenero-vána hlavička funkce udá-losti, do které lze vepsat tělo s požadovaným kódem … private: System::Void RB_blue_Click(System::Object^ sender, System::EventArgs^e) { this->My_text->ForeColor = System::Drawing::Color::Blue; } …

  11. Funkce main() ve Form1.cpp Formulářová aplikace (5/10) #include<stdafx.h> #include"Form1.h" using namespaceEx95; [STAThreadAttribute] int main(array<System::String ^> ^args) { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Create the main window and run it Application::Run(gcnew Form1()); return 0; } Projekt: Ex95

  12. Windows Form aplikace ve MSVS2013: new project Formulářová aplikace (6/10) • Nelze založit formulářovou aplikaci přímo, je nutné nejprve založit prázdný projekt CLR Empty Project s vhodným jménem

  13. Pro formulářovou aplikaci je třeba přidat v Project – Add (vyvolat pravým tlačítkem): UI – Windows Form s vhod-ným jménem např. MyForm.h nebo Form.h Formulářová aplikace (7/10)

  14. Dále je třeba doplnit MyForm.cpp o následující kód: Formulářová aplikace (8/10) #include"MyForm.h" using namespaceSystem; using namespaceSystem::Windows::Forms; [STAThread] voidMain(array<System::String ^> ^args) { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); Ex105::MyForm form; Application::Run(%form); return 0; } • Podle názvu projektu a formuláře upravit.

  15. Nastavit v Project – Properties:Linker - System Formulářová aplikace (9/10)

  16. Nastavit Linker – Advanced – Entry Point na jméno startovací funkce v MyForm.cpp, např.Main Formulářová aplikace (10/10)

  17. Funkce main() ve Ex95.cpp Formulářová aplikace (5/5) #include<stdafx.h> #include<Form1.h> using namespace EX07_1; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Enabling Windows XP visual effects before any controls are created Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Create the main window and run it Application::Run(gcnew Form1()); return 0; } Projekt: Ex95

  18. Příklady formulářových aplikací (1/7) • Vizuální návrh formuláře 1) Vytvořte formulářový program pro jednoduchou kalkulačku – sčítání, odečítání, násobení a dělení dvou racionálních čísel.

  19. Funkce pro načtení textu z TextBoxu s koverzí na double Příklady formulářových aplikací (2/7) double get_A(void) { return System::Convert::ToDouble(this->text_A->Text); } double get_B(void) { return System::Convert::ToDouble(this->text_B->Text); } ovládací prvek formuláře TextBox pojmenovaný text_B proměnná TextBoxu volání konverzní metody ukazatel na tento formulář

  20. Ošetření událostí – kliknutí na jednotlivá tlačítka Příklady formulářových aplikací (3/7) private: System::Void bt_plus_Click(System::Object^ sender, System::EventArgs^ e) { this->Res->Text = System::Convert::ToString(get_A()+get_B()); } … private: System::Void bt_div_Click(System::Object^ sender, System::EventArgs^ e) { this->Res->Text = System::Convert::ToString(get_A()/get_B()); } volání konverzní metody volání funkcí pro čtení vstupů ukazatel na tento formulář třídaSystem metoda třídy System Projekt: Ex96

  21. Příklady formulářových aplikací (4/7) • Vizuální návrh formuláře 2) Vytvořte formulářový program pro jednoduchou databázi počítačů (položky: výrobce, cena a velikost paměti) se záznam až 20ti počítačů s dynamickým přístupem.

  22. Sestavení vlastní knihovny funkci pocitac.h Příklady formulářových aplikací (5/7) #include<stdlib.h> #include<string.h> #include"stdafx.h" typedefstruct t_pc { char prod[ 20]; // name of the producer int price; // price of the computer float mem; // RAM capacity in GB }a_pc; void add(char* _prod, int _price, float _mem); // adding new computer void sort(void); // sorting according to the price t_pc* get_fwd(void);// point out to the next computer t_pc* get_bwd(void);// point out to the prev. computer int show_price(void);// get price of an added pc int show_cheap(void);// get price of the cheapest pc

  23. Deklarace pole ukazatelů na záznamy + příklad funkce add() v pocitac.cpp Příklady formulářových aplikací (6/7) #include"stdafx.h" #include"pocitac.h"// definition of the struct t_pc t_pc *katalog[20];// array of pointers to computers int index=0; // first free position in the katalog int ptr=index-1; // pointer to a pc displayed in edits void add(char* _prod, int _price, float _mem) { t_pc *my_pc; my_pc = (t_pc*) malloc(sizeof(t_pc)); strcpy(my_pc->prod, _prod); my_pc->price = _price; my_pc->mem = _mem; katalog[ptr=index++] = my_pc; }

  24. Přilinkování knihovny a ošetření události stisku tlačítka Add ve Form1.h Příklady formulářových aplikací (7/7) #pragma once #include"pocitac.h" using namespace System::Runtime::InteropServices; namespace EX07_3 { …. private: System::Void AddBtn_Click(System::Object^ sender, System::EventArgs^ e) { add((char*)Marshal::StringToHGlobalAnsi(ProdEdit->Text).ToPointer(), System::Convert::ToInt32(PriceEdit->Text), System::Convert::ToDouble(MemEdit->Text)); ShowLbl->Text = System::Convert::ToString(show_price()); } volání konverzní metody VisualString => *char Projekt: Ex97

  25. Objekt DataViewGrid (1/3) počet sloupců a řádků text v hlavičkách sloupců this->DGW->ColumnCount = 5; this->DGW->RowCount = 1; this->DGW->Columns[0]->Name = "Name"; … this->DGW->Columns[4]->Name = "Plant"; jméno objektu index sloupce

  26. text v hlavičkách řádků nelze Objekt DataViewGrid (2/3) text do datových řádků array<String^>^RowA = gcnewarray<String^>{"Adam","Aachen","Auto","*","**"}; this->DGW->Rows->Add(RowA); array<String^>^RowB = gcnewarray<String^>{"Bob","Brno","Basket","Buffalo","*"}; this->DGW->Rows->Add(RowB); přidání nového řádku a naplnění polem RowB definice pole znakových řetězců RowB

  27. tabulka bez hlaviček Objekt DataViewGrid (3/3) numerická data do buněk DGW->Rows[m]->Cells[n]->Value = X[m][n].ToString("0.000"); konverze do VS stringu na 3 desetinná místa data jsou v poli double X[][] n-tý sloupec m-tý řádek

  28. Inverzní matice (1/10) • Zadání: • Vytvořte program, který bude počítat inverzní matici. Správnost výpočtu ověřte. • Předpřipravený formulář Řešení krok za krokem

  29. Gauss – Jordanova eliminační metoda: Inverzní matice (2/10) • Postup: • Shodnými úpravami v obou mati-cích je třeba matici A převést na jednotkovou matici, pak původní jednotková matice z pravé strany bude hledanou inverzní maticí A-1. A 1

  30. Inverzní matice (3/10) Po Po

  31. Inverzní matice (4/10) Po Po

  32. Inverzní matice (5/10) Po Po

  33. Po Inverzní matice (6/10) A-1

  34. Algoritmus: Inverzní matice (7/10) • Shora => dolů

  35. Ze spodu => nahoru Inverzní matice (8/10) Projekt: Ex98

  36. Funkcevoid invert(TMatrix A, TMatrix U)(část shora – dolů): Inverzní matice (9/10) int i, j, k; double cf; for(i=0; i<3; i++) {cf = A[i][i]; for( j=0; j<3; j++) {A[i][j] /= cf; U[i][j] /= cf; } for(k=i+1; k<3; k++) {cf = A[k][i]; for(j=0; j<3; j++) {A[k][j] -=cf*A[i][j]; U[k][j] -=cf*U[i][j]; } } }

  37. Funkcevoid invert(TMatrix A, TMatrix U)(část ze spodu – nahoru): Inverzní matice (10/10) for(i=2; i>=0; i--) for( k=i-1; k>=0; k--) { cf = A[k][i]; for(j=2; j>=0; j--) { A[k][j] -= cf*A[i][j]; U[k][j] -= cf*U[i][j]; } } • Společné programování v BPC2E (zveřejní se 10.3.) Projekt: Ex98sol

  38. TÉMA NÁSLEDUJÍCÍHO TUTORIÁLU Matlab DĚKUJI ZA POZORNOST

More Related