Procedura HELP

2

Procedura HELP

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

Ja bih brojanje reci odradio sa Pos() komandom time sto bih trazio razmake, pa onda izbacivao deo recenice pre pozicije koju je nasao Pos(), s tim sto treba proveriti da li iza zadnje reci postoji razmak, i da li ima duplih razmaka.

@Licanin
Dobio si dva zadatka u jednom.
To izbacivanje praznina je jedan zadatak, i nema ama bas nikakvu primenu u drugom zadatku.
Napisacu ti ja veceras kada se vratim u stan funkciju koja ce da ti nadje broj reci u recenici, pa ce tebi da ostane samo da uradis glavni program (unosenje recenica i uporedjivanje broja reci).

Dopuna: 15 Okt 2006 17:37

@beli
Ne verujem da ce da im dozvoli delimitere.
Ja sam lepo pitao Licanina da li imaju StrUtils, pa bi onda odradio ovo funkcijom StringReplace

sOut := StringReplace(sIn, #32, '', [rfReplaceAll]);



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 19 Dec 2005
  • Poruke: 110
  • Gde živiš: S one strane Drine gde padaju mine!!!

@Bobby

Naravno da imaju veze ova funkcija ili procedura sa programom odredjivanja koji string ima vise reci.
Kada iz svakog stringa izbacim razmake dobicu jedan string bez razmaka koji cu sa length da uporedim sa ostale dve,valjda se na to mislilo u zadatku. Ni sam vise ne znam. Ali mislim da se izmedju reci podrazumeva samo jedan razmak, besmisleno je stavljati pri kucanju nekog teksta vise od jednog razmaka,tako da mi treba procedura ili funkcija koja izdvaja razmake iz stringa. Posele je lako. Recenica koja ima najvise razmaka ima najvise reci.



offline
  • Strog  Male
  • Stručni saradnik
    Web programiranje
  • Bojan Kopanja
  • Web & Mobile developer @ ZeusSoftware
  • Pridružio: 26 Jul 2003
  • Poruke: 2597
  • Gde živiš: Stara Pazova

Ako ti je samo to potrebno onda ti ono sto sam ja preradio iz tvoje prvobitne procedure daje sve sto ti treba... Napravice ti string bez razmaka a pri tome i izbrojati razmake koji su bili u starom stringu.

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

dve reci
tralalalalalalalalalala

Ako zadatak glasi da pronadje koja recenica ima vise reci, onda po tvojoj logici druga recenica iz mog primera ima vise reci, iako je ocigledno da prva ima vise.

Odluci sta ti tacno treba, pa da onda vidimo kako cemo dalje.

offline
  • Đuro Glumac
  • dipl. ing. informatike
  • Pridružio: 08 Feb 2004
  • Poruke: 3640
  • Gde živiš: ApAtIn

Ako je potrebno odrediti koja recenica ima vise reci, onda je najlakse onako kako si krenu. Izbrojis razmake +1 je broj reci.
Ako je potrebno odrediti koja recenica ima vise slova, onda izbacis prazna mesta i sa length dobijes broj slova u toj reci odnosno recenici. Ali ovde ti je problem sto ce to sa stringom da radi do samo 255 znakova.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Za brojanje reci, ukljuciti RxStrUtils (ne znam za vas, ali je meni Rx obavezan. sad je ukljucen u Jedi www.delphi-jedi.org)

Ispod je funkcija koja menja reci, koja garantovano radi, testirana.
Moze se iskoristiti deo code-a za sta vam treba.


type   Delimiters             : TCharSet = ['.', ',', '(', ')', '[', ']', #32, #13, #10, #9, ';', ':', '+', '*', '/', '-', '<', '>', '=']; function WordReplace(var Text: AnsiString; ASearchWord, AReplaceWord: AnsiString;   ACaseSensitive: Boolean = True): boolean; var   i, j                   : Longint;   ch                     : char;   PassedBegin, PassedEnd : boolean; begin   result := false;   PassedBegin := false;   PassedEnd := false;   if ((ASearchWord = '') or (AReplaceWord = '')) then     exit;   if ACaseSensitive then   begin     if AnsiCompareStr(ASearchWord, AReplaceWord) = 0 then       exit;   end   else if AnsiSameText(ASearchWord, AReplaceWord) then     exit;   if pos(#32, ASearchWord) > 0 then //if search word consists of 2 or more words   begin     if not ACaseSensitive then       j := pos(AnsiUpperCase(ASearchWord), AnsiUpperCase(Text))     else       j := pos(ASearchWord, Text);     if j = 1 then       PassedBegin := true     else if j > 1 then     begin       ch := Text[j - 1];       if (ch in Delimiters) then         PassedBegin := true;     end;     if (j + Length(ASearchWord) - 1) = Length(Text) then       PassedEnd := true     else if (j + Length(ASearchWord) - 1) < Length(Text) then     begin       ch := Text[j + Length(ASearchWord)];       if (ch in delimiters) then         PassedEnd := true;     end;     if (PassedBegin and PassedEnd) then     begin       Delete(text, j, Length(ASearchWord));       Insert(AReplaceWord, Text, j);       result := true;     end;   end   else   begin //regular one-word replacement     repeat       if ACaseSensitive then         i := PosWord(ASearchWord, Text, Delimiters)       else         i := PosWord(AnsiLowerCase(Text), AnsiLowerCase(ASearchWord), Delimiters);       if i > 0 then       begin         Delete(Text, i, Length(ASearchWord));         Insert(AReplaceWord, Text, i);         Result := true;       end;     until i <= 0;   end; end;

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Imam slican problem, samo sto treba da unesem 3 stringa i da ispitam koji ima vise razmaka. Probao sam sa funkcijom, ali ni procedura nije iskljucena...

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

@MSMarkoN.
A kakva je to krucijalna razlika izmedju procedure i funkcije kad si u dilemi?
Znaci, funkcija ti nije pomogla, pa gledas da li ce procedura? Very Happy

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Evo funkcije .

  function raz (d:integer;S:string):integer; var Sp:string;     i,p,Su:integer; begin      d:=length(S);      for i:=1 to length(S) do      begin           if S[i]<>' ' then           Sp:=Sp+S[i];           p:=length(Sp);           Su:=d-p;      end; end;


Dalje sam probao ali ne ide... HELP ???

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

Zasto ti funkcija ima argumenat 'd' kada ga ne uzimas odatle?
Zasto si zakomplikovao stvar tako puno?
Nigde nisi vratio rezultat funkcije.

function raz(S:string): integer; var   i, j: integer; begin   j := 0;   for i := 1 to length(S) do     if not (S[i] <> ' ') then inc(j);   result := j; end;

Ko je trenutno na forumu
 

Ukupno su 1137 korisnika na forumu :: 40 registrovanih, 7 sakrivenih i 1090 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: babaroga, Boris Bosiljčić, cavatina, djboj, draganl, dulleo, flash12, FOX, goxin, Karla, krkalon, Kubovac, ladro, laurusri, Lieutenant, Milos ZA, milutin134, Oscar, ozzy, pein, Pohovani_00, raptorsi, rasok, Ripanjac, RJ, Romibrat, royst33, ruma, S1Mk3, saputnik plavetnila, sasa87, Shinobi, Simon simonović, Srle993, Trpe Grozni, tubular, vaso1, Webb, YU-UKI, šumar bk2