AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Algorithmus

Ein Thema von Curby · begonnen am 23. Okt 2003 · letzter Beitrag vom 25. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
Curby

Registriert seit: 29. Sep 2003
17 Beiträge
 
#1

Algorithmus

  Alt 23. Okt 2003, 17:19
Kann jemand diese Frage beantworten?
Ich versteh zwar die Frage, weiß aber nicht, wie man sowas proggt.

Erstellen Sie einen Algorithmus, der in einem übergebenen Text die Häufigkeit eines übergebenen Zeichens bestimmt und zurückliefert. Schreiben Sie den Algorithmus als Pascal-Unterprogramm (Funktion und Prozedur)!
Notieren Sie zu beiden Unterprogrammen jeweils einen Aufruf in einem anderen Programmteil und die dazu notwendigen Variablendeklarationen.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Algorithmus

  Alt 23. Okt 2003, 17:30
Zitat:
Notieren Sie zu beiden Unterprogrammen jeweils einen Aufruf in einem anderen Programmteil und die dazu notwendigen Variablendeklarationen.
Wieso beiden ich sehe bloß eines!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#3

Re: Algorithmus

  Alt 23. Okt 2003, 17:44
Hrm. Ich würde da auch nur eine einzelne Funktion draus machen:

Delphi-Quellcode:
function GetCharCount(source: string; token: char): integer;
var
   i: integer;
begin
   result := 0;
   for i := 0 to length(source) - 1 do
      if source[i] = token then
         inc(result);
end;
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Algorithmus

  Alt 23. Okt 2003, 17:59
Delphi-Quellcode:
type
  TCharEntropie = array[Char] of Integer;

function CharEntropie(const Value: String): TCharEntropie;
var
  I: Integer;
begin
  FillChar(Result, SizeOf(Result));
  for I := 1 to Length(Value) do
    Inc(Result[Value[I]]);
end;

begin
  WriteLn( 'Häufigkeit von A ist ', CharEntropie('hAllAlilo')['A'] );
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Algorithmus

  Alt 23. Okt 2003, 18:01
Zitat von neolithos:
Zitat:
Notieren Sie zu beiden Unterprogrammen jeweils einen Aufruf in einem anderen Programmteil und die dazu notwendigen Variablendeklarationen.
Wieso beiden ich sehe bloß eines!
Auch wenns recht sinnlos ist, ich nehme an, das ist gemeint:
Zitat:
Schreiben Sie den Algorithmus als Pascal-Unterprogramm (Funktion und Prozedur)!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Algorithmus

  Alt 23. Okt 2003, 18:05
Wer lesen kann ist klar im Vorteil:

Delphi-Quellcode:
function CountChar(const asValue : String; acCh : Char) : Integer;
var I : Integer;
begin
  Result := 0;
  for I := 1 to Length(asValue) do
      if asValue[I] = acCh then
         Inc(Result);
end;
und

Delphi-Quellcode:
procedure CountChar(const asValue : String; acCh : Char; var iCount : Integer);
var I : Integer;
begin
  iCount := 0;
  for I := 1 to Length(asValue) do
      if asValue[I] = acCh then
         Inc(iCount);
end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Curby

Registriert seit: 29. Sep 2003
17 Beiträge
 
#7

Re: Algorithmus

  Alt 23. Okt 2003, 18:35
Ist "acCh" eine Variable oder ein fester Begriff?

"acCh : Char" --> "acCh := Char"
Fehlt da nicht das Gleichheitszeichen?
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#8

Re: Algorithmus

  Alt 23. Okt 2003, 18:40
Hoi,
acCh ist ein Zeichen(Char) und dieses wird deiner Funktion/Procedure übergeben.
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

Re: Algorithmus

  Alt 23. Okt 2003, 19:08
Erstellen Sie einen Algorithmus, der in einem übergebenen Text die Häufigkeit eines übergebenen Zeichens bestimmt und zurückliefert. Schreiben Sie den Algorithmus als Pascal-Unterprogramm (Funktion und Prozedur)!
Delphi-Quellcode:
Function CountChar(asValue: String; acCh: Char): Integer;
  Var I: Integer;

  Begin
    { Zeichen zählen }
    Result := 0;
    For I := 1 to Length(asValue) do
      If asValue[I] = acCh Then Inc(Result);
  End;

Procedure CountChar(asValue: String; acCh: Char; Var iCount: Integer);
  Var I: Integer;

  Begin
    { Zeichen zählen }
    iCount := 0;
    For I := 1 to Length(asValue) do
      If asValue[I] = acCh Then Inc(iCount);
  End;
Notieren Sie zu beiden Unterprogrammen jeweils einen Aufruf in einem anderen Programmteil und die dazu notwendigen Variablendeklarationen.
Delphi-Quellcode:
Procedure Test:
  Var asValue: String; { Variablendeklarationen }
    acCh: Char;
    iCount: Integer;

  Begin
    asValue := 'Test Test Test...'; { zu testender String  }
    acCh := 't'; { zu zählendes Zeichen }

    { Aufruf der Funktion }
    iCount := CountChar(asValue, acCh);

    { Aufruf der Prozedur }
    CountChar(asValue, acCh, iCount);

    { iCount = Anzahl der Zeichen }
  End;
