» »

Poenostavljanje algebričnega izraza

Poenostavljanje algebričnega izraza

Arto ::

Lep pozdrav!
Dobil sem neko nalogo, del katere je poenostavljanje enostavnih algebričnih izrazov. Izrazi so zapisani v obliki stringov.

Primer:
2*x+3*y-4*x-y
vrne:
-2*x+2*y

Jaz sem brez idej, kako se zadeve lotiti, čeprav se mi naloga ne zdi pretežka :P

Fino bi bilo, če mi lahko kakšen pristop samo opišete, saj bi kodo rad napisal sam.

Hvala, Arto
  • spremenil: Arto ()

salesky ::

Ali so izrazi vedno take oblike, da imaš samo x,y? Drugače pač to lahko narediš tako da:

prebereš prvi znak...če je "-" prebereš še naslednjo črko, če je ta številka preveriš če je naslednja tudi črka ali je že "*". Če je "*" si zapomneš naslednjo spremenljivko, da veš kam spada tista številka ki si si jo prej zapomnil in tako naprej za ostale.

Na koncu veš da imaš recimo v tvojem primeru(pazit moraš tudi če ni številke pred znakom, to pomeni da je 1):
2x
3y
-4x
-y

Tako potem na easy sešteješ ujemajoče številke in kar ostane izpišeš in dodaš potrebno spremenljivko.

Upam da si razumel :)) Mogoče malo nerazumno ampak nekaj je. ;)

Arto ::

Izrazi lahko vsebujejo kakršnekoli spremenljivke (tudi naprimer 4*z, ali 5*alfa). V bistvu je naloga primerjanje enakovrednosti izrazov. Se pravi, 3*x je ekvivalentno 2*x + x. Razmišljal sem, da bi bilo najenostavneje dva izraza najprej poenostaviti in nato primerjati stringe. Aha, potem nastopi še problem vrstnega reda členov.. no bom za začetek poizkusil samo poenostaviti člene :P

Ima še kdo kakšno idejo kako bi stvar izpeljal z regular expression-i, ker se mi zdi, da bi se jih dalo fino ponucat, samo ne vem kako, ker sem še začetnik v teh vodah in mi še fali programerski način razmišljanja :)

Senitel ::

Kako bi pa to peš naredil? :P Za vsako spremenljivko rabiš vedet kakšen faktor imaš spredej to je pa to. Narediš si en seznam v katerem hraniš spremenljivko in ta faktor, potem pa parsaš izraz. Če najdeš novo spremenljivko dodaš v seznam, če dobiš obstoječo spremenljivko spremeniš faktor. Potem moraš še samo pazit na konstantne člene in faktor 0 in to je to...

Arto ::

Ok, če prav razumem bi lahko nekako takole:
Ustvarim 2d tabelo
Grem prvič čez, zapišem vse spremenljivke v eno vrstico(upam da že obstaja kakšna isAlphaNumerc funkcija v javi), en plac pa še za tiste brez spremenljivke (konstante pač).
Grem drugič čez, zapišem in hkrati lahko tud že kar poračunam faktorje in jih dam v drugo vrstico, pod ustrezne spremenljivke.
Nekako jih zložim po vrstnem redu (mogoče po abecedi), da lahko potem stringa primerjam (string.equals(string2))

A bo nekako tako? :)

Loki ::

kaj pa, ce bi najprej izraze razbil na najbolj enostavne (sestevanje) in potem zmetal skupaj? vsaj ce bos imel primere tipa 3x=2x+x.
I left my wallet in El Segundo

Senitel ::

Ne rabiš 2D tabele, ne rabiš 2x se sprehajat... Rabiš povezan seznam/dinamičen 1D array. Vsak element ima dva podatka, spremenljivko in faktor. Come on... Kako bi pa to na pri matematiki na papirju naredil?

Arto ::

Ok trenutno sem prišel do tegale (vem da je najbrž zelo neoptimalno, ampak programirati sem začel šele zdaj na faksu):

izraz npr. -2*x+3*x*y-2*y+x-3y*x+x razdeli na tabelo razredov, k vsebujejo cifro in črke:
členi: {[-2,x],[3,xy],[-3,xy],[1,x]}

Sicer se mi malo sanja, kako naprej, ampak bi bil hvaležen, če bi mi kdo malce zbistril sliko :)

Zgodovina sprememb…

  • spremenil: Arto ()

WarpedGone ::

Večino dela si že naredu.

Zdej sam še sešteješ koeficiente pri vseh enakih drugih členih v razredih.
Se pravi vse x-e skup, vse xy-e skup. Kar dobiš je rezultat.

Maš lahko v izrazu tut oklepaje?
Zbogom in hvala za vse ribe

Arto ::

Ne, oklepajev ni.
Sem končal. Je blo še kar dost dela, čeprav pomoje zato, ker ne znam in je vse ful neoptimalno. Ampak dela, to je važno :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Matematika

Oddelek: Šola
313405 (2185) Math Freak
»

razstaviti izraz

Oddelek: Šola
352827 (2447) Math Freak
»

Matematika - pomoč (strani: 1 2 3 )

Oddelek: Šola
10426748 (23323) daisy22
»

dvojni integral, pomoc

Oddelek: Loža
71638 (1400) Ktj
»

Ena matematicna

Oddelek: Šola
121716 (1550) rasta

Več podobnih tem