You are on page 1of 9

Лабораторная работа №1.

Создание простейших приложений. Работа с числами и строками.

Пример. Выполняется проверка на ортогональность и коллинеарность двух


целочисленных векторов. Для ввода размерности векторов используется компонент
textBox1, для ввода векторов - компоненты textBox2 и textBox3, соответственно. Для
вывода результата используется компонент Label. Вид проверки указывается на основе
выбора соответствующей кнопки.

Файл Form1.h

#pragma once

namespace lab1 {

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
/// </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::TextBox^ textBox1;
protected:
private: System::Windows::Forms::TextBox^ textBox2;
private: System::Windows::Forms::TextBox^ textBox3;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::Label^ label4;
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::Button^ button2;
private: System::Windows::Forms::Button^ button3;

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->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->textBox2 = (gcnew System::Windows::Forms::TextBox());
this->textBox3 = (gcnew System::Windows::Forms::TextBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
this->label3 = (gcnew System::Windows::Forms::Label());
this->label4 = (gcnew System::Windows::Forms::Label());
this->button1 = (gcnew System::Windows::Forms::Button());
this->button2 = (gcnew System::Windows::Forms::Button());
this->button3 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(27, 90);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(100, 20);
this->textBox1->TabIndex = 0;
this->textBox1->KeyPress += gcnew
System::Windows::Forms::KeyPressEventHandler(this, &Form1::textBox1_KeyPress);
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(26, 176);
this->textBox2->Name = L"textBox2";
this->textBox2->Size = System::Drawing::Size(260, 20);
this->textBox2->TabIndex = 1;
this->textBox2->KeyPress += gcnew
System::Windows::Forms::KeyPressEventHandler(this, &Form1::textBox2_KeyPress);
//
// textBox3
//
this->textBox3->Location = System::Drawing::Point(30, 267);
this->textBox3->Name = L"textBox3";
this->textBox3->Size = System::Drawing::Size(256, 20);
this->textBox3->TabIndex = 2;
this->textBox3->KeyPress += gcnew
System::Windows::Forms::KeyPressEventHandler(this, &Form1::textBox2_KeyPress);
//
// label1
//
this->label1->AutoSize = true;
this->label1->Location = System::Drawing::Point(30, 72);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(119, 13);
this->label1->TabIndex = 3;
this->label1->Text = L"Размер пространства";
//
// label2
//
this->label2->AutoSize = true;
this->label2->Location = System::Drawing::Point(28, 157);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(180, 13);
this->label2->TabIndex = 4;
this->label2->Text = L"Введите координаты 1-го вектора";
//
// label3
//
this->label3->AutoSize = true;
this->label3->Location = System::Drawing::Point(31, 248);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(180, 13);
this->label3->TabIndex = 5;
this->label3->Text = L"Введите координаты 2-го вектора";
//
// label4
//
this->label4->AutoSize = true;
this->label4->Location = System::Drawing::Point(34, 337);
this->label4->Name = L"label4";
this->label4->Size = System::Drawing::Size(0, 13);
this->label4->TabIndex = 6;
//
// button1
//
this->button1->Location = System::Drawing::Point(425, 72);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(119, 23);
this->button1->TabIndex = 7;
this->button1->Text = L"Ортогональны \?";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this,
&Form1::button1_Click);
//
// button2
//
this->button2->Location = System::Drawing::Point(425, 137);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(119, 23);
this->button2->TabIndex = 8;
this->button2->Text = L"Коллинеарны \?";
this->button2->UseVisualStyleBackColor = true;
this->button2->Click += gcnew System::EventHandler(this,
&Form1::button2_Click);
//
// button3
//
this->button3->Location = System::Drawing::Point(425, 197);
this->button3->Name = L"button3";
this->button3->Size = System::Drawing::Size(119, 23);
this->button3->TabIndex = 9;
this->button3->Text = L"Выход";
this->button3->UseVisualStyleBackColor = true;
this->button3->Click += gcnew System::EventHandler(this,
&Form1::button3_Click);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode =
System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(603, 405);
this->Controls->Add(this->button3);
this->Controls->Add(this->button2);
this->Controls->Add(this->button1);
this->Controls->Add(this->label4);
this->Controls->Add(this->label3);
this->Controls->Add(this->label2);
this->Controls->Add(this->label1);
this->Controls->Add(this->textBox3);
this->Controls->Add(this->textBox2);
this->Controls->Add(this->textBox1);
this->FormBorderStyle =
System::Windows::Forms::FormBorderStyle::FixedSingle;
this->MaximizeBox = false;
this->Name = L"Form1";
this->Text = L"Векторы";
this->ResumeLayout(false);
this->PerformLayout();

}
#pragma endregion

