I14, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia


Laboratorium 14

0x08 graphic
0x08 graphic
0x01 graphic

1. Cel ćwiczenia

Celem ćwiczenia jest zapoznanie się z obsługą C++ w środowisku Microsoft Visual C++.

2. Przykłady

Zad1

Aplikacja posiada 10 struktur. Do każdej struktury możemy przypisać takie dane jak Imię, Nazwisko oraz Wiek. Przy czym w każdej chwili możemy zobaczyć jakie dane zostały przypisane każdej ze struktur dzięki przyciskom numericUpDown.

#pragma once

namespace Struktura {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

/// <summary>

/// Summary for Form1

///

/// WARNING: If you change the name of this class, you will need to change the

/// 'Resource File Name' property for the managed resource compiler tool

/// associated with all .resx files this class depends on. Otherwise,

/// the designers will not be able to interact properly with localized

/// resources associated with this form.

/// </summary>

struct TDane

{

char imie[128];

char nazwisko[128];

int wiek;

} dane[10];

public ref class Form1 : public System::Windows::Forms::Form

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: Add the constructor code here

//

}

protected:

/// <summary>

/// Clean up any resources being used.

/// </summary>

~Form1()

{

if (components)

{

delete components;

}

}

private: System::Windows::Forms::Label^ label1;

protected:

private: System::Windows::Forms::NumericUpDown^ numericUpDown1;

private: System::Windows::Forms::Label^ label2;

private: System::Windows::Forms::Label^ label3;

private: System::Windows::Forms::Label^ label4;

private: System::Windows::Forms::TextBox^ textBox1;

private: System::Windows::Forms::TextBox^ textBox2;

private: System::Windows::Forms::NumericUpDown^ numericUpDown2;

private: System::Windows::Forms::Button^ button1;

private:

/// <summary>

/// Required designer variable.

/// </summary>

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

void InitializeComponent(void)

{

this->label1 = (gcnew System::Windows::Forms::Label());

this->numericUpDown1 = (gcnew System::Windows::Forms::NumericUpDown());

this->label2 = (gcnew System::Windows::Forms::Label());

this->label3 = (gcnew System::Windows::Forms::Label());

this->label4 = (gcnew System::Windows::Forms::Label());

this->textBox1 = (gcnew System::Windows::Forms::TextBox());

this->textBox2 = (gcnew System::Windows::Forms::TextBox());

this->numericUpDown2 = (gcnew System::Windows::Forms::NumericUpDown());

this->button1 = (gcnew System::Windows::Forms::Button());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown1))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown2))->BeginInit();

this->SuspendLayout();

//

// label1

//

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(13, 13);

this->label1->Name = L"label1";

this->label1->Size = System::Drawing::Size(81, 13);

this->label1->TabIndex = 0;

this->label1->Text = L"Numer struktury";

//

// numericUpDown1

//

this->numericUpDown1->Location = System::Drawing::Point(100, 11);

this->numericUpDown1->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) {9, 0, 0, 0});

this->numericUpDown1->Name = L"numericUpDown1";

this->numericUpDown1->Size = System::Drawing::Size(45, 20);

this->numericUpDown1->TabIndex = 1;

this->numericUpDown1->ValueChanged += gcnew System::EventHandler(this, &Form1::numericUpDown1_ValueChanged);

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(16, 45);

this->label2->Name = L"label2";

this->label2->Size = System::Drawing::Size(29, 13);

this->label2->TabIndex = 2;

this->label2->Text = L"Imię:";

//

// label3

//

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(16, 73);

this->label3->Name = L"label3";

this->label3->Size = System::Drawing::Size(56, 13);

this->label3->TabIndex = 3;

this->label3->Text = L"Nazwisko:";

//

// label4

//

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(16, 101);

this->label4->Name = L"label4";

this->label4->Size = System::Drawing::Size(35, 13);

this->label4->TabIndex = 4;

this->label4->Text = L"Wiek:";

//

// textBox1

//

this->textBox1->Location = System::Drawing::Point(86, 42);

this->textBox1->MaxLength = 127;

this->textBox1->Name = L"textBox1";

this->textBox1->Size = System::Drawing::Size(116, 20);

this->textBox1->TabIndex = 5;

//

// textBox2

//

this->textBox2->Location = System::Drawing::Point(86, 68);

this->textBox2->MaxLength = 127;

this->textBox2->Name = L"textBox2";

this->textBox2->Size = System::Drawing::Size(116, 20);

this->textBox2->TabIndex = 6;

//

// numericUpDown2

//

this->numericUpDown2->Location = System::Drawing::Point(86, 99);

this->numericUpDown2->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) {1, 0, 0, 0});

this->numericUpDown2->Name = L"numericUpDown2";

this->numericUpDown2->Size = System::Drawing::Size(42, 20);

this->numericUpDown2->TabIndex = 7;

