Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Код программы





#pragma once

#include"stdafx.h"

#include<stdio.h>

#include<stdlib.h>

#include<iostream>

#include<fstream>

#include<string>

#include<string.h>

#include<iomanip> // для функции setw()

#include<windows.h>

int oip=0;

 

 

struct tree

{

int name; // число

tree *left; // указатель на левую ветку дерева

tree *right; // указатель на правую ветку дерева

};

 

// (Создание первого элемента бинарного дерева)

tree *first (int name)

{

tree *pv = new tree;

pv->left = 0;

pv->right = 0;

pv->name = name;

return pv;

}

 

int name;

bool flag = false;

tree *root = 0;

 

 

//void readfile(tree **root);

tree *first (int name);

void add(tree *root, int n);

tree *descent(tree *p);

tree *del(tree *root, int name);

tree *delder(tree *root);

 

 

namespace U5 {

 

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>

/// Сводка для Form1

/// </summary>

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

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: добавьте код конструктора

//

}

 

protected:

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

~Form1()

{

if (components)

{

delete components;

}

}

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

protected:

private: System::Windows::Forms::ComboBox^ comboBox1;

private: System::Windows::Forms::ListBox^ listBox1;

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

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

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

 

private:

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

System::ComponentModel::Container ^components;

 

#pragma region Windows Form Designer generated code

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

void InitializeComponent(void)

{

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

this->comboBox1 = (gcnew System::Windows::Forms::ComboBox());

this->listBox1 = (gcnew System::Windows::Forms::ListBox());

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

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

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

this->SuspendLayout();

//

// button1

//

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

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

this->button1->Size = System::Drawing::Size(242, 152);

this->button1->TabIndex = 0;

this->button1->Text = L"Решить!";

this->button1->UseVisualStyleBackColor = true;

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

//

// comboBox1

//

this->comboBox1->FormattingEnabled = true;

this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^ >(10) {L"0.Считать из текстового файла", L"1.Добавить число",

L"2.Найти число", L"3.Найти дубликаты", L"4.Прямой обход", L"5.Обратный обход", L"6.Симметричный обход", L"7.Удалить число",

L"8.Удалить дерево",L"9.Найти число листьев"});

this->comboBox1->Location = System::Drawing::Point(18, 62);

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

this->comboBox1->Size = System::Drawing::Size(242, 21);

this->comboBox1->TabIndex = 1;

//

// listBox1

//

this->listBox1->FormattingEnabled = true;

this->listBox1->Location = System::Drawing::Point(278, 31);

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

this->listBox1->Size = System::Drawing::Size(347, 290);

this->listBox1->TabIndex = 2;

//

// textBox1

//

this->textBox1->Location = System::Drawing::Point(18, 131);

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

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

this->textBox1->TabIndex = 3;

//

// label1

//

this->label1->AutoSize = true;

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

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

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

this->label1->TabIndex = 4;

this->label1->Text = L"Выбор действия:";

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(15, 101);

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

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

this->label2->TabIndex = 5;

this->label2->Text = L"Ввод:";

//

// Form1

//

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

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

this->ClientSize = System::Drawing::Size(643, 342);

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

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

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

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

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

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

this->Name = L"Form1";

this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;

this->Text = L"Лабораторная работа №5 // Зубов Иван, А-07-11";

this->ResumeLayout(false);

this->PerformLayout();

 

}

 

 

// Считывание текстового файла

/*void readfile(tree **root)

{

FILE *file;

int n = 0;

char* file_name = "text.txt";

char load_string[50] = "";

string str,last;

bool flag = false;

 

file = fopen(file_name,"r"); // r означает открытие текстового файла на чтение

if(file!= 0)

{

fgets(load_string,50,file);

_tcprintf(_T("%s\r\n"), _T("В текстовом файле лежат такие данные: "));

cout << load_string << endl;

}

else

_tcprintf(_T("%s\r\n"), _T("Файл не найден."));

fclose(file);

 

str = load_string;

 

string::size_type begin, end = 0, pos=0;

 

_tcprintf(_T("%s\r\n"), _T("Среди них распознаны числа: "));

while(1)

{

begin = str.find_first_of("0123456789",end);

if(begin == string::npos)

break; // если нет

else

flag = true;

end = str.find_first_not_of("0123456789",begin);

last = str.substr (begin, end-begin);

n = atoi(last.c_str());

cout << n << " ";

if (*root == 0)

*root = first(n);

else

add(*root, n);

if(pos > end-1)

break;

}

if (flag == false)

_tcprintf(_T("%s\r\n"), _T("В текстовом файле нет чисел."));

}*/

 

//============================================================

// Начальное формирование данных

 

//============================================================

// Добавление числа

void add(tree *root, int n)

{

tree *pv = new tree;

tree *prev = 0;

tree *p;

bool flag;

pv->left = 0;

pv->right = 0;

do

{

flag = 1;

p = root;

pv->name = n;

while (p!=0)

{

prev = p;

if (pv->name <= p->name)

p = p->left;

else

p = p->right;

}

}

while (flag == 0);

if (pv->name <= prev->name)

prev->left = pv;

else

if (pv->name > prev->name)

prev->right = pv;

}

 

//============================================================

// Спуск по дереву (для функции удаления)