private:
static array<char>^ s = gcnew array<char>(200);
static array<char>^ l = gcnew array<char>(200);
static array<int>^ A = gcnew array<int>(50);
static array<int>^ Q = gcnew array<int>(50);
static int dim=1;
static int f=0;
static int e1=0;

// Проверка векторов на ортогональность


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

array<String^>^ as;
array<Char>^ ar;
ar=gcnew array<Char> (1);
ar[0]=' ';
if ((textBox2->Text->Length!=0)&&(textBox3->Text->Length!=0)&&(textBox1->Text-
>Length!=0))
{
dim=Convert::ToInt32(textBox1->Text);
label1->Text="Размерность векторного пространства равна "+textBox1->Text;
e1=0;
f=0;
// Получение первого вектора из строки
as=textBox2->Text->Split(ar);
for( int i=0;i<dim;i++)
{
A[i]=Convert::ToInt32(as[i]);
e1++;
}
// Получение второго вектора из строки
as=textBox3->Text->Split(ar);
for( int j=0;j<dim;j++)
{
Q[j]=Convert::ToInt32(as[j]);
f++;
}
if((e1==dim)&&(f==dim))
{
int L=0;
for(int i=0;i<dim;i++)
L=L+A[i]*Q[i];
if(L==0){label4->Text="Векторы являются ортогональными";}
else {label4->Text="Векторы не являются ортогональными";}
}
else label4->Text="Вы ввели не все координаты";
}
else
MessageBox::Show("Вы ввели не все данные !\n",
"Ошибка",
MessageBoxButtons::OK,
MessageBoxIcon::Error);
}
private: System::Void textBox1_KeyPress(System::Object^ sender,
System::Windows::Forms::KeyPressEventArgs^ e) {

if ((e->KeyChar>='0')&&(e->KeyChar<='9') )
//цифра
return;
//остальные символы запрещены
e->Handled=true;
}
private: System::Void textBox2_KeyPress(System::Object^ sender,
System::Windows::Forms::KeyPressEventArgs^ e) {

if( ((e->KeyChar>='0')&&(e->KeyChar<='9'))||(e->KeyChar==8)||
(e->KeyChar==' ')||
(e->KeyChar=='-')) return;
//Остальные символы запрещены
e->Handled=true;
}

// Поверка векторов на коллинеарность


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

array<String^>^ as;
array<Char>^ ar;
ar=gcnew array<Char> (1);
ar[0]=' ';
if ((textBox2->Text->Length!=0)&&(textBox3->Text->Length!=0)&&(textBox1->Text-
>Length!=0))
{
dim=Convert::ToInt32(textBox1->Text);
label1->Text="Размерность векторного пространства равна "+textBox1->Text;
e1=0;
f=0;
// Получение первого вектора из строки
as=textBox2->Text->Split(ar);
for( int i=0;i<dim;i++)
{
A[i]=Convert::ToInt32(as[i]);
e1++;
}
// Получение второго вектора из строки
as=textBox3->Text->Split(ar);
for( int j=0;j<dim;j++)
{
Q[j]=Convert::ToInt32(as[j]);
f++;
}
//////////////////////////////////////////
if((e1==dim)&&(f==dim))
{
char h;
double mod1=0.0,mod2=0.0,abs_scal=0.0;
int k=1;
for (int i=0;i<dim;i++){
mod1+=A[i]*A[i];
mod2+=Q[i]*Q[i];
abs_scal+=A[i]*Q[i];
}
mod1=Math::Sqrt(mod1);
mod2=Math::Sqrt(mod2);
abs_scal=Math::Abs(abs_scal);

if(mod1*mod2)
{
if(Math::Abs(abs_scal/(mod1*mod2)-1.0)<=0.001)
{
label4->Text="Векторы являются коллинеарными";
}
else {
label4->Text="Векторы не являются коллинеарными";
}
}
else {label4->Text="Векторы не являются коллинеарными";}
}
else label4->Text="Вы ввели не все координаты";
}
else
MessageBox::Show("Вы ввели не все данные !\n",
"Ошибка",
MessageBoxButtons::OK,
MessageBoxIcon::Error);
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {

Close();
}
};
}