this->numericUpDown2->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) {18, 0, 0, 0});

//

// button1

//

this->button1->Location = System::Drawing::Point(13, 142);

this->button1->Name = L"button1";

this->button1->Size = System::Drawing::Size(75, 23);

this->button1->TabIndex = 8;

this->button1->Text = L"Zapamiętaj";

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

//

// Form1

//

this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(213, 182);

this->Controls->Add(this->button1);

this->Controls->Add(this->numericUpDown2);

this->Controls->Add(this->textBox2);

this->Controls->Add(this->textBox1);

this->Controls->Add(this->label4);

this->Controls->Add(this->label3);

this->Controls->Add(this->label2);

this->Controls->Add(this->numericUpDown1);

this->Controls->Add(this->label1);

this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedToolWindow;

this->Name = L"Form1";

this->Text = L"Struktura";

this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown2))->EndInit();

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

for (int i=0;i<=9;i++)

{

dane[i].imie[0] = 0;

dane[i].nazwisko[0] = 0;

dane[i].wiek = 18;

};

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

int Index;

Index = Convert::ToInt16(numericUpDown1->Value);

for (int i=0;i<textBox1->Text->Length;i++)

{

dane[Index].imie[i] = textBox1->Text[i];

dane[Index].imie[i+1] = 0;

};

for (int i=0;i<textBox2->Text->Length;i++)

{

dane[Index].nazwisko[i] = textBox2->Text[i];

dane[Index].nazwisko[i+1] = 0;

};

dane[Index].wiek = Convert::ToInt16(numericUpDown2->Value);

}

private: System::Void numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e)

{

int Index;

Index = Convert::ToInt16(numericUpDown1->Value);

int licznik = 0;

textBox1->Text = "";

while (dane[Index].imie[licznik] != 0)

{

textBox1->Text = textBox1->Text + Convert::ToChar(dane[Index].imie[licznik]);

licznik++;

};

licznik = 0;

textBox2->Text = "";

while (dane[Index].nazwisko[licznik] != 0)

{

textBox2->Text = textBox2->Text + Convert::ToChar(dane[Index].nazwisko[licznik]);

licznik++;

};

numericUpDown2->Value = dane[Index].wiek;

}

};

}

Zad2

Aplikacja posiada cztery klasy. Jako pierwsza, klasa konstruktora domyślnego będzie wyświetlała właściwości klasy. Druga klasa wykorzystuje konstruktor klasy z parametrami, gdzie parametry zmieniają się według argumentów podanych przy tworzeniu klasy. Trzecia klasa wykorzystuje domyślny konstruktor i używa metody klasy w następującej kolejności: pokaz - zmien - pokaz. Ostatnia klasa tworzona dynamicznie, wykorzystuje konstruktor z parametrami, następnie konstruktor domyślny.

Po każdej klasie wywoływany jest destruktor w celu wyczyszczenia pamięci.

#pragma once

#include "moja_klasa.h"

namespace Klasa {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

/// <summary>

/// Summary for Form1

///

/// WARNING: If you change the name of this class, you will need to change the

/// 'Resource File Name' property for the managed resource compiler tool

/// associated with all .resx files this class depends on. Otherwise,

/// the designers will not be able to interact properly with localized

/// resources associated with this form.

/// </summary>

public ref class Form1 : public System::Windows::Forms::Form

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: Add the constructor code here

//

}

protected:

/// <summary>

/// Clean up any resources being used.

/// </summary>

~Form1()

{

if (components)

{

delete components;

}

}

private: System::Windows::Forms::Button^ button1;

protected:

private: System::Windows::Forms::Button^ button2;

private: System::Windows::Forms::Button^ button3;

private: System::Windows::Forms::Button^ button4;

private:

/// <summary>

/// Required designer variable.

/// </summary>

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

void InitializeComponent(void)

{

this->button1 = (gcnew System::Windows::Forms::Button());

this->button2 = (gcnew System::Windows::Forms::Button());

this->button3 = (gcnew System::Windows::Forms::Button());

this->button4 = (gcnew System::Windows::Forms::Button());

this->SuspendLayout();

//

// button1

//

this->button1->Location = System::Drawing::Point(12, 12);

this->button1->Name = L"button1";

this->button1->Size = System::Drawing::Size(153, 23);

this->button1->TabIndex = 0;

this->button1->Text = L"Konstruktor domyślny";

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

//

// button2

//

this->button2->Location = System::Drawing::Point(13, 42);

this->button2->Name = L"button2";

this->button2->Size = System::Drawing::Size(152, 23);

this->button2->TabIndex = 1;

this->button2->Text = L"Konstruktor z parametrami";

this->button2->UseVisualStyleBackColor = true;

this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);

//

// button3

//

this->button3->Location = System::Drawing::Point(13, 72);

