Liczenie literek - string?
siec@o2.pl - 11-05-2007 12:37
Liczenie literek - string?
Witam ! Otóż mam następujący problem: powiedzmy, ze wpisuje pewien wyraz z klawiatury: ABSNDJSYSHR i chce ,zeby program policzył ile tam jest literek.Dokładnie chodzi o to ,ze mam wczytac pewien plik txt i sprawdzić ile słów sie w nim powtarza(jedno slowo w jednym wierszu bez polskich #).Aby to zrobi musze wiedzec z ilu znaków składa sie kazdy wyraz ,innaczej nie rusze tego.
proszę o pomoc i z góry bardzo dziękuje
Solaris - 11-05-2007 12:37
Dnia 23 Apr 2007 04:20:37 -0700, jakże pięknego siec@o2.pl wystukał co zawarte poniżej:
:: Witam ! :: Otóż mam następujący problem: powiedzmy, ze wpisuje pewien wyrazz :: klawiatury: ABSNDJSYSHR
len:=length('ABSNDJSYSHR');
-- Born to raise hell. Linux registered user: 408584 Contact: GG#3802676, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
Geo - 11-05-2007 12:37
Aby to zrobi musze wiedzec z ilu znaków składa sie kazdy > wyraz ,innaczej nie rusze tego.
I tak nie ruszysz, ale powodzenia... :)
Solaris - 11-05-2007 12:37
Dnia 23 Apr 2007 04:20:37 -0700, jakże pięknego siec@o2.pl wystukał co zawarte poniżej:
:: Witam ! :: Otóż mam następujący problem: powiedzmy, ze wpisuje pewien wyrazz :: klawiatury: ABSNDJSYSHR :: i chce ,zeby program policzył ile tam jest literek.Dokładnie chodzi o :: to ,ze mam wczytac pewien plik txt i sprawdzić :: ile słów sie w nim powtarza(jedno slowo w jednym wierszu bez polskich :: #).Aby to zrobi musze wiedzec z ilu znaków składa sie kazdy :: wyraz ,innaczej nie rusze tego. :: :: proszę o pomoc i z góry bardzo dziękuje
Daj całą treść zadania, napiszę Ci rozwiązanie.
-- Born to raise hell. Linux registered user: 408584 Contact: GG#3802676, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
=?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= - 11-05-2007 12:37
Solaris wrote: > Daj całą treść zadania, napiszę Ci rozwiązanie.
Prowokacja Solaris? Jak zwykle?:>:> ;)
-- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
Solaris - 11-05-2007 12:37
Dnia Mon, 23 Apr 2007 17:34:37 +0200, jakże pięknego Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej:
:: Solaris wrote: :: > Daj całą treść zadania, napiszę Ci rozwiązanie. :: :: Prowokacja Solaris? Jak zwykle?:>:> ;)
Hehe, a jak myślisz? ;) Dostanie taki kod o jaki prosi ^_^
-- Born to raise hell. Linux registered user: 408584 Contact: GG#3802676, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
Magda S - 05-09-2007 00:22
Solaris pisze: > Dnia Mon, 23 Apr 2007 17:34:37 +0200, jakże pięknego > Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej: > > :: Solaris wrote: > :: > Daj całą treść zadania, napiszę Ci rozwiązanie. > :: > :: Prowokacja Solaris? Jak zwykle?:>:> ;) > > Hehe, a jak myślisz? ;) Dostanie taki kod o jaki prosi ^_^ > Function IleLiter(S:String):integer; var ls: integer; begin ls := length(S); if (ls = 0) then IleLiter := 0 else if (ls=1) then begin if S[1] in Letters then IleLiter := 1 else IleLiter := 0 end else IleLiter := IleLiter(S[1]) + IleLiter(Copy(S, 2, ls-1)); end;
and (S[1] in Letters))
Krzysztof Tabaczynski - 05-09-2007 00:22
Użytkownik "Magda S" <sowamagda@vp.pl> napisał w wiadomości news:fbk2jo$rko$1@news.onet.pl... > Solaris pisze: >> Dnia Mon, 23 Apr 2007 17:34:37 +0200, jakże pięknego >> Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej: >> >> :: Solaris wrote: >> :: > Daj całą treść zadania, napiszę Ci rozwiązanie. >> :: :: Prowokacja Solaris? Jak zwykle?:>:> ;) >> >> Hehe, a jak myślisz? ;) Dostanie taki kod o jaki prosi ^_^ >> > Function IleLiter(S:String):integer; > var > ls: integer; > begin > ls := length(S); > if (ls = 0) > then > IleLiter := 0 > else if (ls=1) then > begin > if S[1] in Letters > then > IleLiter := 1 > else > IleLiter := 0 > end > else > IleLiter := IleLiter(S[1]) + IleLiter(Copy(S, 2, ls-1)); > end;
To chyba nie jest takie dobre...
function IloscLiter (S: string): integer; const Litery: set of char = ['A'..'Z', 'a'..'z']; var I, L, LicznikLiter: integer; begin LicznikLiter := 0; L := lenght (S); if L > 0 then for I := 1 to L do if S[i] in Litery then LicznikLiter := LicznikLiter + 1; IloscLiter := LicznikLiter; end; (* IloscLiter *)
Pozdrowienia. Krzysztof z Tychów.
Magda S - 06-09-2007 00:05
Krzysztof Tabaczynski pisze: > > Użytkownik "Magda S" <sowamagda@vp.pl> napisał w wiadomości > news:fbk2jo$rko$1@news.onet.pl... >> Solaris pisze: >>> Dnia Mon, 23 Apr 2007 17:34:37 +0200, jakże pięknego >>> Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej: >>> >>> :: Solaris wrote: >>> :: > Daj całą treść zadania, napiszę Ci rozwiązanie. >>> :: :: Prowokacja Solaris? Jak zwykle?:>:> ;) >>> >>> Hehe, a jak myślisz? ;) Dostanie taki kod o jaki prosi ^_^ >>> >> Function IleLiter(S:String):integer; >> var >> ls: integer; >> begin >> ls := length(S); >> if (ls = 0) >> then >> IleLiter := 0 >> else if (ls=1) then >> begin >> if S[1] in Letters >> then >> IleLiter := 1 >> else >> IleLiter := 0 >> end >> else >> IleLiter := IleLiter(S[1]) + IleLiter(Copy(S, 2, ls-1)); >> end; > > To chyba nie jest takie dobre...
Nie poznał się człowiek na żartach.
Czy ktoś potrafi to zaprogramować jeszcze gorzej? Tu już jest nieźle, zagnieżdzenie rekursji proporcjonalne do długości stringa. W sam raz dla początkującego, któremu prowadzący każe "zamienić wersję rekurencyjną na iteracyjną, z uwzględnieniem reguł eliminowania tail recursion" (bo rekurencja końcowa jest tu istotnie). To brzmi znacznie groźniej niż liczenie literek w tekście - i o to mi chodziło.
Pomijając taki drobiazg: "co to jest Letters?" - zapyta się prowadzący.
> > function IloscLiter (S: string): integer; > const > Litery: set of char = ['A'..'Z', 'a'..'z']; > var > I, L, LicznikLiter: integer; > begin > LicznikLiter := 0; > L := lenght (S); > if L > 0 > then for I := 1 to L do > if S[i] in Litery > then LicznikLiter := LicznikLiter + 1; > IloscLiter := LicznikLiter; > end; (* IloscLiter *)
Pomijając literówki: Warunek if (L>0) jest zbędny. Poza tym zapomniałeś o polskich literach. No i można było użyć Inc().
Zamiast
Litery: set of char = ['A'..'Z', 'a'..'z'];
można było napisać wprost
Litery = ['A'..'Z', 'a'..'z'];
W Turbo Pascalu to trochę mniejsze obciążenie dla i tak skąpego segmentu danych.
("Co to jest segment danych i w jakim sensie jest on 'skąpy'?" - może się zapytać prowadzący).
P.S.
1. Niby taki prosty problem, a ile ciekawostek...
2. Trochę mi żal człowieka, bo wychodzi na to, że wyciągnęłam go z z niezbyt głębokiej wody (topił się) i wrzucam do gnojówki. Chyba już więcej nie poprosi o gotowca.
=?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= - 06-09-2007 00:05
Krzysztof Tabaczynski wrote: > To chyba nie jest takie dobre...
Toż Magda użyła Solaris-style(R) żeby zmieszać lenia z błotem ;).
> function IloscLiter (S: string): integer; > const > Litery: set of char = ['A'..'Z', 'a'..'z']; > var > I, L, LicznikLiter: integer; > begin > LicznikLiter := 0; > L := lenght (S); > if L > 0 > then for I := 1 to L do > if S[i] in Litery > then LicznikLiter := LicznikLiter + 1; > IloscLiter := LicznikLiter; > end; (* IloscLiter *)
Gwoli ścisłości: "if (L>0) then" jest nadmierne, jeżeli pętla będzie od 1 do 0 to w pętle wogole nie wejdzie prog. ;).
-- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
Krzysztof Tabaczynski - 06-09-2007 00:05
Użytkownik "Magda S" <sowamagda@vp.pl> napisał w wiadomości news:fbm79m$5lv$1@news.onet.pl... > Krzysztof Tabaczynski pisze: >> >> Użytkownik "Magda S" <sowamagda@vp.pl> napisał w wiadomości >> news:fbk2jo$rko$1@news.onet.pl... >>> Solaris pisze: >>>> Dnia Mon, 23 Apr 2007 17:34:37 +0200, jakże pięknego >>>> Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej: >>>> >>>> :: Solaris wrote: >>>> :: > Daj całą treść zadania, napiszę Ci rozwiązanie. >>>> :: :: Prowokacja Solaris? Jak zwykle?:>:> ;) >>>> >>>> Hehe, a jak myślisz? ;) Dostanie taki kod o jaki prosi ^_^ >>>> >>> Function IleLiter(S:String):integer; >>> var >>> ls: integer; >>> begin >>> ls := length(S); >>> if (ls = 0) >>> then >>> IleLiter := 0 >>> else if (ls=1) then >>> begin >>> if S[1] in Letters >>> then >>> IleLiter := 1 >>> else >>> IleLiter := 0 >>> end >>> else >>> IleLiter := IleLiter(S[1]) + IleLiter(Copy(S, 2, ls-1)); >>> end; >> >> To chyba nie jest takie dobre... > > Nie poznał się człowiek na żartach. > > Czy ktoś potrafi to zaprogramować jeszcze gorzej? Tu już jest nieźle, > zagnieżdzenie rekursji proporcjonalne do długości stringa. W sam raz dla > początkującego, któremu prowadzący każe "zamienić wersję rekurencyjną na > iteracyjną, z uwzględnieniem reguł eliminowania tail recursion" (bo > rekurencja końcowa jest tu istotnie). To brzmi znacznie groźniej niż > liczenie literek w tekście - i o to mi chodziło. > > Pomijając taki drobiazg: "co to jest Letters?" - zapyta się prowadzący. > > > > > >> >> function IloscLiter (S: string): integer; >> const >> Litery: set of char = ['A'..'Z', 'a'..'z']; >> var >> I, L, LicznikLiter: integer; >> begin >> LicznikLiter := 0; >> L := lenght (S); >> if L > 0 >> then for I := 1 to L do >> if S[i] in Litery >> then LicznikLiter := LicznikLiter + 1; >> IloscLiter := LicznikLiter; >> end; (* IloscLiter *) > > Pomijając literówki:
Jakie literówki?
> Warunek if (L>0) jest zbędny.
A jeśli "lenght" jest źle zaimplementowany?
> Poza tym zapomniałeś o polskich literach.
Nie zapomniałem. Nie było mowy o "polskich literach".
> No i można było użyć Inc().
Może go nie być w dostępnym dialekcie pascala. O ile wiem, to teraz "I := I +1" jest teraz automagicznie zamieniane na inc (I).
> > Zamiast > > Litery: set of char = ['A'..'Z', 'a'..'z']; > > można było napisać wprost > > Litery = ['A'..'Z', 'a'..'z'];
No fakt... Ale wolałem tak jawnie...
> > W Turbo Pascalu to trochę mniejsze obciążenie dla i tak skąpego segmentu > danych. > > ("Co to jest segment danych i w jakim sensie jest on 'skąpy'?" - może się > zapytać prowadzący).
No właśnie? Też bym spytał... Ostatecznie każda procedura ma 64kB segmentu danych. A, może źle wiem...
> > > P.S. > > 1. Niby taki prosty problem, a ile ciekawostek... > > 2. Trochę mi żal człowieka, bo wychodzi na to, że wyciągnęłam go z z > niezbyt głębokiej wody (topił się) i wrzucam do gnojówki. Chyba już więcej > nie poprosi o gotowca.
A mnie chodziło o wyeliminowanie zupełnie zbędnej rekurencji...
Pozdrowienia. Krzysztof z Tychów.
Krzysztof Tabaczynski - 06-09-2007 00:05
Użytkownik "Magda S" <sowamagda@vp.pl> napisał w wiadomości news:fbm79m$5lv$1@news.onet.pl...
> 2. Trochę mi żal człowieka, bo wychodzi na to, że wyciągnęłam go z z > niezbyt głębokiej wody (topił się) i wrzucam do gnojówki. Chyba już więcej > nie poprosi o gotowca.
Proszenie o gotowca wcale nie jest takim dużym błędem przy pisaniu programów. Wiele lat pracowałem właśnie w takim trybie. Pisałem szkielet programu i najważniejsze procedury prosząc kilku młodszych kolegów właśnie o "gotowce". Ważna jest tylko precyzyjna definicja owego "gotowca".
Pozdrowienia. Krzysztof z Tychów.
Solaris - 06-09-2007 00:05
Dnia Wed, 5 Sep 2007 15:07:38 +0200, jakże pięknego Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej:
:: Krzysztof Tabaczynski wrote: :: > To chyba nie jest takie dobre... :: :: Toż Magda użyła Solaris-style(R) żeby :: zmieszać lenia z błotem ;).
:D Ale ja bym go zagiął jeszcze bardziej kodem (: W miare wolnego czasu coś mu sklikam.
Ew. można to do FAQ dorzucić, nieprawdaż Mały-Metal(R)?
-- Born to raise hell. Linux registered user: 408584 Contact: GG#3802676, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
=?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= - 06-09-2007 00:05
Solaris wrote: >> Toż Magda użyła Solaris-style(R) żeby >> zmieszać lenia z błotem ;).
> Ale ja bym go zagiął jeszcze bardziej kodem (: > W miare wolnego czasu coś mu sklikam. > > Ew. można to do FAQ dorzucić, nieprawdaż Mały-Metal(R)?
YA RLY, Metal? No Wai! <i-obrazek-sowy> ;).
-- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
Solaris - 06-09-2007 00:05
Dnia Wed, 5 Sep 2007 17:17:01 +0200, jakże pięknego Łukasz 'Maly' Ostrowski <maly@USUNnemo.pl> wystukał co zawarte poniżej:
:: Solaris wrote: :: >> Toż Magda użyła Solaris-style(R) żeby :: >> zmieszać lenia z błotem ;). :: :: > Ale ja bym go zagiął jeszcze bardziej kodem (: :: > W miare wolnego czasu coś mu sklikam. :: > :: > Ew. można to do FAQ dorzucić, nieprawdaż Mały-Metal(R)? :: :: :: YA RLY, Metal? No Wai! <i-obrazek-sowy> ;).
AVE Satan! :D
-- Born to raise hell. Linux registered user: 408584 Contact: GG#3802676, solaris#idns.pl 19:16:28 -!- Platyna Erroneous Nickname
Magda S - 06-09-2007 00:05
>>> function IloscLiter (S: string): integer; >>> const >>> Litery: set of char = ['A'..'Z', 'a'..'z']; >>> var >>> I, L, LicznikLiter: integer; >>> begin >>> LicznikLiter := 0; >>> L := lenght (S); >>> if L > 0 >>> then for I := 1 to L do >>> if S[i] in Litery >>> then LicznikLiter := LicznikLiter + 1; >>> IloscLiter := LicznikLiter; >>> end; (* IloscLiter *) >> >> Pomijając literówki: > > Jakie literówki?
lenght. Funkcja zwracająca długość łańcucha to Length().
> >> Warunek if (L>0) jest zbędny. > > A jeśli "lenght" jest źle zaimplementowany?
Jeśli L <= 0, to pętla for i := 1 to L nie wykona się ani razu, niezaleznie od tego, skąd wzięła się wartość L. I dlatego if L > 0 jest zbędne. Niezależnie od tego, co oznacza "lenght"
> >> Poza tym zapomniałeś o polskich literach. > > Nie zapomniałem. Nie było mowy o "polskich literach".
Była mowa o "literach". Jesteśmy w Polsce, dyskusja toczy się po polsku.
> >> No i można było użyć Inc(). > > Może go nie być w dostępnym dialekcie pascala. > O ile wiem, to teraz "I := I +1" jest teraz automagicznie > zamieniane na inc (I).
Może nie być zamieniane w danym dialekcie Pascala
> >> >> Zamiast >> >> Litery: set of char = ['A'..'Z', 'a'..'z']; >> >> można było napisać wprost >> >> Litery = ['A'..'Z', 'a'..'z']; > > No fakt... > Ale wolałem tak jawnie... > >> >> W Turbo Pascalu to trochę mniejsze obciążenie dla i tak skąpego >> segmentu danych. >> >> ("Co to jest segment danych i w jakim sensie jest on 'skąpy'?" - może >> się zapytać prowadzący). > > No właśnie? Też bym spytał... > Ostatecznie każda procedura ma 64kB segmentu danych. > A, może źle wiem...
Że co? Zobacz, jaki jest model pamięci w Turbo Pascalu. Wszystkie zmienne globalne, stałe typowane, tablice VMT, a także (niektórzy nie wiedzą!) stałe tekstowe (łańcuchy) zastępujące parametry formalne typu PChar lądują w tym skąpym segmencie 64K. Tu chodzi o to, żeby nie tworzyć stałej typowanej. Stałe typu set przechowywane są w kodzie, a segmentów kodu aplikacja może mieć wiele.
> A mnie chodziło o wyeliminowanie zupełnie zbędnej rekurencji...
Ona w założeniu nie miała być "zbędna", tylko KURIOZALNA. Notabene klasyczny przykład tego, jak NIE należy stosować rekurencji.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
String line; if (line=="cos"){...}....problem
[Oracle] =?ISO-8859-2?Q?=A3=B1czenie_wierszy_z_zapytania_?==?ISO-8859-2?Q?w_jeden_string?=
Variable type (position <number>) in EXECUTE STATEMENT '<string>' INTO does not match returned column type
Problem z funkcja mysql_real_escape_string() na bazie mysql
[psql] Funkcja =?ISO-8859-2?Q?=B3=B1cz=B1ca_stringi?=
Sql Serv 2000 - String z lista parametrem funkcji ?
[pl/sql] usuwanie znaku nowej lini ze stringa
Firebird 1.5, Invalid argument in EXECUTION STATEMENT - cannot convert to string
[oracle] jak wyciągnąć jeden znak ze stringa/zmiennej?
zanotowane.pldoc.pisz.plpdf.pisz.pldirtyboys.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|