Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

ONP dla dowolnych liczb naturalnych


Rekomendowane odpowiedzi

Opublikowano

Cześć wszystkim! Napisałem program na ONP, jednak działa on tylko na cyfach 0-9, nie mam pojęcia jak się zabrać za to, aby działały wszystkie liczby naturalne oraz abym mógł oddzielać każdy znak i liczbę spacją, a program się nie wysypywał. Poniżej kod:

 #include <iostream>
using namespace std;
 
struct element
{
 int wartosc;
 element *poprzedni;
};
 
element *dodaj (int liczba, element *wierzcholek)
{
    element *wsk;
    wsk = new element;
    if (!wsk) 
        return 0;
    wsk->wartosc=liczba;
    wsk->poprzedni=wierzcholek;
    return wsk;
}
 
element *usun (int *liczba, element *wierzcholek)
{
    if (!wierzcholek) 
        return 0;
    element *wsk;
    *liczba=wierzcholek->wartosc;
    wsk=wierzcholek->poprzedni;
    delete wierzcholek;
    return wsk;
}
 
void wypisz (element *wsk)
{
    cout<<"aktualny stos: ";
        while (wsk!=NULL)
            {
                cout<<wsk->wartosc<<"\t";
                wsk=wsk->poprzedni;
            }
    cout<<endl;
}
 
main()
{
    element *wierzcholek;
    string s;
    int x,y,k,w;
    cout<<"Podaj wyrazenie ONP";
    wierzcholek=NULL;
    getline(cin,s);
    int n=s.size();
    wypisz(wierzcholek);
    for (int i=0;i<n;i++)
        {
            if(isdigit(s[i])) 
                {
                wierzcholek=dodaj(s[i]-48,wierzcholek);
                wypisz(wierzcholek);
                }
            else
                {
                    wierzcholek=usun(&k,wierzcholek);
                    x=k;
                    wierzcholek=usun(&k,wierzcholek);
                    y=k;
                    wypisz (wierzcholek);
                    switch (s[i])
                        {
                            case '+':w=y+x; break;
                            case '-':w=y-x; break;
                            case '*':w=y*x; break;
                            case '/':w=y/x; break;
                        }
                wierzcholek=dodaj(w,wierzcholek);
                wypisz(wierzcholek);
                }
        }    
    return 0;
}

Wiem, że błąd tkwi w tym, aczkolwiek nie wiem co z tym zrobić

if(isdigit(s[i])) 
                {
                wierzcholek=dodaj(s[i]-48,wierzcholek);
                wypisz(wierzcholek);
                }

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...