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?
[Link mogu videti samo ulogovani korisnici]
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 1515 korisnika na forumu :: 136 registrovanih, 13 sakrivenih i 1366 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 15694 - dana 01 Feb 2026 12:23

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 100jan, 357magnum, A3C, Alesalebg85, Alexa77, amaterSRB, Andrija357, Apok, Aska, babaroga, bakos022, Baltimor, Barista, batoze, bavar357, Bbbggg1979, Belac91, Betta, Bojcca, Bojke549, Bosnjo, BUDDAR70, Buzdovan, C-Gun, carinko, ccoogg123, Cigi, Clouseau, dankisha, dejno, Dekanovic, deki1001, desmeki, Dimitrije Paunovic, Dogma21, doktor2, draganca, DrNeoCortex, dukajov, Džekson, Filip1, Gaga_89, galerija, gasha, Gheljda, Gonga, Goran_, helen1, Hemi, Hitri, ivanb, jalos, Jaz, Jezekijel, JOntra, K2, Kajzer Soze, Kalu128338, Kapetan Hadok, kibihrchak, Koce, Koja79, lacko, ladro, Lazarus, LostInSpaceandTime, Lubenica303, magyar, Marko Marković, markoskjk, Milan Miscevic, miljannis, MiljanXD, MILO-VAN, milos97, Milovan Dinic, minke, MiroslavD, mishkooo, Natuzzi, Nebojsa81, nekdo, neko_drugi, nerevar, nisamBot, nnnnnnnnnn, NNPD, opt1, Paklenica, Panter, pceklic, pein, pera bager, Petarvu, pisac12, PlayerOne, PMsnow, Podljub, procesor, Radio operater, razumihin, RileHerc, royst33, ruma, S-lash, sasa87, Shinobi, ssekir75, sspp, stagezin, Stanlio, Stevan Visoki, stevo svinja, stokssone, Su 57, suputboy, tecataki, tehnika, Teodor60, Tristan_Bantam, troki1971, ujke, v0idmp3, varda, vathra, vazduh, vensla, vjetar, Vlada78, Volkhov-M, vuksa72, Zjmc, zlaya011, zubri, Šraf, 1107