Obliczanie wyrażeń z niewiadomą w ONP

0

Witam
piszę program, który ma obliczać wartość wyrażeń z jedną niewiadomą. Wszystko planuję zrobić przy pomocy ONP, ale od kilku dni myślę i nie mogę wymyślić jakiegoś fajnego sposobu na obliczanie takich wyrażeń.
Przykładowe wyrażenie: (4+5)*(1-x)=15
Nie mam pomysłu w jaki sposób liczyć takie wyrażenia.
Liczę na jakieś sugestie jak rozłożyć dane na stosach lub inaczej się za to zabrać ,aby wszystko jakoś się liczyło.

0

Nie wiem w jaki sposób ma mi to pomóc z ONP, ale dzięki :D

0

Co ma ONP do rozwiązywania równań z jedną niewiadomą w pierwszej potędze?

0

Z ONP łatwo się przechodzi do drzewa.
W drzewie łatwo się przenosi.

0

Dzięki za pomoc, cały dzień próbowałem napisać coś co działałoby jak takie drzewo. Na razie nic nie wychodzi. W życiu nie używałem drzewa. Może pokaże co wypociłem:
Plik wyznacz.h

 #include "zmienna.h"
#include <stdlib.h>

struct ArNODE
{
	ArNODE *left, *right;
	char op;
	double val;
};

struct stosT
{
	ArNODE node;
	stosT *next;
};

void initTr(stosT *head)
{
	head->next = NULL;
}

void push(stosT *stos, ArNODE node)
{
	stosT *nowy = (stosT*)malloc(sizeof(ArNODE));
	nowy->node = node;
	nowy->next = stos->next;
	stos->next = nowy;
}

ArNODE pop(stosT *l)
{
	if (l->next == NULL)
		return l->node;
	ArNODE elem = l->next->node;
	void* x = l->next;
	l->next = l->next->next;
	free(x);
	return elem;
}
ArNODE drzewo(char* onp, zmienna **tab);

I niedokończone drzewo:

 #include "Wyznacz.h"
#include <string.h>

ArNODE drzewo(char* onp, zmienna **tab)
{
	stosT stos;
	initTr(&stos);
	ArNODE *v;
	for (int i = 0; i < strlen(onp); i++)
	{
		v = new ArNODE;
		if (onp[i] == '+' || (onp[i] == '-' && onp[i + 1] == ' ') || onp[i] == '*' || onp[i] == '/')
			v->op = onp[i];
		else if ((onp[i] >= '0' && onp[i] <= '9') || (onp[i] == '-' && onp[i + 1] != ' '))
		{
			char* temp = (char*)malloc(100);
			int j = 0;
			while (onp[i]!=' ')
				temp[j++] = onp[i++];
			temp[j] = '\0';
			v->val = atof(temp);
			v->op = '0';
		}
		else if (onp[i] >= 'a' && onp[i] <= 'z')
		{
			char* temp = (char*)malloc(100);
			int j = 0;
			while (onp[i] != ' ')
				temp[j++] = onp[i++];
			temp[j] = '\0';
			v->val = find_var(tab, temp);
			v->op = '0';
		}
		push(&stos, v);
	}
	return pop(&stos);
}
0

Musisz korzystać z odwrotnej notacji polskiej?

0

Wolałbym, już mam to zrobione i nie za bardzo uśmiecha mi się pisanie wszystkiego od nowa + czytałem, że do drzewa ONP jest potrzebne. Chyba, że ma ktoś jakiś pomysł jak to zrobić tylko przy użyciu ONP i stosów, bo wiem, że się da tylko nie wiem jak :)

0

ONP nie jest wcale potrzebne do tworzenia drzewa - wręcz przeciwnie, tylko spowalnia cały proces...

1 użytkowników online, w tym zalogowanych: 0, gości: 1