Advertisement
CherMi

List for float C++ CLI with inverse

Nov 14th, 2020
821
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.20 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.       void inverse()
  86.       {
  87.           if (nextIndex == 0)
  88.           {
  89.               Console::WriteLine("Список пуст!");
  90.               return;
  91.           }
  92.           if (nextIndex == 1)
  93.           {
  94.               Console::WriteLine("Список состоит из одного элемента!");
  95.               return;
  96.           }
  97.           Single^ tmp;
  98.           for (int i = 0; i < Math::Floor(nextIndex / 2); i++)
  99.           {
  100.               tmp = L[i];
  101.               L[i] = L[nextIndex - 1 - i];
  102.               L[nextIndex - 1 - i] = tmp;
  103.           }
  104.           Console::WriteLine("Список инверсирован!");
  105.       }
  106. };
  107.  
  108. bool enterInt(int% value)
  109. {
  110.     try
  111.     {
  112.         int tmp = Convert::ToInt32(Console::ReadLine());
  113.         value = tmp;
  114.         return true;
  115.     }
  116.     catch (FormatException^)
  117.     {
  118.         Console::WriteLine("Неверный формат ввода. Значение должно быть целым положительным числом.");
  119.         return false;
  120.     }
  121.     catch (OverflowException^)
  122.     {
  123.         Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате целого числа.");
  124.         return false;
  125.     }
  126. }
  127.  
  128. bool enterSingle(Single% value)
  129. {
  130.     try
  131.     {
  132.         Single tmp = Convert::ToSingle(Console::ReadLine());
  133.         value = tmp;
  134.         return true;
  135.     }
  136.     catch (FormatException^)
  137.     {
  138.         Console::WriteLine("Неверный формат ввода. Введите число с плавающей запятой в формате целая_часть,дробная_часть .");
  139.         return false;
  140.     }
  141.     catch (OverflowException^)
  142.     {
  143.         Console::WriteLine("Неверный формат ввода. Введённое число невозможно представить в формате числа с одиночной точностью с плавающей запятой.");
  144.         return false;
  145.     }
  146. }
  147.  
  148. int main(array<String^>^ args)
  149. {
  150.     Single^ f;
  151.     List^ vs; //1
  152.     while (true)
  153.     {
  154.         Console::WriteLine("Создать список? (да - создать, любой другой ввод - выход из программы)");
  155.         if (Console::ReadLine() == "да")
  156.         {
  157.             Console::WriteLine("Какой длины?");
  158.             int mSize;
  159.             Console::Write("Длина: ");
  160.             if (!enterInt(mSize))
  161.             {
  162.                 continue;
  163.             }
  164.             vs = gcnew List(mSize); //1
  165.             break;
  166.         }
  167.         else return 0;
  168.     }
  169.  
  170.     String^ s;
  171.     do
  172.     {
  173.         Console::WriteLine("Что сделать? (распечатать список / добавить элемент в конец / получить элемент по индексу / удалить элемент по значению / удалить элемент по индексу / инверсировать список)");
  174.         Console::Write("Действие: ");
  175.         s = Console::ReadLine();
  176.         if (s == "добавить элемент в конец")
  177.         {
  178.             Single value;
  179.             Console::Write("Значение: ");
  180.             if (!enterSingle(value))
  181.             {
  182.                 continue;
  183.             }
  184.             vs->addLastElement(value);
  185.             Console::WriteLine("Число добавлено в конец списка.");
  186.         }
  187.         else if (s == "получить элемент по индексу")
  188.         {
  189.             int index;
  190.             Console::Write("Индекс: ");
  191.             if (!enterInt(index))
  192.             {
  193.                 continue;
  194.             }
  195.             Console::WriteLine("Элемент " + index + " = " + vs->getElementByIndex(index) + ".");
  196.         }
  197.         else if (s == "удалить элемент по значению")
  198.         {
  199.             Single value;
  200.             Console::Write("Значение: ");
  201.             if (!enterSingle(value))
  202.             {
  203.                 continue;
  204.             }
  205.             vs->deleteElementByValue(value);
  206.         }
  207.         else if (s == "удалить элемент по индексу")
  208.         {
  209.             int index;
  210.             Console::Write("Индекс: ");
  211.             if (!enterInt(index))
  212.             {
  213.                 continue;
  214.             }
  215.             vs->deleteElementByIndex(index);
  216.         }
  217.         else if (s == "распечатать список")
  218.         {
  219.             vs->printList();
  220.         }
  221.         else if (s == "инверсировать список")
  222.         {
  223.             vs->inverse();
  224.         }
  225.         else
  226.         {
  227.             Console::WriteLine("Неверный формат ввода. Доступны команды: распечатать список, добавить элемент в конец, получить элемент по индексу, удалить элемент по значению, удалить элемент по индексу, инверсировать список");
  228.         }
  229.     } while (s != "");
  230. }
  231.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement