• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator, pliki .txt, ONP, stos i kolejka - reprezentacja na tablicach PROBLEM

Object Storage Arubacloud
0 głosów
460 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez Cinas Nowicjusz (160 p.)
edycja 5 stycznia 2016 przez Cinas

Witam, mam problem z zadaniem. Odbiega ono od tego co robiliśmy na zajęciach, także z góry przepraszam za amatorszczyznę, ale do rzeczy. Ma to być kalkulator liczący równania zapisane linijkami w pliku tekstowym. Najpierw wczytaną linię chcę przetransformować do ONP. Niestety wszystkie materiały tego typu znalezione w sieci robione są na "<vector>'ach" jest mi to zupełnie obce i nie wiem jak w to włożyć palce. Dlatego reprezentację stosu i kolejki mam zamiar zrobić na tablicach. Póki co udało mi się stworzyć coś takiego (co oczywiście nie działa, inaczej by mnie tu nie było :)). 

Algorytm tworzyłem na podstawie przykładu z wikipedii w podrozdziale: "Algorytm konwersji z notacji infiksowej do ONP"

Nie czekam na gotowe rozwiązanie, proszę o pomoc w nakierowaniu na poprawne napisanie algorytmu ilczącego.

Poniżej kod mojej nieudolnej transformacji na ONP.

http://pastebin.pl/view/1bae2915

#include <iostream>
#include <fstream>
#include <conio.h>
#include <algorithm>
#include <string>

(...)
  
    string napis; // pobrana linia (równanie) z tekstu
    // STOS - reprezentacja zmiennych
    string stos;
    int rozmiar=0;

    // KOLEJKA - reprezentacja zmiennych
    string kolejka;
    int ile=0;
    int glowa=0;
    int ostatni_wolny=0;

(...)

        int dlugosc=napis.length();
        


            for(int i=1 ; i<(dlugosc-1); i++) 
// pierwszy i ostatni znak linii jest zarezerwowany w wymaganiach jako oznaczenie lini 
            {
                if ((napis[i]>= '0' && napis[i]<= '9')) 
// sprawdzamy czy pierwszy element jest liczba
                {
                    napis[i]=kolejka[ostatni_wolny];
                    ostatni_wolny+=1;
                    ile+=1;
                    if (!(napis[i+1]>= '0' && napis[i+1]<= '9')) 
// sprawdzamy czy kolejny element nie jest liczba i dodajemy spacje w celu rozdzielenia liczb
                    {
                        kolejka += " ";
                        ile++;
                    }
                }
                else if ((napis[i]=='*') || (napis[i]=='^') || (napis[i]=='/') || (napis[i]=='-') || (napis[i]=='+') || (napis[i]=='('))
                {
                    rozmiar=rozmiar+1;
                    napis[i]=stos[rozmiar];
                    stos += " ";
                }
                else if(napis[i]==')')
                {
                    stos[rozmiar]=kolejka[ostatni_wolny];       
// dodanie do kolejki znaku zdjetego ze stosu
                    rozmiar=rozmiar-1;                          
// zdjęcie ze stosu ostatniego znaku
                    ostatni_wolny+=1;
                    ile+=1;
                    rozmiar=rozmiar-1;   // zdjęcie ze stosu "("
                }
                else cout << "err" << endl;
            }
            for (int j=0; j<=ile; j++)
            {
                cout << "stan kolejki: " << kolejka[j] <<endl;
            }
        }
        else cout << "w równaniu błędne znaki" << endl;
      

Pozdrawiam iksnimolS

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 469 wizyt
pytanie zadane 2 kwietnia 2020 w C i C++ przez SensejChmiel Nowicjusz (180 p.)
0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 21 marca 2023 w C i C++ przez bananen Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 425 wizyt
pytanie zadane 11 grudnia 2017 w C# przez garris Użytkownik (660 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...