TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[OT] Pascal, WordCount - pomocy (długie). , Coyote 27/05/05 17:33 Hej.
Piszę program na zaliczenie i mam mały problemik. Program ma działać jak wc z linuxa (a nawet więcej bo ma zliczać znaki, słowa, zdania, linijki).
Problem polega na tym, że nie wiem jak porównywać wczytany znak (bo wczytuję po znaku) ze znakami "!",".","...","?", "tabulator","znak nowej linii". Kompilator nie chce mi puścić porównania mojej zmiennej c typu char z np. chr(10) - enter. Do tego zastanawiam się czy nie lepiej byłoby to wczytywać do tablicy charów po trzy znaki (żeby nie było problemu z tym wielokropkiem i sprawdzaniem czy poprzednio wczytany znak nie był też kropką.
Oto fragment programu:
var nc,nw,ns,nl:integer;
c:char;
slowo:boolean;
p:text;
lokalizacja:string;
begin
nc:=0; nw:=0; ns:=0; nl:=0;
Write('Podaj lokalizacje pliku: ');
ReadLn(lokalizacja);
AssignFile(p,lokalizacja);
Reset(p);
while not eof(p) do
begin
Read(p,c);
nc:=nc+1;
if c=' ' or c=chr(9) or c=chr(10) then
begin
slowo:=false;
nw:=nw+1;
if c=chr(10) then nl:=nl+1;
end
else
begin
if slowo=false then
begin
slowo:=true;
nw:=nw+1;
end;
end;
if c='.' or c='!' or c='?' then
begin
ns:=ns+1;
slowo:=false;
end;
end;
Close(p);
WriteLn(nc,' ',nw,' ',ns,' ',nl);
ReadLn;
end.Do J23: Buziaki dla Ciebie, Misiu! :*
>>GG 1650565<< - hmmm , john565 27/05/05 18:35
a zamiast chr(liczba) nie powinieneś użyć ord(liczba) ??, bo cosik mi tak świta, zobacz zrestą chra w helopie to ci sie wszystko wyjaśni bo japod ręką nie mam,
odezwij sie na gg bo mi numra wciełof*ck - NIe. , Coyote 27/05/05 19:28
Ord daje numer ascii danego znaku. A chr daje dany znak od numeru.Do J23: Buziaki dla Ciebie, Misiu! :*
>>GG 1650565<< - to nie mozesz , john565 28/05/05 01:07
zrobić ak że zmaist pidsać chr piszesz if ord(a)=10 ... ?? przy czym a to twój znajk pojedyńsczyf*ck - dzięki. , Coyote 28/05/05 10:49
Sprawdzimy.Do J23: Buziaki dla Ciebie, Misiu! :*
>>GG 1650565<<
- strasznie nie efektywny ten program będzie , pastor666 28/05/05 10:14
Chr(9) nie jest poprawne, bo Chr to funkcja zamieniająca znak na jego reprezentacje liczbową, a 9 to nie znak tylko liczba. Znak o indeksie 9 to #9, więc powinieneś napisać: Char(#9).
A tak w ogóle, to tak jak wspomniałem w temacie, ten program nie sprawdzi się przy większych plikach. Wczytywanie danych z dysku, to dość mozolna operacja, którą ty przy pliku o rozmiarze 50kB, wykonasz 51200 razy. Przy założeniu, że pojedynczy odczyt trwa ćwierć sekundy, twój program pracowałby blisko 12 minut. A to przecież całkiem niewielki plik.
Radzę co byś skorzystał z procedury BlockRead (być może coś pokręciłem w jej nazwie, bo podaje z pamięci), a znaki porównywał wg ich indeksów.- dzięki za info... , Coyote 28/05/05 10:49
...zaraz to posprawdzam.Do J23: Buziaki dla Ciebie, Misiu! :*
>>GG 1650565<< - O jakim języku mówisz ? , exmac 30/05/05 09:09
bo chyba nie o pascalu.......
o buforowaniu operacji IO też pewnie nie słyszałeś.....
- Tu jest problem , exmac 30/05/05 09:04
if c=' ' or c=chr(9) or c=chr(10) then
powinieneś użyć nawiasów, bo "or" ma wyższy priorytet niż "=" i to wyrzażenie jest interpretowane jako:
if ((c=(' ' or c))=(chr(9) or c))=chr(10) then
co raczej wiekszego sensu nie ma i w dodatku jest niepoprawne składniowo gdyż porównujesz wyrażenia logiczne ze znakowymi i dlatego kompilator "nie chce puścić".
P.S. Czytaj komunikaty - one nie są wyłącznie do ozdoby |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|