Ich bezweifle das deine Anwendung so richtig funktioniert.
Deine Variablen für die Summen werden nicht mit 0 initialisiert, bevor du mit dem Zählen beginnst.
Die Ausgabe der Prozente erfolgt zum Teil gerundet, zum Teil werden einfach die Kommastellen abgeschnitten.
Hier mal ein Beispiel nicht getestet:
Delphi-Quellcode:
{Funktionalität von der Oberfläche trennen, eventuell eigene Unit}
type
TBuchstabenSumme =
array['
A'..'
Z']
of integer;
function ZaehleBuchstaben(
const AText:
string;
out ASumme: TBuchstabenSumme): integer;
var
i: integer;
c: Char;
begin
{Anzahl der Zeichen zurückgeben}
Result := Length(AText);
{Anfangswerte für die Summen auf 0 setzen}
for c := Low(ASumme)
to High(ASumme)
do
ASumme[c] := 0;
{die entsprechende Summe für jedes gültige Zeichen im Text erhöhen}
for i := 1
to Result
do
begin
c := UpCase(AText[i]);
if (c >= Low(ASumme))
and (c <= High(ASumme))
then
Inc(ASumme[c], 1);
end;
end;
procedure TForm1.startClick(Sender: TObject);
var
Zeichen: integer;
Summe: TBuchstabenSumme;
y: Integer;
c: Char;
begin
{Eingabeparameter an die Funktion übergeben und Ergebnis übernehmen}
Zeichen := ZaehleBuchstaben(Eeingabe.Text, Summe);
{Ergebnisausgabe}
Ezeichen.Caption:= IntToStr(Zeichen);
{mit erster Zeile im Memo beginnen, ein Grid wäre vieleicht besser}
y := 0;
for c := Low(Summe)
to High(Summe)
do
begin
memo3.Lines[y] := c + '
: ' + IntToStr(Summe[c]);
memo4.Lines[y] := IntToStr(Round((100 * Summe[c]) / Zeichen)) + '
%';
Inc(y);
end;
end;