Problem oko stringova

1

Problem oko stringova

offline
  • Pridružio: 13 Feb 2012
  • Poruke: 25
  • Gde živiš: Nis

Zadatak ide ovako:
Dat je string u vidu ispravno zadatog matematickog izraza sa promenljivom i znacima [+,-,*,/,(,)].Napisati funkciju koji racuna vrednost tog izraza.
Primer:
ulaz:12*z-1+(12-8*z) izlaz:31
z=5
Molim ljude pametnije od mene da mi pomognu oko ovog zadatka posto ja nemam nikakvu ideju.
Hvala unapred.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Jel znas engleski?
http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html
tu imas algoritam za parsiranje stringa...



offline
  • Pridružio: 13 Feb 2012
  • Poruke: 25
  • Gde živiš: Nis

To je meni OK ali ja ne znam da programiram u c i c++.Znam samo pascal a i to mi ne ide toliko dobro.
Ako moze mali hint ili program za zadatak u pascalu.Mnogo bi mi pomoglo.

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Predrag Djordjevic ::Znam samo pascal a i to mi ne ide toliko dobro.
Ovaj problem koji si postavio nije jednostavan... Izucavaj lakse probleme dok ne dodjes do ovoga. Prouci strukture podataka, stek, hip, trebace ti....

offline
  • Pridružio: 13 Feb 2012
  • Poruke: 25
  • Gde živiš: Nis

Meni je profesor rekao da ce ovo da bude na testu.
Ako ti kazes da je tesko onda necu ni da pokusavam da ga sam uradim.

offline
  • Pridružio: 04 Jul 2011
  • Poruke: 5424

U pascalu postoji funkcija val koja konvertuje vrednost stringa u neku varijablu, to je jedna od stvari koja ti je potrebna za ovaj zadatak. Ali to nije tako jednostavno, za takav zadatak ti treba više od jednog časa, i verujem da većinu stvari niste ni učili (vidim da si '96 godište)... Potrebno je i da ispoštuješ prvenstvo operacija i zagrade. Da li si siguran da imate baš takav zadatak?

offline
  • Pridružio: 13 Feb 2012
  • Poruke: 25
  • Gde živiš: Nis

Da.Prvo smo pisali funkcije za izracunavanje obicnih izraza a posle sa zagradama.
Ako hoces mogu da ti napisem kako te procedure izgledaju.

offline
  • Pridružio: 04 Jul 2011
  • Poruke: 5424

Ajde daj molim te napiši te procedure, baš me interesuje u kojoj se to školi radi. U kojoj si školi?

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Daj postavi te tvoje primere koje imas. Nesto mi ovo izgleda jako komplikovano za resavanje bez nekih gotovih tokenizera i leksickih parsera.

offline
  • Pridružio: 13 Feb 2012
  • Poruke: 25
  • Gde živiš: Nis

Napisano: 02 Dec 2012 10:37

@ivance95:gimnazija"Svetozar Markovic Nis"odeljenje za obdarene matematicare.
@bobby:
1) za obican izraz:
function prviBroj(s:string):string; var   p:integer;   b:string; begin   p:=1;   while(p<=length(s))and not(s[p]in[+,-,*,/]do p:=2p+1;   b:=copy(s,1,p-1);   delete(s,1,p-1);   prviBroj:=p;   end; function izraz(s:string):real; var   suma,sabirak,cinioc:readl;   operacija,znak,g:integer;   b:string; begin   suma:=0;   sabirak:=0;   znak:=0;   operacija:=0;   while s<>'' do begin      b:=prviBroj(s);      val(b,cinilic,g);      if op=0 then sabirak:=sabirak*cinilac                  else sabirak:=sabirak/cinilac;      if (s='')or(s[1]in[+,-,*,/] then begin         suma:=suma+znak*sabirak         if s<>'' then begin           sabirak:=1;           op:=1;           if s[1]='+' then znak:=1;           if s[1]='-' then znak:=-1;           delete(s,1,1);         end;      end;   else begin      if s[1][='*'then op:=0 else op:=1;      delete(s,1,1); end; end; izraz:=suma; end;

Dopuna: 02 Dec 2012 10:44

2)sa zagradama:
function izraz(s:string):real; var sab,sum,cin:real; zn,op,d,g:integer; begin sum:=0; sab:=0; zn:=1; op:=1; while s<>'' do begin if s[1] ='(' then begin d:=odgovarajucaDesna(s); cin:=izraz(copy(s,2,d-1)); else begin d:=1; while (d<=length(s))and not(s[1] in [+,-,*,/] do d:=d+1; vav(copy(s,1,d-1),cin.g); end; if op=1 then sab:=sab*cin else sab:=sab/cin; delete(s,1,d-1); brisiZagradeSaLeva(s); if(s='')or(s[1]in[+,-,*,/])then begin sum:=sum+zn*sab; if s='' then if s[1]=,+, then zn:=1; if s[1]='-' then zn:=-1; sab:=1; op:=1; end else if s[1]='*' then op:=1 else op:=2; delete(s,1,1); end; izraz:=suma; end;

Dopuna: 02 Dec 2012 10:44

Ove funkcije odgovarajucaDesna i brisiZagradeSaPocetka nismo napisali u skoli

Dopuna: 25 Dec 2012 10:36

Posto niko ne zna da ga uradi molim za LOCK!!!

Ko je trenutno na forumu
 

Ukupno su 1302 korisnika na forumu :: 55 registrovanih, 7 sakrivenih i 1240 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, _Petar, Aleksandar Tomić, aramis s, Atomski čoban, bokisha253, brundo65, BSD, dane007, darkangel, delrey, DPera, Excalibur13, flash12, Frunze, gmlale, HrcAk47, Istman, ivica976, JOntra, jukeboxer, Koridor, Krusarac, kunktator, kybonacci, ljuba, LUDI, Marko Marković, MILICAT, Ne doznajem se u oružje, Nemanja.M, nemkea71, novator, nuke92, oldtimer, ozzy, pacika, pein, repac, robert1979, rovac, Sirius, SR-3m, stegonosa, tubular, Viceroy, vladaa012, vladulns, vobo, voja64, wizzardone, Wrangler, yufighter, zixmix, šumar bk2