Skocz do zawartości
sinilotomasz

delphi jak napisać program który będzie liczył występowanie poszczególnych liter w pliku

Rekomendowane odpowiedzi

Muszę napisać ten program tylko nie wiem jak bo to dopiero mój początek z delphi prosze o pomoc.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A jaki delphi?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

I interesują Cię tylko litery z alfabetu... znaczy może dokładniej, polskie litery też? I czy liczby też?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Proste.

1) Wczytaj plik do jakiegoś Memo.

2) Zrób tablicę Integerów od a do z

3) Zrób procedurę jadącą forem przez wszystkie znaki Memo i podnoszącą o 1 konkretny element tablicy

 

Możesz też np. zrobić tablicę 0..255 i liczyć ew. wszystkie znaki.

 

A tak w ogóle to konsolowo czy okienkowo?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

tylko litery z alfabetu bez polskich

 

 

Proste.

1) Wczytaj plik do jakiegoś Memo.

2) Daj jakiegoś Edita czy coś, gdzie wpisujesz literę

3) Zrób tablicę Integerów od a do z

3) Zrób procedurę jadącą forem przez wszystkie znaki Memo i podnoszącą o 1 konkretny element tablicy

 

Możesz też np. zrobić tablicę 0..255 i liczyć ew. wszystkie znaki.

 

A tak w ogóle to konsolowo czy okienkowo?

 

 

okienkowo

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

var
  counts: array[65..90] of integer;

Procedura na naciśnięciu przycisku. Memo to pole z tekstem, Memo1 to pole z wynikami szukania.

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s:integer;
begin
  for i:=0 to length(Memo.Text)-1 do begin
    s:=Ord(Memo.Text[i]);
    if((s>96)and(s<123)) then s:=s-32;
    if((s>64)and(s<91)) then counts[s]:=counts[s]+1;
  end;
  for i:=65 to 90 do
    if(counts[i]>0) then begin
      Memo1.Text:=Memo1.Text+Chr(i)+' : '+IntToStr(counts[i]);
      Memo1.Lines.Add('');
    end;
end;

FormCreate:

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i:=65 to 90 do counts[i]:=0;
end;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Tak samo, tylko wczytujesz plik do stringa :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jak to bez procedury? :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Może bez osobnej procedury albo konsolowo, bo nie wiem jak inaczej :o

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Kurde, poszperaj w necie jak wygląda aplikacja konsolowa w Delphi i poszukaj jak wczytywać pliki. Nie mam teraz czasu tego pisać.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Prubowałem to zrobić tak ale mi coś nie wychodzi

 

program licz;

{$APPTYPE CONSOLE}

uses

SysUtils;

function zliczaj_litery(litera:char):integer;

 

var

Litery:array [65..122] of integer;

i:integer;

plik:Text;

nazwa_pliku:String;

 

Znak:Char;

linia : string;

licznik:integer;

 

begin

linia:=0;

Writeln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!)');

Readln(nazwa_pliku);

Assign(plik,nazwa_pliku);

Reset(plik);

while not EOF(plik) do

begin

read(plik,linia); // kopiowanie każdej linii dokumentu do zmiennej linia

For i:=1 to length(linia) do // badanie każdego znaku w linii

if (litery)=znak then inc(licznik) // jeśli znaleziono licznik zwiększamy

close(plik);

end.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Coś takiego:

program licz;
{$APPTYPE CONSOLE}
uses
SysUtils;

var
Litery:array [65..90] of integer;
i,s:integer;
plik:Text;
nazwa_pliku,text:String;

Znak:Char;
linia : string;
licznik:integer;

begin
Writeln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!)');
Readln(nazwa_pliku);
Assign(plik,nazwa_pliku);
Reset(plik);
while not EOF(plik) do
begin
read(plik,linia);
text:=text+linia;
end;
close(plik);
  for i:=0 to length(text)-1 do begin
    s:=Ord(text[i]);
    if((s>96)and(s<123)) then s:=s-32;
    if((s>64)and(s<91)) then litery[s]:=litery[s]+1;
  end;
  for i:=65 to 90 do
    if(litery[i]>0) then begin
      WriteLn(Chr(i),' : ',counts[i]);
    end;
end.

?

Nie sprawdzałem czy działa :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Bo zapomniałem zmienić counts na litery :P Weź przeczytałbyś chociaż a nie chamsko przekopiował...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×