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 600 korisnika na forumu :: 16 registrovanih, 6 sakrivenih i 578 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: 5.56, Centauro, cikadeda, DejanSt, Libertas, mile09, Ne doznajem se u oružje, Nik_sloter, opt1, slonic_tonic, Tas011, VJ, volimpivuvolimrakiju, vukovi, wolf1, zlaya011