pomoc program delphi na zaliczenie

0

witam,
mam wielką prośbę - mam do napisania program w Delphi, a nie za bardzo wiem jak to zrobić.

Treść polecenia:
Zaprojektuj aplikację tworzącą spis liczb, liter i cyfr występujących w wybranym pliku tekstowym.

Interfejs programu powinien posiadać menu, w którym będą przyciski do:
*wyjścia z programu
*otwarcia okna z info o autorze i programie (wizytówka)
*otwarcia okna wyboru pliku tekstowego
*otwarcia pliku ze spisem liczb i liter(dane zapisz w tabelach)
*otwarcie okna wydruku.
W oknie z indeksami, indeksy powinny być wyświetlane alfabetycznie.
W oknie wydruku trzeba umieścić przycisk wydruku spisu i przycisk anulowania wydruku. Kod źródłowy musi być podzielony na sekcje.

Prezentacja programu odbywa się przy klasie. Kryteria oceny: pomysł, wykonanie, objaśnienie kodu źródłowego.

moje źródła to :
/////////////////////////////////////////////////////////////////////////////////////////////

program ascii;
uses crt;
var
a:integer;
b:char;
begin
clrscr;
writeln('Podaj cyfre kodu ASCII');
read(a);
writeln('Numer ',a,' w tabeli kodow ASCII to ',char(a));
if a>97 then writeln('Podales litere');
if a<97 then writeln('Nie podales litery');
readln;
readln;
end.



program ascii;
uses crt;
var
a:integer;
b:char;
znak:integer;
begin
clrscr;
writeln('Wprowadz jakis znak');
read(b);
znak:=ord(b);
writeln('Znak ',b,' w tabeli ASCII ma numer ',znak);
if ((znak>=97) and (znak<=122)) then writeln('Podales mala litere');
if ((znak>=65) and (znak<=90)) then writeln('Podales duza litere')
else writeln('Nie podales litery');
writeln('Podaj cyfre kodu ASCII');
read(a);
writeln('Numer ',a,' w tabeli kodow ASCII to ',char(a));
if ((a>=97) and (a<=122)) then writeln('Podales mala litere');
if ((a>=65) and (a<=90)) then writeln('Podales duza litere')
else writeln('Nie podales litery');
readln;
readln;
end.


if ((znak>=97) and (znak<=122)) then writeln('Podales mala litere')
else 
begin
if ((znak>=65) and (znak<=90)) then writeln('Podales duza litere')
else writeln('Nie podales litery');
end;

pytania :
jak napiać algorytm sprawdzający czy znak jest literą ,cyfrą lub znakiem specjalnym
jak zapisać wynik do pliku txt
jak wyświetlić go w tabeli na ekranie
jak wczytać dokument tekstowy do memo
czy może lepiej zamiast tabel użyć tego
załącznik :

0

Zaczne odpowiedź od ostatniego pytania (btw pytania to są zakonczone znakiem ? na ogół ;))...

czy może lepiej zamiast tabel użyć tego załącznik :
Załacznik nie zawiera kodu wszystkich modułów i formatek, poza tym zapisano projekt ze ściezkami względnymi w projekcie i należało by je zmienić na bezwzględne czyli w ogóle najlepiej bez ścieżki żeby Delphi czytało pliki z tego samego katalogu co plik *.dpr. Zdecydowanie polecam Tobie zrobić program okienkowy niż w konsoli, w której i tak ciężko będzie Tobie kodem z modułu Windows czy samym WinAPI zrobić drukowanie i inne rzeczy, które wygodniej się robi pod komponentami VCL. Można wykorzystać to co już masz w postaci tej formatki. Poza tym radzę zawsze formatować kod robiąć chociaż wcięcia, żeby się w nim ktoś mógł połapać. Jak nie umiesz sam to użyj programu z: http://olesio.eu/delfor .

jak napiać algorytm sprawdzający czy znak jest literą ,cyfrą lub znakiem specjalnym
Do sprawdzenia czy znak jest prawidłową cyfrą wykorzystaj procedurę Val, opisaną na: Val a do sprawdzenia czy jest znakiem specjalnym można wykorzystać zbiory opisane na: Zbiory .

