Ilosc liter

0

Program ktory otwiera plik txt i liczy ilosc wystapienia kazdej z liter ..

Napisze ktoś takie coś ? . (Pascalu)

0

w delphi byłoby tak

var
text : string;
ile, i : integer;
begin
memo1.Lines.LoadFromFile('C:\plik.txt');
text := memo1.lines.text;
ile:=0;
for i:=1 to length(text) do if text[i]='z' then ile:=ile+1;
showmessage(inttostr(ile));
end; 
0

Nie wiem czy działa bo piszę z głowy bez Delphi...

var
i, k, licznik : Integer;
Buff: TStringList; // bufor

begin
Buff := TStringList.Create; 
Buff.Free;
for i := ORD('a') to ORD('z') do // wszystkie małe litery
begin
// rozpoczęcie zliczania kolejnej litery
Buff.LoadFromFile('C:/.....'); // załadowanie bufora

 for k := 1 to Length(Buff.Text) do
 begin
   if Buff.Text[k] = CHR(i) then licznik := licznik + 1;
 end;

 ShowMessage('Ilosc literek ' +string(CHR(i)) +' : ' + InToStr(licznik));

end;
0

A w Pascalu ? ;]]] bo jutro sprawdzian mam ..

0
var
i, k, licznik : Integer;
t: TextFile;
ch: char;

begin
Assign(t, 'C:\plik.txt');
Reset(t);

for i := ORD('a') to ORD('z') do // wszystkie małe litery
begin
licznik := 0;
// rozpoczęcie zliczania kolejnej litery

repeat
 Read(t, ch);
 if ch = CHR(i) then licznik := licznik + 1;
until EOF(t);

Reset(t);
Writeln('Ilosc literek ' +CHR(i) +' : ' + IntToStr(licznik));
end;
Close(t);
end;
0
type littab=packed array[char]of dword; // pascal : of longint;
procedure count(filename:string;var literki:littab);
const bufsize=16384;
var
  f:file;
  buf:packed array[0..bufsize-1]of char; // packed jest difoltowo dla pascala od wersji 5.5 do 7, ale może być.
  l:dword;  // tpascal: longint
  i:word;
begin
  fillchar(literki,1024,0);
  assignfile(f,filename); // assign(f) dla tp
  reset(f,1);
  l:=filesize(f);
  while longbool(l)do   // while(l>0)do dla pascala
    begin
      i:=bufsize;
      if(l<i)then i:=l;
      blockread(f,buf,i);
      dec(l,i);
      while wordbool(i)do // while(i>0)do  pascal
        begin
          dec(i);
          inc(literki[buf[i]]);
        end;
    end;
  closefile(f);  // close(f)- pascal
end;

var
  a:littab;
  i:char;
begin
  filemode:=0;  // readonly bo msdos.sys jest readonly
  count('c:\msdos.sys',a);
  for i:=^@ to #255 do
    if(i in[#65..#90,#97..#122])then
      writeln('znak',i,' tyle razy : ',a[i])
end.

// jeszcze jeden się o to zapyta a na prawdę umieszczę to w faq jako podstawowy algorytm

// umieść - będę mógł kasować więcej postów. [boks] - ŁF

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0