🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
15 messages
15 total messages Started by siec Mon, 23 Apr 2007 11:20
Liczenie literek - string?
#91678
Author: siec
Date: Mon, 23 Apr 2007 11:20
10 lines
1577 bytes
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
Re: Liczenie literek - string?
#91680
Author: Solaris
Date: Mon, 23 Apr 2007 11:23
15 lines
1217 bytes
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 wyraz z
:: 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 
Re: Liczenie literek - string?
#91684
Author: Geo
Date: Mon, 23 Apr 2007 14:57
4 lines
1339 bytes
Aby to zrobi musze wiedzec z ilu znaków składa sie kazdy
> wyraz ,innaczej nie rusze tego.

I tak nie ruszysz, ale powodzenia... :)
Re: Liczenie literek - string?
#91682
Author: Solaris
Date: Mon, 23 Apr 2007 15:16
21 lines
1598 bytes
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 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

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 
Re: Liczenie literek - string?
#91683
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 23 Apr 2007 15:34
9 lines
1153 bytes
Solaris wrote:
> Daj całą treść zadania, napiszę Ci rozwiązanie.

Prowokacja Solaris? Jak zwykle?:>:> ;)

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/ 
Re: Liczenie literek - string?
#91686
Author: Solaris
Date: Mon, 23 Apr 2007 17:51
15 lines
1375 bytes
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 
Re: Liczenie literek - string?
#91687
Author: Magda S
Date: Tue, 04 Sep 2007 16:54
45 lines
1718 bytes
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))
Re: Liczenie literek - string?
#91688
Author: Krzysztof Tabaczynski
Date: Tue, 04 Sep 2007 18:28
51 lines
2341 bytes
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. 
Re: Liczenie literek - string?
#91689
Author: Magda S
Date: Wed, 05 Sep 2007 12:26
92 lines
3599 bytes
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.
Re: Liczenie literek - string?
#91695
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 05 Sep 2007 13:07
31 lines
1840 bytes
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/ 
Re: Liczenie literek - string?
#91690
Author: Krzysztof Tabaczynski
Date: Wed, 05 Sep 2007 13:30
124 lines
4492 bytes
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. 
Re: Liczenie literek - string?
#91692
Author: Krzysztof Tabaczynski
Date: Wed, 05 Sep 2007 13:37
17 lines
1755 bytes
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. 
Re: Liczenie literek - string?
#91693
Author: Solaris
Date: Wed, 05 Sep 2007 13:40
20 lines
1624 bytes
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 
Re: [OT]Liczenie literek - string?
#91696
Author: Solaris
Date: Wed, 05 Sep 2007 18:38
22 lines
1781 bytes
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 
Re: Liczenie literek - string?
#91691
Author: Magda S
Date: Wed, 05 Sep 2007 19:15
86 lines
3512 bytes
>>> 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.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads