Jump to content

Archived

This topic is now archived and is closed to further replies.

JamesVoo

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

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

no to znowu dwie sprawy. pierwsza:

przypisz te wartosci ascii jakims zmiennym poza ifami, zobaczymy czy ta funkcja dobrze dziala.

po drugie:

dane jakie dostaje ten program, czyli zmienna a jest jednym znakiem czy ciagiem znakow?

Link to comment
Share on other sites

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 to comment
Share on other sites

Guest eldragon93

Na końcu (przed "endem") daj repeat until keypressed;

Wtedy okienko będzie widoczne dopóki nie wciśniesz jakiegoś klawisza.

Link to comment
Share on other sites

@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 to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...