tree *descent(tree *p)

{

tree *prev, *y = p->right;

if (y->left == 0)

y->left = p->left;

else

{

do

{

prev = y;

y = y->left;

}

while (y->left);

 

y->left = p->left;

prev->left = y->right;

y->right = p->right;

}

return y;

}

 

//============================================================

// Удаление числа

tree *del(tree *root, int name)

{

tree *parent, *p, *y;

parent = p = root;

bool found = 0;

while (p!=0)

{

if (name == p->name)

{

found = 1;

break;

}

else

if (name < p->name)

{

parent = p;

p = p->left;

}

else

{

parent = p;

p = p->right;

}

}

 

if (found == 0)

listBox1->Items->Add("Нет такого числа.");

else

{

if (p->left==0)

y = p->right;

else

if (p->right==0)

y = p->left;

else

y = descent(p);

if (p == root)

root = y;

else

{

if (p->name < parent->name)

parent->left = y;

else

parent->right = y;

}

delete p;

}

return root;

}

 

 

//============================================================

// Удаление дерева

tree *delder(tree *root)

{

if (root)

root = 0;

return root;

}

 

//============================================================

// Рекурсивный обход 0 (Прямой обход)

void obhod0 (tree *root)

{

if (root == 0)

return;

 

obhod0(root->left); // Рекурсия

obhod0(root->right);

oip++;// Рекурсия

}

 

 

//============================================================

// Рекурсивный обход 1 (Прямой обход)

void obhod1 (tree *root)

{

if (root == 0)

return;

 

listBox1->Items->Add(root->name);

 

obhod1(root->left); // Рекурсия

obhod1(root->right);

oip++;// Рекурсия

 

}

 

//============================================================

// Рекурсивный обход 2 (Обратный обход)

void obhod2 (tree *root)

{

if (root == 0)

return;

 

obhod2(root->left); // Рекурсия

obhod2(root->right); // Рекурсия

listBox1->Items->Add(root->name);

}

 

//============================================================

// Рекурсивный обход 3 (Симметричный обход)

void obhod3 (tree *root)

{

if (root == 0)

return;

 

obhod3(root->left); // Рекурсия

listBox1->Items->Add(root->name);

obhod3(root->right); // Рекурсия

}

 

 

//============================================================

// Поиск данных

void search_dubl (tree *root)

{

if(root == 0)

return;

 

if(root->left!= 0 && root->name == root->left->name)

listBox1->Items->Add(root-> name);

 

search_dubl(root->left); // Рекурсия

search_dubl(root->right); // Рекурсия

}

 

//============================================================

//Поиск данных

void search (tree *root, int name)

{

bool found = 0;

tree *p = root;

while (p!=0)

{

if (p->name > name)

p = p->left;

else

if (p->name < name) p = p->right;

else

{ // иначе, если переменные равны

found = 1;

listBox1->Items->Add("Найдено: ");

listBox1->Items->Add(p->name);

break;

}

}

if (found == 0)

listBox1->Items->Add("Число не найдено.");

}

 

//============================================================

 

 

#pragma endregion

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

 

 

switch (comboBox1->SelectedIndex)

{ //Считать из текстового файла

/*case 0:

if (root == 0)

readfile(&root);

else

{

root = delder(root);

readfile(&root);

}

break;*/

 

//Добавить число

case 1:

{

name = Convert::ToInt32(textBox1->Text);

listBox1->Items->Add("Добавлено число: " + name);

// name=5;//cin >> name;

if (root == 0)

root = first(name);

else

add(root,name);

}

break;

 

//Найти число

case 2:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

{

 

 

name = Convert::ToInt32(textBox1->Text);

listBox1->Items->Add("Ищем число: " + name);

 

//name=this->textBox1->Text;

//name=4;//cin >> name

search(root,name);

}

break;

//Найти дубликаты

case 3:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

search_dubl(root);

 

break;

//Прямой обход

case 4:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

{

listBox1->Items->Add("Прямой обход:");

obhod1(root);

printf("%d",oip);

}

break;

//Обратный обход

case 5:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

{

listBox1->Items->Add("Обратный обход:");

obhod2(root);

}

break;

//Симметричный обход

case 6:

if (root == 0)

listBox1->Items->Add("Нет дерева.:");

else

{

listBox1->Items->Add("Симметричный обход:");

obhod3(root);

}

break;

//Удалить число

case 7:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

{

listBox1->Items->Add("Введите число, которое хотите удалить: ");

name = Convert::ToInt32(textBox1->Text);

//name=5;//cin >> name

root = del(root, name);

}

break;

//Удалить дерево

case 8:

if (root == 0)

listBox1->Items->Add("Нет дерева.");

else

{

root = delder(root);

listBox1->Items->Add("Дерево удалено.");

}

break;

//Найти число листьев

case 9: {

oip=0;

obhod0(root);

listBox1->Items->Add("Число листьев равно " + oip);

}

break;

 

 

}

 

 

}

};

}

 

 







Дата добавления: 2015-09-04; просмотров: 422. Нарушение авторских прав; Мы поможем в написании вашей работы!




Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последую­щая жизнь проходит под знаком этой травмы...

Studopedia.info - Студопедия - 2014-2026 год . (0.01 сек.) русская версия | украинская версия