Siemanko, mam problem. Głowię się z tym już dłuższą chwilkę. Chcę napisać algorytm, który po wprowadzeniu jakiegoś działania matematycznego, składającego się jedynie ze znaków +, /, -, *, i nawiasów (, ), policzy mi wynik tego działania. Oczywiście może to być działanie wieloczłonowe, mam na myśli, że z użyciem kilku liczb, a nie jedynie jednego operatora i dwóch liczb - bo takie coś jest za proste. Na chwilę obecną stoję w miejscu, gdzie po zaczytaniu działania, przepisuje mi je do tablicy. Jedynie problem jest taki, że mój algorytm odpowiadający za łączenie sąsiednich cyfr w liczbę nie chce działać, zasymulujmy co mam na myśli:
tab = { 2, 0, 4, +, 5, 3, *, 2};
powiedzmy, że to jest nasze działanie matematyczne po przerzuceniu do tablicy i teraz chcę sprawić, aby wszystkie sąsiednie cyfry znajdowały się pod jednym indeksem, aby później było łatwiej je parsować do integera i liczyć, czyli:
tab = { 204, +, 53, *, 2};
ma ktoś jakiś pomysł? wkleję tu swój algorytm, który niestety działa tylko dla jednego indeksu, nie wiem czy może jest tu problem z pętlą czy z czym innym.
for( int j = 0; j < expression.length(); j++ ) {
if( exp_tab[ j ] != "/" || "+" || "-" || "*" || ")" || "(" ) {
if( exp_tab[ j + 1 ] != "/" || "+" || "-" || "*" || ")" || "(" ) {
exp_tab[ j ] += exp_tab[ j + 1 ];
exp_tab[ j + 1 ] = "";
}
}
}
exp_tab[i] = tablica typu string, w której przechowuje zmienne po przerzuceniu ze stringa,
expression = zmienna typu string, input naszego działania. Użyłem tam expression.length() aby prościej było sprawdzić wielkość tablicy.
A tu jest cały kod mojego programu, na końcu jest pętla wypisująca wszystkie dane z tablicy, rozdzielając je spacją by sprawdzić, czy się połączyły.
#include "pch.h"
#include <iostream>
#include <string>
int main()
{
std::string expression = "", exp_var = "", exp_tab[ 64 ];
std::cout << "expression: ";
std::cin >> expression;
for( int i = 0; i < expression.length(); i++ ) {
exp_tab[ i ] = expression[ i ];
}
for( int j = 0; j < expression.length(); j++ ) {
if( exp_tab[ j ] != "/" || "+" || "-" || "*" || ")" || "(" ) {
if( exp_tab[ j + 1 ] != "/" || "+" || "-" || "*" || ")" || "(" ) {
exp_tab[ j ] += exp_tab[ j + 1 ];
exp_tab[ j + 1 ] = "";
}
}
}
for( int k = 0; k < expression.length(); k++ ) {
std::cout << exp_tab[ k ] << " ";
}
}