Thread View: pl.comp.lang.pascal
15 messages
15 total messages
Started by siec
Mon, 23 Apr 2007 11:20
Liczenie literek - string?
Author: siec
Date: Mon, 23 Apr 2007 11:20
Date: Mon, 23 Apr 2007 11:20
10 lines
1577 bytes
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?
Author: Solaris
Date: Mon, 23 Apr 2007 11:23
Date: Mon, 23 Apr 2007 11:23
15 lines
1217 bytes
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?
Author: Geo
Date: Mon, 23 Apr 2007 14:57
Date: Mon, 23 Apr 2007 14:57
4 lines
1339 bytes
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?
Author: Solaris
Date: Mon, 23 Apr 2007 15:16
Date: Mon, 23 Apr 2007 15:16
21 lines
1598 bytes
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?
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 23 Apr 2007 15:34
Date: Mon, 23 Apr 2007 15:34
9 lines
1153 bytes
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?
Author: Solaris
Date: Mon, 23 Apr 2007 17:51
Date: Mon, 23 Apr 2007 17:51
15 lines
1375 bytes
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?
Author: Magda S
Date: Tue, 04 Sep 2007 16:54
Date: Tue, 04 Sep 2007 16:54
45 lines
1718 bytes
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?
Author: Krzysztof Tabaczynski
Date: Tue, 04 Sep 2007 18:28
Date: Tue, 04 Sep 2007 18:28
51 lines
2341 bytes
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?
Author: Magda S
Date: Wed, 05 Sep 2007 12:26
Date: Wed, 05 Sep 2007 12:26
92 lines
3599 bytes
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?
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 05 Sep 2007 13:07
Date: Wed, 05 Sep 2007 13:07
31 lines
1840 bytes
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?
Author: Krzysztof Tabaczynski
Date: Wed, 05 Sep 2007 13:30
Date: Wed, 05 Sep 2007 13:30
124 lines
4492 bytes
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?
Author: Krzysztof Tabaczynski
Date: Wed, 05 Sep 2007 13:37
Date: Wed, 05 Sep 2007 13:37
17 lines
1755 bytes
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?
Author: Solaris
Date: Wed, 05 Sep 2007 13:40
Date: Wed, 05 Sep 2007 13:40
20 lines
1624 bytes
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?
Author: Solaris
Date: Wed, 05 Sep 2007 18:38
Date: Wed, 05 Sep 2007 18:38
22 lines
1781 bytes
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?
Author: Magda S
Date: Wed, 05 Sep 2007 19:15
Date: Wed, 05 Sep 2007 19:15
86 lines
3512 bytes
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