jak zapisać wynik do pliku txt
Komponenty jak TMemo, TRichEdit czy TListBox ogólnie te przechowujące dane typu TStrings mają metodę SaveToFile jak i LoadFromFile. Jeżeli chcesz zapisać dane tekstowe z kilku editów to możesz je dodać do niewizualnego obiektu typu TStringList albo stworzyć plik typowany ze statystykami gdzie zapiszesz same liczby korzystając najlepiej z typu TStream. Więcej informacji znajdziesz bez problemów w google. Poszukaj i pokombinuj sam.

jak wyświetlić go w tabeli na ekranie
Jak wyżej co wpiszesz na przykład w TMemo to się wyświetla. A jeżeli chcesz zwykły tekst załadowac z pliku to Lines.LoadFromFile lub Items.LoadFromFile. Chociaż nie wiem co za tabelę masz na myśli, sprecyzuj o jaki komponent Tobie chodzi. Bo tabela to raczej pojęcie kojarzące mi się z relacyjnymi bazami danych.

jak wczytać dokument tekstowy do memo
Tak jak wspomniałem...

  NazwaMemo.Lines.LoadFromFile('nazwa_pliku.txt');
0

Program prawie mam, wyświetla znaki, cyfry, litery i liczy itd. Użyłem do tego tabeli ASCII. Jeżeli robię tablicę 255 elementową to nie pokazuje mi wszystkiego czyli polskich znaków (ą, ś, ć itd.). Czy ktoś może zobaczyć co jest nie tak? (tabela jest od 32 do 126 znaków).
Program jest w załączniku.

0

Nie patrzę do załącznika, ale zadanie zliczania i pokazania tego jako statystyk jest banalne. Zgodnie z tręścią zadania znaki pewnie muszą być powyżej spacji, bo tylko litery i cyry oraz pozostałe znaki. Ja bym to zrobił tak, jak wkleiłem poniżej i działa. Bo skoro ma to powstać w VCL pod Delphi, to dlaczego by nie skorzystać z gotowych komponentów i ich własności pozwalającej na przechowywanie obiektów. A wiadomo, że taki typ jako Integer można przechować bez tworzenia klasy jako TObject - rzutując na niego. A i proste sortowanie też masz zaimplementowane.

//...
function GetIndexOf(SL : TstringList; AText : string) : integer;
var
  I : integer;
begin
  Result := -1;
  for I := 0 to SL.Count - 1 do
  begin
    if SL[I] = AText then
    begin
      Result := I;
      Break;
    end;
  end;
end;

function CompareItems(List : TStringList; Index1, Index2 : integer) : integer;
begin
  Result := AnsiCompareText(List[Index1], List[Index2]);
end;

function CountChars(AText : string) : TStringList;
var
  I, X, Cnt : integer;
begin
  Result := TstringList.Create;
  for I := 1 to Length(AText) do
  begin
    X := GetIndexOf(Result, AText[I]);
    if AText[I] > #32 then
    begin
      if X = -1 then
      begin
        Result.AddObject(AText[I], TObject(Integer(1)));
      end
      else
      begin
        Cnt := Integer(TObject(Result.Objects[X]));
        Cnt := Cnt + 1;
        Result.Objects[X] := TObject(Integer(Cnt));
      end;
    end;
  end;
  Result.CustomSort(CompareItems);
end;

procedure ShowStats(SL : TstringList);
var
  S : string;
  I, Cnt : integer;
begin
  if SL.Count > 0 then
  begin
    S := '';
    for I := 0 to SL.Count - 1 do
    begin
      Cnt := Integer(TObject(SL.Objects[I]));
      if I < SL.Count - 1 then
      begin
        S := S + 'Znak: "' + SL[I] + '" - ilośc wystąpień: ' + IntToStr(Cnt) + #13#10;
      end
      else
      begin
        S := S + 'Znak: "' + SL[I] + '" - ilośc wystąpień: ' + IntToStr(Cnt);
      end;
    end;
    MessageBox(Application.Handle, PChar(S),
      PChar(Application.Title), MB_ICONINFORMATION + MB_OK);
  end
  else
  begin
    MessageBox(Application.Handle, 'Statystyki są puste! Brak tekstu?',
      PChar(Application.Title), MB_ICONWARNING + MB_OK);
  end;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  SL : TstringList;
begin
  SL := CountChars(Memo1.Text);
  ShowStats(SL);
  SL.Free;
end;

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