Индивидуальные задания
При выполнении заданий необходимо использовать как главную форму, так и
новую форму, которая может быть создана самостоятельно. Для вывода сообщений
использовать диалоговые окна (функция MessageBox::Show (…)). Для ввода информации
использовать компоненты TextBoxt, NumericUpDown (ввод числовых данных) и другие.
Для указания на окончание ввода исходных данных использовать как кнопки, так и
нажатие на клавишу Enter. При вводе числовых данных в текстовые компоненты
предусмотреть контроль вводимых данных.

1. Разработать калькулятор, реализующий арифметические операции.


2. Реализовать перевод чисел в двоичную, восьмеричную и шестнадцатеричную
системы счисления.
3. Реализовать поразрядные логические операции AND, OR, NOT, XOR для двоичных
векторов.
4. Реализовать вычисление скалярного произведения двух векторов, проверку,
являются ли векторы коллинеарными или ортогональными.
5. Выполнить сортировку одномерного массива различными способами.
6. Найти произведение элементов одномерного массива, расположенных между
максимальным и минимальным элементами.
7. Найти произведение элементов массива, расположенных между максимальным по
модулю и минимальным по модулю элементами.
8. Преобразовать одномерный массив таким образом, чтобы сначала располагались
все положительные элементы, а потом – все отрицательные.
9. Элементы одномерного массива циклически сдвинуть на k мест влево (вправо).
10. Сложить и умножить два полинома заданных степеней (коэффициенты полиномов
представляют собой одномерные массивы).
11. Ввести одномерный массив. Найти сумму элементов массива, расположенных
между первым и последним положительными элементами. Преобразовать массив
таким образом, чтобы сначала располагались все элементы равные нулю, а потом –
все остальные.
12. Ввести одномерный массив. Найти количество элементов массива, равных нулю.
Упорядочить элементы массива по возрастанию модулей элементов.
13. В одномерном массиве выбрать без повторений все элементы, встречающиеся
более одного раза.
14. Ввести одномерный массив и числа a и b. Найти номер максимального по модулю
элемента массива. Преобразовать массив таким образом, чтобы сначала
располагались все элементы, которые лежат в промежутке [a,b], а потом – все
остальные.
15. Ввести одномерный массив. Найти сумму элементов массива, расположенных
между первым и вторым положительными элементами. Преобразовать массив
таким образом, чтобы элементы, равные нулю, располагались после всех
остальных.

Вопросы
1. Каким образом, и какими средствами создаются приложения Windows Forms ?
2. Какие этапы реализуются при разработке приложений Windows Forms ?
3. Из каких файлов состоит приложение WinForm и как организованы эти файлы?
4. С выполнения каких функций и методов начинается выполнение приложения ?
5. Какие файлы входят в состав проекта и каково их назначение?
6. Каково назначение окон Solution Explorer и Редактора кода?
7. Приведите примеры компонентов и охарактеризуйте их назначение?
8. Охарактеризуйте главный модуль проекта?
9. Что содержит модуль формы (Form1.h)?
10. Как создать обработчик события (например, нажатия кнопки)?
11. Что такое компонент ?
12. В каком файле хранятся свойства компонентов ? На каком этапе разработки
приложения можно изменить эти свойства?
13. Перечислить основные отличия визуальных и невизуальных компонентов. Для чего
используются невизуальные компоненты?
14. На каком этапе происходит выделение памяти под объекты компонентных классов?
15. Что такое событие и как производится его обработка ?
16. Что такое опубликованное свойство компонента ?
17. Как включить новую форму в проект?
18. Какие компоненты используются для задания различных вариантов кнопок?
19. Приведите пример оператора изменения состояния флажка.
20. Перечислите и охарактеризуйте состояния, в которых может находиться флажок.
21. Напишите обработчик для анализа состояния флажка.
22. Какие события генерируются при создании и использовании формы?
23. Напишите какой-либо обработчик события создания формы.

You might also like