Mateusz Mazurek – programista z pasją

Czyli o użyciu Pythona i kilku innych technologii do tworzenia świetnej jakości aplikacji w oparciu o stabilny proces dostarczania oprogramowania.

Programowanie

Prosty parser wyrażeń matematycznych

Cześć, chciałem dziś pokazać bardzo prosty parser wyrażeń matematycznych.

Rozpatrujemy tylko przypadki dodawania cyfr.
Czyli nasz program może liczyć tylko np:

1+2+4+2+1+3+5+9+9+3+3

Na początek musimy sprawdzić czy to co wpisał użytkownik jest poprawnym wyrażeniem.
Zrobimy to za pomocą wyrażeń regularnych.

1
([0-9] *\\+{1} *)([0-9]{1} *\\+{1} *)*[0-9]{1} *

Zakładamy w nim że poprawny ciąg będzie składał się z (od lewej):

1. Jednej cyfry, dowolnej ilości spacji i jednego znaku plus.
2. Następnie może być dowolna ilość wyrażeń:
Cyfra, dowolna ilość spacji, jeden znak plus.
3. I kończące to rzecz jasna cyfra + dowolna ilość spacji.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public static void main(String[] args) throws IOException {
       
        Scanner sc = new Scanner(System.in);
        System.out.println("Wpisz wyrazenie: ");
        while(sc.hasNextLine())
        {
            String line = sc.nextLine();
            if(line.matches("([0-9] *\\+{1} *)([0-9]{1} *\\+{1} *)*[0-9]{1} *"))
            {
                line = line.replaceAll(" " , "");
                String digits[] = line.split("\\+");
                int wynik =0;
                for(String w: digits)
                    wynik+=Integer.parseInt(w);
                System.out.println("Wynik: "+wynik);
            }
            else
            {
                System.out.println("Niepoprawna skladnia.");
                continue;
            }
        }
       
    }

Korzystając z tego wyrażenia regularnego tworzymy program widoczny powyżej. Klasa Scanner pobiera od użytkownika wyrażenie, sprawdzamy czy jest ono poprawne, jeśli tak to usuwamy spacje i dzielimy wyrażenie, ustawiając jako delimeter znak „+”. W wyniku tego mamy tablicę liczb z których składa się wyrażenie. W pętli je dodajemy.

Proste strasznie :)

PS. Czy umiałbyś rozszerzyć program tak żeby dodawał liczby a nie tylko cyfry? Podpowiem że wszystko do tego jest napisane, tylko musisz zmienić wyrażenie regularne tak, żeby było dostosowane do powyższego, nowego założenia.

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments