Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

JamesVoo

Rozwiązany: [Pascal] Program liczący ilość liter w pliku

Polecane posty

Mam stworzyć do szkoły program który liczy ilość małych i dużych liter w pliku. Oto kod który napisałem

program licznie;
USES CRT;

VAR
t:file of char;
a:char;
b, i:longint;
m, d:longint;

BEGIN
clrscr;
i:=0;
m:=0;
d:=0;
assign(t, 'plik.txt');
reset(t);
b:=filesize(t);
               while b>=i do
               begin;
               read(t,a);
               if a >=('a') and a<=('z') then m:=m+1;
               if a >=('A') and a<=('Z') then d:=m+1;
               end;
writeln('W pliku jest ' ,m, 'malych liter i ' ,d,' duzych liter');

close(t);
readkey;
END.

Podczas kompilacji wyskakuje mi błąd

Error: Operator is not overloaded
wskazujący na linie " if a >=('a') and a<=('z') then m:=m+1;" i "if a >=('A') and a<=('Z') then d:=m+1;".

Pomoże ktoś? :)

Link do komentarza
Udostępnij na innych stronach

a sproboj tak zbudowac if-a:

if (a >='a' and a<='z') thn (...)

_______________

EDIT:

już widzę błąd.

pascal, w przeciwieństwie do niektórych języków, nie ogarnie takiego warunku. Musisz przezutować rozpatrywny znak na ASCII za pomocą funkcji Ord. (np. Ord('A')=65)

więc poprawny warunek będzie taki:

if (Ord(a)>=Ord('a') and Ord(a)<=Ord('z') then (...)

jako uzupełnienie dodam, że funkcją odwrotną do Ord jest Chr, więc np. Chr(65)='A'

Powinno takie coś działać, jak nie rozpozna tej funkcji to inaczej zamienimy znak na ASCII

Link do komentarza
Udostępnij na innych stronach

Zmieniłem na

if (Ord(a)>=Ord('a') and Ord(a)<=Ord('z')) then m:=m+1;

(zapomniałeś o jednym nawiasie ;)) i teraz wyskakuję błąd Error:

Incompatible types: got "BOOLEAN" expected "LONGINT"

Dodam że ani typ tych zmiennych Longint ani boolean nie działa

Link do komentarza
Udostępnij na innych stronach

Przerobiłem te linijki na

 if (a>=chr(97)) and (a<=chr(122)) then m:=m+1;
               if (a>=chr(65)) and (a<=chr(90))  then d:=m+1;

i program się kompiluje. Lecz po uruchomieniu pliku *.exe okno na chwilę się pojawia i znika.

To jest pojedynczy znak

Link do komentarza
Udostępnij na innych stronach

@eldragon - od tego jest readkey

@Hakken, zamiast pętli while, powinienem zrobić while not

Poprawnie program wygląda tak

program licznie;
USES CRT;

VAR
t:file of char;
a:char;
m, d:longint;

BEGIN
clrscr;
m:=0;
d:=0;
assign(t, 'plik.txt');
reset(t);

               while not eof(t) do
               begin;
               read(t,a);
               if (a>=chr(97)) and (a<=chr(122)) then m:=m+1;
               if (a>=chr(65)) and (a<=chr(90))  then d:=d+1;
               end;

writeln('W pliku jest ' ,m, 'malych liter i ' ,d,' duzych liter');
close(t);

readkey;
END.

Dziękuję za pomoc, temat można zamknąć :)

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...