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
 
 » luckyluc 04:36
 » mo2 04:23
 » rzymo 04:23
 » Shark20 04:18
 » RoBakk 03:48
 » resmedia 03:25
 » Visar 03:24
 » Pinokio.p 03:17
 » elliot_pl 01:26
 » biEski 01:13
 » yanix 00:46
 » rarek 00:38
 » ReeX 00:30

 Dzisiaj przeczytano
 41114 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
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<<

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