***
Da aber nicht gesag wird, das auf Groß-/Kleinschreibung geachtet werden soll. Ist hier noch eine andere Lösung.
(Wenn z.B. nach "a" gesucht wird, werden alle "a" und "A" gezählt)
Delphi-Quellcode:
Function CountChar(asValue: String; acCh: Char): Integer;
  Var I: Integer;

  Begin
    { in Kleinschreibung umwandeln }
    acCh := LowerCase(acCh);
    asValue := LowerCase(asValue);
    { Zeichen zählen }
    Result := 0;
    For I := 1 to Length(asValue) do
      If asValue[I] = acCh Then Inc(Result);
  End;

Procedure CountChar(asValue: String; acCh: Char; Var iCount: Integer);
  Var I: Integer;

  Begin
    { in Kleinschreibung umwandeln }
    acCh := LowerCase(acCh);
    asValue := LowerCase(asValue);
    { Zeichen zählen }
    iCount := 0;
    For I := 1 to Length(asValue) do
      If asValue[I] = acCh Then Inc(iCount);
  End;

Procedure Test:
  Var asValue: String; { Variablendeklarationen }
    acCh: Char;
    iCount: Integer;

  Begin
    asValue := 'Test Test Test...'; { zu testender String }
    acCh := 't'; { zu suchendes Zeichen }

    { Aufruf der Funktion }
    iCount := CountChar(asValue, acCh);

    { Aufruf der Prozedur }
    CountChar(asValue, acCh, iCount);

    { iCount = Anzahl der Zeichen }
  End;
Das "VAR" in der Variablendeklarationen der Prozedur bestimmt das der nachfolgende Parameter geändert und übergeben werden kann. Das ist dazu, um den Wert (hier ist es Anzahl der gefunden Zeichen) aus der Prozedur heraus zu bekommen.
Wenn das "VAR" fehlt kannst du den Wert ändern wie du willst, bekommst ihn aber nie zurückgeliefert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Algorithmus

  Alt 24. Okt 2003, 08:14
Hallo,
ich habe hier noch einen Vorschlag
Delphi-Quellcode:
TSignArray = Array [0..255] of Double; // Entspricht dem Ordinalwert der ASCII-Zeichen

procedure TForm1.DoIt(aText: TStrings; var aArray: TSignArray);
var
  iCnt : Integer;
begin
  // Array löschen
  For iCnt:=Low(aArray) to High(aArray) do
    aArray[iCnt]:=0.0;
  // Berechne über den Ordinalwert des ASCII-Zeichens den Index im Array
  // und erhöhe den Wert an dieser Stelle um 1
  For iCnt:=1 to Length(aText.Text) do
    aArray[Ord(aText.Text[iCnt])]:=aArray[Ord(aText.Text[iCnt])]+1.0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArray : TSignArray;
  iCnt : Integer;
  Gesamt : Double;
begin
  DoIt(Memo1.Lines,MyArray);
  Gesamt:=0.0;
  // Berechne die Anzahl der Zeichen im Text
  Gesamt:=Length(Memo1.Lines.Text);
  // Die Anzahl eines einzelnen Zeichen geteilt durch die Gesamtanzahl
  // ergibt die Häufigkeit
  For iCnt:=Low(MyArray) to High(MyArray) do
    MyArray[iCnt]:=MyArray[iCnt]/Gesamt;
  // TChart befüllen
  Series1.Clear;
  For iCnt:=Low(MyArray) to High(MyArray) do
    Series1.Add(MyArray[iCnt],IntToStr(iCnt),clRed);

  Gesamt:=0.0;
  // Test, ob die Summe der Häufigkeiten 1 ergibt
  For iCnt:=Low(MyArray) to High(MyArray) do
    Gesamt:=Gesamt+MyArray[iCnt];
  ShowMessage(FloatToStr(Gesamt));

  // Rechne die Häufigkeiten in Prozent um
  For iCnt:=Low(MyArray) to High(MyArray) do
    MyArray[iCnt]:=MyArray[iCnt]*100;
  Gesamt:=0.0;
  // Test, ob die Summe der Häufigkeiten 100% ergibt
  For iCnt:=Low(MyArray) to High(MyArray) do
    Gesamt:=Gesamt+MyArray[iCnt];
  ShowMessage(FloatToStr(Gesamt));
end;
Der Algorithmus verwendet ein Array um die Anzahl der einzelnen zu ermitteln.
Dabei entspricht der Index im Array dem Ordinalwert des ASCII-Zeichens.
Jetzt kann für jedes Zeichen im Text der Ordinalwert berechnet werden. Dieser Ordinalwert wird als
Index für das Array verwendet, um den Wert an der Position um 1 zu erhöhen. Anschließend wird jedes Element im Array durch die Gesamtanzahl der Zeichen geteilt. Damit steht im Array die Häufigkeit des jeweiligen Zeichens. Über MyArray[Ord('a')] erhält man dann die Häufigkeit des Zeichens a.
Wüsste evt. jemand wie es noch schneller gehen könnte alle Häufigkeiten in einem Text zu berechnen?
Angehängte Dateien
Dateityp: zip abc.zip (274,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz