Advertisement
CherMi

List for float C++ CLI

Nov 14th, 2020
993
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.52 KB | None | 0 0
  1. // cppCLinStackCLR.cpp: главный файл проекта.
  2. using namespace System;
  3.  
  4. ref class List
  5. {
  6.     static int MaxId;
  7.     String^ StackId;
  8.     static int MaxSize;
  9.     int nextIndex;
  10.     array<Single^>^ L;
  11.  
  12. public: List(int mSize)
  13. {
  14.     MaxSize = mSize;
  15.     L = gcnew array<Single^>(MaxSize);
  16.     MaxId++;
  17.     StackId = ::Convert::ToString(MaxId);
  18.     nextIndex = 0;
  19.     Console::WriteLine("Создан список " + StackId + ".");
  20. };
  21.       void addLastElement(Single^ c)
  22.       {
  23.           if (nextIndex < MaxSize)
  24.               L[nextIndex++] = c;
  25.           else Console::WriteLine("Список переполнен!");
  26.       }
  27.       Single^ getElementByIndex(int index)
  28.       {
  29.           if (index < nextIndex)
  30.           {
  31.               return L[index];
  32.           }
  33.           else
  34.           {
  35.               Console::WriteLine("Нет элемента с таким индексом!");
  36.               return (Single)0;
  37.           }
  38.       }
  39.       void deleteElementByValue(Single value)
  40.       {
  41.           for (int i = 0; i < nextIndex; i++)
  42.           {
  43.               if (L[i]->Equals(value))
  44.               {
  45.                   deleteElementByIndex(i);
  46.                   return;
  47.               }
  48.           }
  49.           Console::WriteLine("Нет элемента с таким значением!");
  50.           return;
  51.       }
  52.       Single^ deleteElementByIndex(int index)
  53.       {
  54.           if (index < nextIndex)
  55.           {
  56.               Single^ deletedElement = L[index];
  57.               if (index < nextIndex - 1)
  58.               {
  59.                   for (int i = index; i < nextIndex - 1; i++)
  60.                   {
  61.                       L[i] = L[i + 1];
  62.                   }
  63.               }
  64.               nextIndex--;
  65.               Console::WriteLine("Удалён элемент " + index + " = " + deletedElement +".");
  66.               return deletedElement;
  67.           }
  68.           else
  69.           {
  70.               Console::WriteLine("Нет элемента с таким индексом!");
  71.               return (Single)0;
  72.           }
  73.       }
  74.       void printList()
  75.       {
  76.           if (nextIndex == 0)
  77.           {
  78.               Console::WriteLine("Список пуст!");
  79.           }
  80.           for (int i = 0; i < nextIndex; i++)
  81.           {
  82.               Console::WriteLine("Элемент " + i + " = " + L[i]);
  83.           }
  84.       }
  85. };
  86.  
  87. bool enterInt(int% value)
  88. {
  89.     try
  90.     {
  91.         int tmp = Convert::ToInt32(Console::ReadLine());
  92.         value = tmp;
  93.         return true;
  94.     }
  95.     catch (FormatException^)
  96.     {
  97.         Console::WriteLine("Неверный формат ввода. Значение должно быть целым положительным числом.");
  98.         return false;
  99.     }
  100.     catch (OverflowException^)
  101.     {
  102.         Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате целого числа.");
  103.         return false;
  104.     }
  105. }
  106.  
  107. bool enterSingle(Single% value)
  108. {
  109.     try
  110.     {
  111.         Single tmp = Convert::ToSingle(Console::ReadLine());
  112.         value = tmp;
  113.         return true;
  114.     }
  115.     catch (FormatException^)
  116.     {
  117.         Console::WriteLine("Неверный формат ввода. Введите число с плавающей запятой в формате целая_часть,дробная_часть .");
  118.         return false;
  119.     }
  120.     catch (OverflowException^)
  121.     {
  122.         Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате числа с одиночной точностью с плавающей запятой.");
  123.         return false;
  124.     }
  125. }
  126.  
  127. int main(array<String^>^ args)
  128. {
  129.     Single^ f;
  130.     List^ vs; //1
  131.     while (true)
  132.     {
  133.         Console::WriteLine("Создать список? (да - создать, любой другой ввод - выход из программы)");
  134.         if (Console::ReadLine() == "да")
  135.         {
  136.             Console::WriteLine("Какой длины?");
  137.             int mSize;
  138.             Console::Write("Длина: ");
  139.             if (!enterInt(mSize))
  140.             {
  141.                 continue;
  142.             }
  143.             vs = gcnew List(mSize); //1
  144.             break;
  145.         }
  146.         else return 0;
  147.     }
  148.  
  149.     String^ s;
  150.     do
  151.     {
  152.         Console::WriteLine("Что сделать? (распечатать список / добавить элемент в конец / получить элемент по индексу / удалить элемент по значению / удалить элемент по индексу)");
  153.         Console::Write("Действие: ");
  154.         s = Console::ReadLine();
  155.         if (s == "добавить элемент в конец")
  156.         {
  157.             Single value;
  158.             Console::Write("Значение: ");
  159.             if (!enterSingle(value))
  160.             {
  161.                 continue;
  162.             }
  163.             vs->addLastElement(value);
  164.             Console::WriteLine("Число добавлено в конец списка.");
  165.         }
  166.         else if (s == "получить элемент по индексу")
  167.         {
  168.             int index;
  169.             Console::Write("Индекс: ");
  170.             if (!enterInt(index))
  171.             {
  172.                 continue;
  173.             }
  174.             Console::WriteLine("Элемент " + index + " = " + vs->getElementByIndex(index) + ".");
  175.         }
  176.         else if (s == "удалить элемент по значению")
  177.         {
  178.             Single value;
  179.             Console::Write("Значение: ");
  180.             if (!enterSingle(value))
  181.             {
  182.                 continue;
  183.             }
  184.             vs->deleteElementByValue(value);
  185.         }
  186.         else if (s == "удалить элемент по индексу")
  187.         {
  188.             int index;
  189.             Console::Write("Индекс: ");
  190.             if (!enterInt(index))
  191.             {
  192.                 continue;
  193.             }
  194.             vs->deleteElementByIndex(index);
  195.         }
  196.         else if (s == "распечатать список")
  197.         {
  198.             vs->printList();
  199.         }
  200.         else
  201.         {
  202.             Console::WriteLine("Неверный формат ввода. Доступны команды: распечатать список, добавить элемент в конец, получить элемент по индексу, удалить элемент по значению, удалить элемент по индексу");
  203.         }
  204.     } while (s != "");
  205. }
  206.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement