Skocz do zawartości


Pascal liczenie znaków - lekkie doszlifowanie


Brak odpowiedzi do tego tematu

#1 shalan

    Nowy na forum

  • Użytkownicy
  • 1 Postów:

Napisano pon, 09 sty 2017 - 16:27

Witam wszystkich!
Potrzebuję pomocy w lekkim (taką mam nadzieję) doszlifowaniu kodu.

Mam coś takiego:

pascal
program liczeniedzialajace;
USES CRT;
 
VAR
t:file of char;
a:char;
krop,wykrz,pyt,licz,dwuz,uo,uz:longint;
 
BEGIN
clrscr;
krop:=0;
wykrz:=0;
pyt:=0;
licz:=0;
dwuz:=0;
uo:=0;
uz:=0;
assign(t, 'plik.txt');
reset(t);
 
                  while not eof(t) do
                  begin;
                  read(t,a);
                  if (a=chr(46))                       then krop:=krop+1;
                  if (a=chr(33))                       then wykrz:=wykrz+1;
                  if (a=chr(63))                       then pyt:=pyt+1;
                  if (a>=chr(48)) and (a<=chr(57))        then licz:=licz+1;
                  if (a=chr(85)) or (a=chr(117))       then uo:=uo+1;
                  if (a=chr(162)) or (a=chr(224))         then uz:=uz+1;
                  end;
 
writeln('W pliku jest ' ,krop, ' zdan zakonczonych kropka, ' ,wykrz,' zdan zakonczonych wykrzyknikiem, '
                        ,pyt, ' pytan i ' ,licz, ' liczb, a stosunek u do ' ,chr(162), ' wynosi ' ,uo,':',uz);
close(t);
 
readkey;
END.


Moim zadaniem było (cytuję dosłownie)

Cytat

"Napisz program oraz funkcję która policzy ile zdań nie lub kończy się kropką. funkcję która policzy ile zdań kończy się kropką, ile jest zdań bez cyfr. -ile jest liczb w pliku; Zapis i odczyt tekstu z pliku, zapis wyników do pliku. Funkcje która policzy stosunek 'ó' do 'u'."

Upraszczając: muszę napisać program, który wczyta plik i będzie zawierał funkcje liczące:
-zdania kończące się kropkami,
-zdania kończące się innymi znakami,
-zdania kończące się dwuznakiem '?!',
-zdania bez liczb,
-liczby w pliku,
-ilość 'u' oraz 'ó' i ich stosunek.

Znalazłem podobny kod do tego (dodałem swoje zmienne), ale mój problem polega na tym, że gdy program znajdzie cyfrę nie potrafię odwołać się do kolejnej pozycji (aby sprawdzić, czy kolejny znak również jest cyfrą); to samo w przypadku dwuznaku '?!'. Próbowałem robić coś na zasadzie a+1, jednak prawdopodobne problemy ze składnią uniemożliwiają kompilację.
Gdzieś w internetach wyczytałem, żeby kombinować coś z true/false, jednak nie wiem co i jak, bo nie potrafię odwołać się do kolejnej pozycji.
Kolejnym problemem jest to, że Pascal nie wyświetla 'ó', nawet jeśli wstawiam go jako znak ASCII.

Myślałem też, żeby zrobić to w trochę inny sposób, coś na zasadzie wczytania tekstu z pliku do zmiennej (lub zabawy z tablicą) typu string bez limitu znaków (gdzieś o takim cudzie wyczytałem), wtedy poszłoby już raczej bez problemów.

Wstawienie tego wszystkiego do funkcji również nie powinno sprawić mi problemów pod warunkiem, że będę miał już gotowy, działający program.

Jeśli ktoś byłby w stanie udzielić mi jakichś wskazówek (w końcu muszę nauczyć się tego sam), to byłbym wdzięczny :)