Pokaż wyniki 1 do 3 z 3

Temat: Problem z stosem.

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    3

    Domyślnie Problem z stosem.

    Mam zadanie:
    Tytułami książek są liczby całkowite. Twoim zadaniem jest układanie książek na jednym stosie oraz zdejmowanie ich z niego. Zdejmujemy zawsze książkę leżącą na wierzchu stosu. Z pustego stosu nic nie zdejmujemy.

    Napisz program, który wczyta liczbę poleceń N (mniejszą niż 1000) oraz zbiór tych poleceń. W kolejnych N wierszach znajdują się polecenia wstawienia książki na stos lub zdjęcia pewnej liczby książek ze stosu. Są zatem dwa typy poleceń. Jedno składa się z litery W, znaku spacji oraz liczby naturalnej będącej nazwą książki. Drugie polecenie składa się z litery P oraz liczby nieujemnej oznaczającej liczbę książek jaką należy zdjąć ze stosu.

    Program powinien, dla każdego wystąpienia polecenia drugiego typu wypisać jeden wiersz. Wiersz ten powinien zawierać nazwy książek (liczby całkowite) rozdzielone znakiem spacji, wypisane w takiej kolejności w jakiej zostały zdjęte ze stosu. Ponieważ z pustego stosu nic nie można ściągnąć, więc w takiej sytuacji nic nie wypisujemy.


    Przykładowe dane:

    5
    W 1
    W 2
    P 1
    W 3
    P 2

    Wynik:
    2
    3 1

    Zacząłem pisać program, lecz nie wiem jak go dokończyć.. proszę o pomoc i z góry dzięki.

    #include <cstdio>
    #include <cstring>
    #include <iostream>

    using namespace std;
    int main()
    {
    int tab[1000], i, a;
    int tab2[1000];
    int polecenia, l=0;
    char kllubpob;
    int drugie;

    cin>>polecenia;

    for(i=0; i<polecenia; i++)
    {
    cin>>kllubpob;
    cin>>drugie;

    if(kllubpob=='W')
    {
    tab[i]=drugie;
    l++;


    }

    if(kllubpob=='P')
    {
    a=i-1;
    for(a=a; a>drugie; a--)
    {
    tab2[a]=tab[a];
    }

    }




    }

    return 0;
    }

  2. #2
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Sorry, że nie powiem, jak dokończyć Twój kod, ale chcę Ci ułatwić to zadanie i nauczyć Cię albo chociaż wprowadzić w stos.

    No więc w C++ istnieje gotowa struktura stosu. Znajduje się ona w bibliotece stack. Czyli na początku programu dodajesz:
    #include<stack>
    using namespace std;


    No i potem definiujesz stos:
    stack <int>nazwa;
    No więc: "stack" to typ zmiennej, czyli w tym przypadku stos (to jest na tej zasadzie, co: double x;); "<int>" jest to typ zmiennej przechowywanej na stosie. Czyli int (liczby całkowite) w Twoim przypadku. Można też np. stworzyć stos stringów:
    stack <string>stosik; . No i "nazwa", to nazwa stosu.

    Potem jest kilka funkcji, które zastępują operacje na tablicach. Wypiszę podstawowe:
    nazwa.top(); - zwraca najwyższą wartość stosu nie usuwając jej (NIE - NAJWIĘKSZĄ)
    nazwa.pop(); - wywala najwyższą wartość za stosu
    nazwa.size(); - rozmiar stosu
    nazwa.push(); - dodaje element na szczyt stosu

    No i piszesz:
    if(znak=='W')stos.push(x);
    else if(znak=='P'){cout<<stos.top();stos.pop();}

    To jest kawałek kodu - na przykładach najlepiej się uczy. Resztę dopisz, a jakbyś miałjakieś pytania - pisz.

    Powodzenia.

  3. #3
    Zarejestrowany
    Nov 2009
    Postów
    2

    Domyślnie

    hm, nie wiem czy korzystanie z stla jest mozliwe w ramach tego zadania . Chyba chodzi o wlasciwe zaimplkementowanie stosu, dokonczenie Twojego kodu:

    if(kllubpob=='P')
    {
    //tutaj musisz wypluc drugie razy ostatnie liczby ze stosu
    //po prostu iterujesz trablice w przeciwnym kierunku:
    for (int j=0;j<drugie; j++) {
    //za kazdym razem wyrzucacajac liczbe:
    if (i==0) {
    break;
    } else {
    cout << tab[i] << ' ';
    i--;
    }
    }
    //na koniec endl zgodnie z proponowanym wyjsciem:
    cout << endl;
    }

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52