Как откорректировать программу? Программа представляет собой стек, куда записываются вагоны. Вагон имеет тип и уникальный порядковый номер.
Есть функция Generate, которая рандомизирует тип вагона и номер его.
Но, после того как она выводит, я хочу что бы она показала эти номера в типе вагона 'A'. Но, оно его не запоминает.
Подскажите, что нужно сделать!
Заранее благодарен.using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
interface IStack {
Boolean Empty();
object Pop();
object Push(object elements);
object Peek();
void Generate(int qty);
void Display();
void DisplayAll();
}
class Carriage {
public int CarriageNumber {
get; protected set;
}
public string CarriageType {
get; protected set;
}
public Carriage(string type, int number) {
this.CarriageNumber = number;
this.CarriageType = type;
}
public override string ToString() {
return CarriageNumber.ToString() + "/" + CarriageType;
}
}
class Stack : IStack {
int StackSize;
int top;
object[] item;
public int StackSizeProperty {
get { return StackSize; }
set { StackSize = value; }
}
public Stack() {
StackSizeProperty = 11;
item = new object[StackSize];
top = 0;
}

public Stack(int capacity) {
StackSizeProperty = capacity;
item = new object[StackSizeProperty];
top = 0;
}
public bool Empty() {
if (top == 0) {
return true;
}
return false;
}
public void Generate(int qty) {
Random rnd = new Random();
string[] CarriageType = { "a", "b" };
for (int elements = qty; elements > 0; elements--) {
item[elements] = rnd.Next(1, 100);
int type = rnd.Next(CarriageType.Length);
Console.WriteLine("Item " + elements + ": " + item[elements] + "/" + CarriageType[type]);
}
}
public object Push(object elements) {
if (top == StackSize) {
Console.WriteLine("Stack is full.\n");
return "Stack is full.";
}
else {
item[++top] = elements;
Console.WriteLine("Item was been pushed.\n");
return "item was been pushed.";
}
}
public void Entering(string CarriageType, int CarriageNumber) {
Console.Write("\n\tEnter the type of train: ");
CarriageType = Console.ReadLine();
Console.Write("\tEnter the number of train: ");
CarriageNumber = int.Parse(Console.ReadLine());
}
public object Pop() {
if (Empty()) {
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else {
return item[top--];
}
}
public object Peek() {
if (Empty()) {
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else {
return item[top];
}
}
public void Display() {
for (int elements = top; elements > 0; elements--) {
Console.WriteLine("Item " + elements + ": " + item[elements]);
}
}
public void DisplayAll() {
Console.WriteLine("All items: ");
for (int elements = top; elements > 0; elements--) {
Console.WriteLine("\t" + item[elements]);
}
}
public void Exit() {
do{ } while (Console.ReadKey().Key != ConsoleKey.Escape);
}
public int Entering() {
Console.Write("\tEnter the number of train: ");
return int.Parse(Console.ReadLine());
}
}
class MainProgramStacks {
static void Main() {
Stack FullStack = new Stack();
Stack AtypeStack = new Stack();
Stack BtypeStack = new Stack();
int mm_choice = 0, type_choice = 0, peek_choice = 0,
rmv_choice = 0, display_choice = 0,
CarriageNumberA = 0, CarriageNumberB = 0;
while (true) {
Console.WriteLine("- -- --- - Menu - --- -- -");
Console.WriteLine("- 1 - Add an element -");
Console.WriteLine("- 2 - Peek top element -");
Console.WriteLine("- 3 - Remove top element -");
Console.WriteLine("- 4 - Display stacks -");
Console.WriteLine("- -- --- - -- - --- -- -");
mm_choice = int.Parse(Console.ReadLine());

switch (mm_choice) {
case 1:
Console.Clear();
while (type_choice != 4) {
Console.WriteLine("- 1 - Add an element to type A: ");
Console.WriteLine("- 2 - Add an element to type B: ");
Console.WriteLine("- 3 - Generate elements: ");
Console.WriteLine("- 4 - Exit ");
type_choice = int.Parse(Console.ReadLine());
switch (type_choice) {
case 1:
AtypeStack.Push(new Carriage("a", AtypeStack.Entering()));
break;
case 2:
BtypeStack.Push(new Carriage("b", AtypeStack.Entering()));
break;
case 3:
Console.Write("Enter number of trains: ");
int qty = int.Parse(Console.ReadLine());
AtypeStack.Generate(qty);
break;
}
}
break;
case 2:
Console.Clear();
while (peek_choice != 3) {
Console.WriteLine("- 1 - Peek top element of A type: ");
Console.WriteLine("- 2 - Peek top element of B type: ");
Console.WriteLine("- 3 - Exit ");
peek_choice = int.Parse(Console.ReadLine());
switch (peek_choice) {
case 1:
AtypeStack.Peek();
break;
case 2:
BtypeStack.Peek();
break;
}
}
break;
case 3:
Console.Clear();
while (rmv_choice != 3) {
Console.WriteLine("- 1 - Remove element from type A: ");
Console.WriteLine("- 2 - Remove element from type B: ");
Console.WriteLine("- 3 - Exit -");
rmv_choice = int.Parse(Console.ReadLine());
switch (rmv_choice) {
case 1:
AtypeStack.Pop();
break;
case 2:
BtypeStack.Pop();
break;
}
}
FullStack.Pop();
break;
case 4:
Console.Clear();
while (display_choice != 4) {
Console.WriteLine("- 1 - Display elements of type A: ");
Console.WriteLine("- 2 - Display elements of type B: ");
Console.WriteLine("- 3 - Display all elements: ");
Console.WriteLine("- 4 - Exit -");
display_choice = int.Parse(Console.ReadLine());

switch (display_choice) {
case 1:
AtypeStack.Display();
break;
case 2:
BtypeStack.Display();
break;
case 3:
AtypeStack.DisplayAll();
BtypeStack.DisplayAll();
break;
}
}
break;
}
}
}
}
Или как сделать, что бы генерация чисел записывалась в отдельном стеке, и потом этот стек отсортировать на AtypeStack и BtypeStack?

21 Авг 2019 в 07:00
138 +1
0
Ответы
1

Чтобы сохранить сгенерированные элементы в отдельном стеке и потом отсортировать их на AtypeStack и BtypeStack, вы можете внести следующие изменения в код:

Создайте новый стек для сохранения сгенерированных элементов:Stack GeneratedStack = new Stack();Внесите изменения в метод Generate, чтобы сохранять сгенерированные элементы в GeneratedStack:public void Generate(int qty) {
Random rnd = new Random();
string[] CarriageType = { "a", "b" };
for (int elements = qty; elements > 0; elements--) {
object[] newItem = { rnd.Next(1, 100), CarriageType[rnd.Next(CarriageType.Length)] };
GeneratedStack.Push(newItem);
Console.WriteLine("Item " + elements + ": " + newItem[0] + "/" + newItem[1]);
}
}Измените вариант добавления элемента в AtypeStack и BtypeStack:case 1:
Object generatedItemA = GeneratedStack.Pop();
AtypeStack.Push(new Carriage(generatedItemA[1].ToString(), (int)generatedItemA[0]));
break;
case 2:
Object generatedItemB = GeneratedStack.Pop();
BtypeStack.Push(new Carriage(generatedItemB[1].ToString(), (int)generatedItemB[0]));
break;

Это позволит сохранить сгенерированные элементы в отдельном стеке и добавить их в AtypeStack и BtypeStack в зависимости от типа.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 718 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир