Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » rainy 23:44
 » Wolf 23:43
 » Zbyszek.J 23:38
 » Hitman 23:27
 » Fl@sh 23:17
 » DJopek 23:08
 » petropank 23:07
 » rarek 23:06
 » b0b3r 22:58
 » cVas 22:56
 » dugi 22:51
 » Dexter 22:50
 » Soulburne 22:44
 » stefan_nu 22:41
 » Brauni 22:41
 » maddog 22:39
 » Kenny 22:36
 » toledo 22:35
 » Raist 22:33
 » DYD 22:32

 Dzisiaj przeczytano
 42001 postów,
 wczoraj 25604

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
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<<

  1. 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ło

    f*ck

    1. 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<<

      1. 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ńsczy

        f*ck

        1. dzięki. , Coyote 28/05/05 10:49
          Sprawdzimy.

          Do J23: Buziaki dla Ciebie, Misiu! :*

          >>GG 1650565<<

  2. 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.

    1. dzięki za info... , Coyote 28/05/05 10:49
      ...zaraz to posprawdzam.

      Do J23: Buziaki dla Ciebie, Misiu! :*

      >>GG 1650565<<

    2. 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ś.....

  3. 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-2025, TwojePC.PL