[Pascal] program zwracający ilość linii

ct985
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 13 paź 2011, o 20:36
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 71 razy

[Pascal] program zwracający ilość linii

Post autor: ct985 »

Mam problem z napisaniem programu, który dla danego pliku tekstowego zwróci liczbę linii zawierających więcej dużych liter niż małych. Próbuję zliczyć ilość małych i dużych liter ale nie wiem zupełnie jak porównać je w konkretnych wierszach i jeszcze je zsumować?

Kod: Zaznacz cały

program liczbalinii;

var p:text;

function liczba_linii(var plik:text):integer;
var l,k:integer; znak:char;
begin
  l:=0;
  k:=0;
  while not eof(plik) do begin
    while not eoln(plik) do begin
      read(plik, znak);
      if ( (znak>='a') and (znak<='z') ) then l:=l+1;
      if ( (znak>='A') and (znak<='Z') ) then k:=k+1;
    end;
    readln(p);
  end;
  liczba_linii:= ;
end;

begin
  assign(p,'plik.txt');
  reset(p);

  writeln('Liczba linii: ', liczba_linii(p));

  close(p);
  readln
end.
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[Pascal] program zwracający ilość linii

Post autor: adambak »

nie wiem skąd ta niepewność, dobrze Ci szło..

Kod: Zaznacz cały

program liczbalinii;

var p:text;

function liczba_linii(var plik:text):integer;
var szukane_linie,l,k:integer; znak:char;
begin
  szukane_linie:=0;
  while not eof(plik) do begin
    l:=0; k:=0;
    while not eoln(plik) do begin
      read(plik, znak);
      if ( (znak>='a') and (znak<='z') ) then l:=l+1;
      if ( (znak>='A') and (znak<='Z') ) then k:=k+1;
    end;
    if k>l then szukane_linie:=szukane_linie+1;
    readln(p);
  end;

  liczba_linii:=szukane_linie;
end;

begin
  assign(p,'plik.txt');
  reset(p);

  writeln('Liczba linii: ', liczba_linii(p));

  close(p);
end.
wiele to ja nie dodałem.. zauważ, że szukane_linie jest tutaj naszą szukaną wartością, więc domyślne ustawiam ją na zero na samym początku.. potem zmienne k, l są tak jakby lokalne dla każdej linii (bo w każdej linii chcemy wiedzieć ile jest liter małych oraz dużych) dlatego przed pętlą while not eoln ale w pętli while not eof zawsze na początku są zerowane, a potem zliczany w pętli while not eoln.. po przejściu tej pętli w zależności od spełnionej nierówności pomiędzy ilością tych liter zwiększamy naszą szukaną wartość lub nie i ją na końcu zwracamy w ostatniej linijce tej funkcji.. koniec
ODPOWIEDZ