Kolejkowanie typu stos LIFO

0

Witam czy ktoś byłby w stanie pomóc mi w następującym problemie ? Otóż próbuję stworzyć kolejkowanie Lifo programując obiektowo. Chcę aby każda z klas miała interface z kodu ASiD oraz otwierała się w jednym menu. Jakieś sugestie co zmienić żeby to zadziałało ?

0
  1. masz juz lifo w C# nazywa sie stack
    https://docs.microsoft.com/en-us/dotnet/api/system.collections.stack?view=netframework-4.7.2
  2. interfejs posiada kod? chyba nie rozumiesz idei interfejsow (do czepialskich, tak wiem ze c# 8.0 bedzie mozliwosc dodawania implementacji w interfejsach, ale to nie znaczy ze mozna uzywac tego wszedzie)
  3. wrzuc kod tutaj a nie w plikach. Jezeli nie tutaj to na github.
  4. chyba nie rozumiesz co oznacza programowanie obiektowe. Po co klasa Show? show ma byc metoda kolejki lifo a nie osobna klasa.
  5. zacznij od nowa ale z
  • napisz klase z przyjmujacym jeden typ danych (niech to bedzie int[])
  • napisz metody operujace na tym obiekcie: show, push. pop,
  • nastepnie zamien typ danych z int[] na generyczny typ T
  1. length nie lenght
0

Faktycznie trochę namieszałem. Spróbuję wprowadzić zmiany.

0

W jaki sposób miał bym zrobić kilka oddzielnych klas a później je połączyć? Mógłby ktoś to w miarę prosto wyjaśnić?

1

Jesli masz klasy A, B, C i chcesz miec mozliwosc przechowywania np obiketu klasy C w klasie A to po prostu do klasy A dodajesz pole typu klasy C w stylu

public class A {
public C nazwazmiennej; 
}
0

Najproście w VS do projektu w Solution Explorer klikasz PPM na projekcie (nie solucji), Add po rozwinięciu na samym dole będziesz miał Class lub New item i znajdź Class. Nic więcej nie musisz robić. Klasa będzie osobnym plikiem w Solution Explorer.

0

Co tutaj jeszcze powinienem zmienić żeby zadziałało

namespace ConsoleApp10
{
class Stos
{

    int[] dane = new int[6];
    int rozmiar = 0;


    void Pop()
    {
        if (rozmiar => 1)
        {
            Console.WriteLine("Nastąpi usuinięcie Elementu:" + dane[rozmiar]);
            rozmiar = rozmiar - 1;

        }
        else
        {
            Console.WriteLine("Stos Jest pusty");

        }

    }



    void push()
    {

        if (rozmiar <= 5)
        {
            Console.WriteLine("stos jest pełen");
        }
        else
        {
            Console.WriteLine("Jaką liczbę położyć na stosie");
            rozmiar = rozmiar + 1;
            dane = int.Parse(Console.ReadLine());
        }


    }


    void show()
    {
        for (int i = rozmiar; i > 1; i--)
        {
            Console.WriteLine(dane[i]);


        }
        if (rozmiar == 0) Console.WriteLine("stos pusty");



    }

    void Size()
    {
        Console.WriteLine("liczba elementów stosu to:" + rozmiar);
    }


    static void Main(string[] args)
    {
        
        int wybor;

        do
        {
            Console.WriteLine("Menu głowne");
            Console.WriteLine("1:Push");
            Console.WriteLine("2:Pop");
            Console.WriteLine("3:Show");
            Console.WriteLine("4:Length");
            Console.WriteLine("5:koniec");
            wybor = int.Parse(Console.ReadLine());

            switch (wybor)
            {
                case 1:
                  push() ;
                    break;

                case 2:
                   pop() ;
                    break;

                case 3:
                    show();
                    break;

                case 4:
                   length() ;
                    break;
            }
        }
        while (wybor != 5);



       

    }
}

}

1

1.Nie możesz się odwoływać do metod w taki sposób Push(), Pop() itd.
Musisz utworzyć sobie obiekt klasy

Stos stos = new Stos(); 
stos.Push();

2.Nie możesz sobie przypisać wartości do tablicy w taki sposób

dane = int.Parse(Console.ReadLine());

Możesz przypisać np tak

dane[0] = int.Parse(Console.ReadLine());

3.Staraj się używać

int.TryParse(Console.ReadLine(), out wybor);

bo jeżeli użytkownik wprowadzi sobie jakąś literkę to program Ci się wysypie.
4. Nie masz takiej metody length();

0
  • rozdzielić ekrany od logiki, stwórz osobną klasę dla LIFO,
  • błędy merytoryczne w kodzie,
  • wielkie litery i nazwy mają znaczenie,
  • pętla nie powinna działać dla innych wartości niż obsługiwane przez program,
  • co z rzutowaniem tekstu podanego z ekranu, nie jest to zabezpieczone w żaden sposób,
  • wielkość stosu nie powinna być ograniczona do sztywnej wartości, w konstruktorze możesz ją inicjować,
  • zmienne klasowe ukryć
0

mógłby mi ktoś objaśnić w jaki sposób zrobić odwołanie jednej klasy do drugiej? Naprawdę się staram ale nie mogę tego ogarnąć ...

public class LIFO
{

int[] dane = new int[6];
int rozmiar;

    public void POP()
  
    {
        if (rozmiar >= 1)
        {
            Console.WriteLine("Nastąpi usuinięcie Elementu:" + dane[rozmiar]);
            rozmiar = rozmiar - 1;

        }
        else
        {
            Console.WriteLine("Stos Jest pusty");

        }

    }



    public void PUSH()
    {

        if (rozmiar <= 5)
        {
            Console.WriteLine("stos jest pełen");
        }
        else
        {
            Console.WriteLine("Jaką liczbę położyć na stosie");
            rozmiar = rozmiar + 1;
                dane[0] = int.Parse(Console.ReadLine());
        }


    }


    public void Show()
    {
        for (int i = rozmiar; i > 1; i--)
        {
            Console.WriteLine(dane[i]);


        }
        if (rozmiar == 0) Console.WriteLine("stos pusty");


    }

    public void Size()
    {
        Console.WriteLine("liczba elementów stosu to:" + rozmiar);
    }

public class Menu
    {

        






        private void Main(string[] args)
        {

            int wybor;

            do
            {
                Console.WriteLine("Menu głowne");
                Console.WriteLine("1:Push");
                Console.WriteLine("2:Pop");
                Console.WriteLine("3:Show");
                Console.WriteLine("4:Length");
                Console.WriteLine("5:koniec");
                wybor = int.Parse(Console.ReadLine());

                switch (wybor)
                {
                    case 1:
                        Show ();
                        break;

                    case 2:
                        PUSH();
                        break;

                    case 3:
                        Show();
                        break;

                    case 4:
                        Size();
                        break;
                }
            }
            while (wybor != 5);



        }
0

Może najpierw utrzórz obiekt klasy LIFO ??

var lifo = new LIFO();

////..
switch (wybor)
                {
                    case 1:
                        lifo.Show ();
                        break;
                }
////...

I napisz konstruktor do klasy LIFO, przyjmujący za parametr rozmiar. Wtedy możesz tworzyć obiekt tak:

var LIFO = new LIFO(10)  //utrzórz 10'cio elementową kolejkę

Następnie napisz od początku metody Push() i Pop(), bo nie robią one tego co mają robić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1