Kolejkowanie typu stos LIFO

Odpowiedz Nowy wątek
2018-11-08 13:04
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 ?

Pozostało 580 znaków

2018-11-08 13:12
0

1) masz juz lifo w C# nazywa sie stack
https://docs.microsoft.com/en[...]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

6) length nie lenght

edytowany 1x, ostatnio: fasadin, 2018-11-08 13:13

Pozostało 580 znaków

2018-11-08 13:33
0

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

Pozostało 580 znaków

2018-11-08 16:12
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ć?

Pozostało 580 znaków

2018-11-08 16:24
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; 
}

Pozostało 580 znaków

2018-11-08 19:34
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.

Pozostało 580 znaków

2018-11-09 01:53
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);

    }
}

}

edytowany 1x, ostatnio: Mariusz Liszewski, 2018-11-09 01:55

Pozostało 580 znaków

2018-11-09 07:42
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.

  1. Nie masz takiej metody length();

Lubię miodek :)

Pozostało 580 znaków

2018-11-09 08:41
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ć
edytowany 2x, ostatnio: .Adam, 2018-11-09 08:49

Pozostało 580 znaków

2018-11-09 09:55
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);

        }

Pozostało 580 znaków

2018-11-09 11:44
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ć.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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