this->button3->Name = L"button3";

this->button3->Size = System::Drawing::Size(152, 23);

this->button3->TabIndex = 2;

this->button3->Text = L"Metoda zmień";

this->button3->UseVisualStyleBackColor = true;

this->button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click);

//

// button4

//

this->button4->Location = System::Drawing::Point(13, 102);

this->button4->Name = L"button4";

this->button4->Size = System::Drawing::Size(152, 23);

this->button4->TabIndex = 3;

this->button4->Text = L"Klasa tworzona dynamicznie";

this->button4->UseVisualStyleBackColor = true;

this->button4->Click += gcnew System::EventHandler(this, &Form1::button4_Click);

//

// Form1

//

this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(177, 144);

this->Controls->Add(this->button4);

this->Controls->Add(this->button3);

this->Controls->Add(this->button2);

this->Controls->Add(this->button1);

this->Name = L"Form1";

this->Text = L"Klasy";

this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);

this->ResumeLayout(false);

}

#pragma endregion

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

TZwierze klasa1;

klasa1.pokaz();

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{

TZwierze klasa2 (0,false,false,"ryba");

klasa2.pokaz();

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

{

TZwierze klasa3;

klasa3.pokaz();

klasa3.zmien(2,true,true,"czlowiek");

klasa3.pokaz();

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

{

TZwierze *wskaznik;

TZwierze *wskaznik2;

wskaznik = new TZwierze (1,false,false,"zmienna dynamiczna");

wskaznik2 = new TZwierze;

wskaznik->pokaz();

wskaznik2->pokaz();

delete wskaznik;

delete wskaznik2;

}

};

}

Wybieramy z menu głownego programu:

Project Add New Item… Code Header File (.h) i w polu name wpisać moja_klasa

I skopiować ten kod:

#include <string>

using namespace std;

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

class TZwierze

{

private:

int ile_nog;

bool oddycha;

bool chodzi;

string nazwa;

public:

TZwierze ();

~TZwierze ();

void zmien (int,bool, bool,string);

TZwierze (int, bool, bool, string);

void pokaz();

};

Wybieramy z menu głownego programu:

Project Add New Item… Code C++ File (.cpp) i w polu name wpisać moja_klasa

I skopiować ten kod:

#include "stdafx.h"

#include "moja_klasa.h"

TZwierze::TZwierze()

{

ile_nog = 4;

oddycha = true;

chodzi = true;

nazwa = "zwierzak";

MessageBox::Show ("Użyto konstruktora");

};

TZwierze::~TZwierze()

{

MessageBox::Show ("Użyto destruktora");

};

void TZwierze::zmien(int nogi, bool oddech, bool chodz, std::string naz)

{

ile_nog = nogi;

oddycha = oddech;

chodzi = chodz;

nazwa = naz;

};

TZwierze::TZwierze(int a, bool b, bool c, std::string d)

{

zmien (a,b,c,d);

MessageBox::Show ("Użyto konstruktora z parametrami");

};

void TZwierze::pokaz()

{

MessageBox::Show ("Twoje zwierze ma "+Convert::ToString(ile_nog)+" nogi/nóg");

if (oddycha == true)

{

MessageBox::Show ("Twoje zwierze oddycha");

}

else

{

MessageBox::Show ("Twoje zwierze nie oddycha");

};

if (chodzi == true)

{

MessageBox::Show ("Twoje zwierze chodzi");

}

else

{

MessageBox::Show ("Twoje zwierze nie chodzi");

};

String ^tekst;

tekst = gcnew String ("");

for (unsigned int i = 0; i<nazwa.length();i++)

{

tekst = tekst + Convert::ToChar(nazwa.data()[i]);

};

MessageBox::Show ("Twoje zwierze nazywa się: "+tekst);

delete tekst;

};

3. Program ćwiczenia

Zad3

Bazując na zadaniu nr 2 należy utworzyć nową klasę TCzlowiek która będzie dziedziczyła metody i właściwości domyślnej klasy TZwierze. Wpierw będzie wyświetlać odziedziczone wartości, następnie wartości zdefiniowane przy tworzeniu klasy TCzlowiek. Należy również zmienić ciała konstruktorów wszystkich klas tak aby wyświetlały w oknie dialogowym dokładne informacje o klasie do jakiej przynależą i typie konstruktora. Na koniec stworzyć destruktor dla klasy TCzlowiek o czym również ma informować okno dialogowe.

0x01 graphic

Zad4

Aplikacja Timer ma realizować następujące zadanie, po wciśnięciu przycisku Start wprawić mały kwadrat w ruch (przy dojechaniu kwadratu do jednego z boków okna aplikacji, kwadrat ten ulega odbiciu). Kwadrat porusza się aż do czasu wciśnięcia przycisku Stop.

0x01 graphic

1

Podstawy Informatyki



Wyszukiwarka