Kolejkowanie typu stos LIFO

Kolejkowanie typu stos LIFO
Mariusz Liszewski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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 ?

fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
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
edytowany 1x, ostatnio: fasadin
Mariusz Liszewski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
0

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

Mariusz Liszewski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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ć?

Akihito
  • Rejestracja:ponad 8 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Śląsk
  • Postów:248
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

Kopiuj
public class A {
public C nazwazmiennej; 
}
GironX
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 2 lata
  • Postów:59
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.

Mariusz Liszewski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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
Kubuś Puchatek
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:235
1

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

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

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

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

Możesz przypisać np tak

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

3.Staraj się używać

Kopiuj
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();


Lubię miodek :)
AD
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:27
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
Mariusz Liszewski
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:27
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);
    }
Kopiuj

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);



        }
kzkzg
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 13 godzin
  • Postów:925
0

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

Kopiuj
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:

Kopiuj
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ć.


Keep calm and blame frontend.
Tell your cat I said pspsps.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)