Skocz do zawartości


Zdjęcie

[delphi] program który wyświetla ilość występowania danej litery w pliku


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 program

program

    Nowy

  • 4 postów

Napisano 09 03 2008 - 17:45

Cześć wszystkim. Muszę napisać ten program na jutro tylko nie wiem jak. Prosze was o pomoc. Z góry dziękuje.

  • 0

#2 Marko_

Marko_

    Stały użytkownik

  • 279 postów

Napisano 09 03 2008 - 22:59

Może zaproponuję coś takiego dla aplikacji konsolowej - ważna jest idea którą w łatwy sposób możesz przenieść do aplikacji "okienkowej". Zabezpiecz przed brakiem, błędami odczytu z pliku np. (try ... finally ). Pisałem w notatniku więc przepraszam :turned: za błędy.


{$APPTYPE CONSOLE}uses  System;var  znak: char;  Src : File;  BytesRead,i,count: Integer;  Buff : array[0..1024] of Byte;begin  writeln('Podaj znak');  readln(znak);  count:=0;  AssignFile(Src, 'C:\jakis_plik.???');  Reset(Src, 1);  repeat    BlockRead(Src, Buff, 1024, BytesRead);    for i:=0 to bytesread do        if chr(buff[i])= znak then           inc(count);    until (BytesRead = 0);  CloseFile(Src);   Writeln('Znak ',znak,'   Wystapil w pliku ',inttostr(count),'  razy');  Readln;end.


  • 0

#3 program

program

    Nowy

  • 4 postów

Napisano 09 03 2008 - 23:10

napisałem coś takiego ale nie wiem co jest w nim nie tak

program Project1;{$APPTYPE CONSOLE}uses  SysUtils;varLitery:array [65..90] of integer;i,s:integer;plik:Text;nazwa_pliku:String;text:string;linia : string;znak:char;beginWriteln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!)');Read(nazwa_pliku);Assign(plik,nazwa_pliku);Reset(plik);while not EOF(plik) dobegin  read(plik,linia);  text:=  text+linia ;  while not eoln(plik) do  for i:=65 to 122 do    Litery[i]:=0;  for i:=1 to Length(text) do    Litery[ord(text[i])]:=Litery[ord(text[i])]+1;  for i:=65 to 122 do    if Litery[i]<>0 then      writeln(chr(i),' - ',Litery[i]);   end;close(plik); readln;end;end.

  • 0

#4 Marko_

Marko_

    Stały użytkownik

  • 279 postów

Napisano 10 03 2008 - 00:21

Hmm ... piszesz w Pascalu 7.0 skoro się upierasz to : proponuje odczytywać plik po bajcie - wiem trochę wolno ( i trochę prymitywnie), ale dla plików txt wystarczy. Jeśli nie chcesz używać "blockread" i innych funkcji Delphi to ok - napisz schemat programu w delphi to uzupełnie i poprawie (niestety nie mam go zainstalowanego by napisać od podstaw).

varLitery_count:array [65..90,0..0] of integer;i:integer;plik:file of byte;nazwa_pliku:String;znak:byte;beginWriteln('Podaj nazwe pliku, ktory chcesz otworzyc (pamietaj o rozszerzeniu!) i nacisnij ENTER');Readln(nazwa_pliku);Assign(plik,nazwa_pliku);Reset(plik);while not EOF(plik) do  begin    read(plik,znak);    if ((znak>=97)and(znak<=122))then       znak:=ord(upcase(chr((znak))));    if ((znak>=65)and(znak<=90))then       inc(litery_count[znak,0]);   end;for i:=65 to 90 do    writeln('Znak ',chr(i),'  Wystpil ',litery_count[i,0]);close(plik);readln;end.

A co jest źle w zaproponowanym przez ciebie programie:
Zamiast Read(path do pliku) użyj Readln(path do pliku)
text jest symbolem zastrzeżonym nie używaj go jako nazwa zmiennej.
Wczytujesz plik, czytasz linie i dalej co ? sprawdzasz czy kursor jest na końcu w pliku ?.
tu masz poprawne użycie funkcji eoln
http://4programmers.net/Delphi/Eoln
sory ale nie rozumiem logiki kolejnych poleceń. Jaki miałeś algorytm ??? :turned:

funkcje dotyczące operacji na plikach:
http://4programmers.net/Delphi/Pliki/Operacje

oraz na stringach:
moduł sysutils:
http://4programmers.net/Delphi/Modu%C5%82y/SysUtils
Dodatkowo w module system są ine polecenia odnośnie stringów.

Jeśli zaproponowany przeze mnie przykład nie jest tym właściwym, to opisz bliżej program, a postaram się pomóc :turned:
  • 0

#5 program

program

    Nowy

  • 4 postów

Napisano 10 03 2008 - 15:53

dzięki ze mi pomogłeś.

  • 0

Zobacz więcej tematów z tagiem: Delphi



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych