Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // cppCLinStackCLR.cpp: главный файл проекта.
- using namespace System;
- ref class List
- {
- static int MaxId;
- String^ StackId;
- static int MaxSize;
- int nextIndex;
- array<Single^>^ L;
- public: List(int mSize)
- {
- MaxSize = mSize;
- L = gcnew array<Single^>(MaxSize);
- MaxId++;
- StackId = ::Convert::ToString(MaxId);
- nextIndex = 0;
- Console::WriteLine("Создан список " + StackId + ".");
- };
- void addLastElement(Single^ c)
- {
- if (nextIndex < MaxSize)
- L[nextIndex++] = c;
- else Console::WriteLine("Список переполнен!");
- }
- Single^ getElementByIndex(int index)
- {
- if (index < nextIndex)
- {
- return L[index];
- }
- else
- {
- Console::WriteLine("Нет элемента с таким индексом!");
- return (Single)0;
- }
- }
- void deleteElementByValue(Single value)
- {
- for (int i = 0; i < nextIndex; i++)
- {
- if (L[i]->Equals(value))
- {
- deleteElementByIndex(i);
- return;
- }
- }
- Console::WriteLine("Нет элемента с таким значением!");
- return;
- }
- Single^ deleteElementByIndex(int index)
- {
- if (index < nextIndex)
- {
- Single^ deletedElement = L[index];
- if (index < nextIndex - 1)
- {
- for (int i = index; i < nextIndex - 1; i++)
- {
- L[i] = L[i + 1];
- }
- }
- nextIndex--;
- Console::WriteLine("Удалён элемент " + index + " = " + deletedElement +".");
- return deletedElement;
- }
- else
- {
- Console::WriteLine("Нет элемента с таким индексом!");
- return (Single)0;
- }
- }
- void printList()
- {
- if (nextIndex == 0)
- {
- Console::WriteLine("Список пуст!");
- }
- for (int i = 0; i < nextIndex; i++)
- {
- Console::WriteLine("Элемент " + i + " = " + L[i]);
- }
- }
- void inverse()
- {
- if (nextIndex == 0)
- {
- Console::WriteLine("Список пуст!");
- return;
- }
- if (nextIndex == 1)
- {
- Console::WriteLine("Список состоит из одного элемента!");
- return;
- }
- Single^ tmp;
- for (int i = 0; i < Math::Floor(nextIndex / 2); i++)
- {
- tmp = L[i];
- L[i] = L[nextIndex - 1 - i];
- L[nextIndex - 1 - i] = tmp;
- }
- Console::WriteLine("Список инверсирован!");
- }
- };
- bool enterInt(int% value)
- {
- try
- {
- int tmp = Convert::ToInt32(Console::ReadLine());
- value = tmp;
- return true;
- }
- catch (FormatException^)
- {
- Console::WriteLine("Неверный формат ввода. Значение должно быть целым положительным числом.");
- return false;
- }
- catch (OverflowException^)
- {
- Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате целого числа.");
- return false;
- }
- }
- bool enterSingle(Single% value)
- {
- try
- {
- Single tmp = Convert::ToSingle(Console::ReadLine());
- value = tmp;
- return true;
- }
- catch (FormatException^)
- {
- Console::WriteLine("Неверный формат ввода. Введите число с плавающей запятой в формате целая_часть,дробная_часть .");
- return false;
- }
- catch (OverflowException^)
- {
- Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате числа с одиночной точностью с плавающей запятой.");
- return false;
- }
- }
- int main(array<String^>^ args)
- {
- Single^ f;
- List^ vs; //1
- while (true)
- {
- Console::WriteLine("Создать список? (да - создать, любой другой ввод - выход из программы)");
- if (Console::ReadLine() == "да")
- {
- Console::WriteLine("Какой длины?");
- int mSize;
- Console::Write("Длина: ");
- if (!enterInt(mSize))
- {
- continue;
- }
- vs = gcnew List(mSize); //1
- break;
- }
- else return 0;
- }
- String^ s;
- do
- {
- Console::WriteLine("Что сделать? (распечатать список / добавить элемент в конец / получить элемент по индексу / удалить элемент по значению / удалить элемент по индексу / инверсировать список)");
- Console::Write("Действие: ");
- s = Console::ReadLine();
- if (s == "добавить элемент в конец")
- {
- Single value;
- Console::Write("Значение: ");
- if (!enterSingle(value))
- {
- continue;
- }
- vs->addLastElement(value);
- Console::WriteLine("Число добавлено в конец списка.");
- }
- else if (s == "получить элемент по индексу")
- {
- int index;
- Console::Write("Индекс: ");
- if (!enterInt(index))
- {
- continue;
- }
- Console::WriteLine("Элемент " + index + " = " + vs->getElementByIndex(index) + ".");
- }
- else if (s == "удалить элемент по значению")
- {
- Single value;
- Console::Write("Значение: ");
- if (!enterSingle(value))
- {
- continue;
- }
- vs->deleteElementByValue(value);
- }
- else if (s == "удалить элемент по индексу")
- {
- int index;
- Console::Write("Индекс: ");
- if (!enterInt(index))
- {
- continue;
- }
- vs->deleteElementByIndex(index);
- }
- else if (s == "распечатать список")
- {
- vs->printList();
- }
- else if (s == "инверсировать список")
- {
- vs->inverse();
- }
- else
- {
- Console::WriteLine("Неверный формат ввода. Доступны команды: распечатать список, добавить элемент в конец, получить элемент по индексу, удалить элемент по значению, удалить элемент по индексу, инверсировать список");
- }
- } while (s != "");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement