Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Erstellung einer Funktion (https://www.delphipraxis.net/208065-erstellung-einer-funktion.html)

Mo53 3. Jun 2021 14:39

Erstellung einer Funktion
 
Hallo, ich muss für die Uni eine Anzahl von Funktionen mit Testteil erstellen, eine Funktion davon macht mir das Leben Schwer und ich komm nicht drauf wie ich dies erstellen könnte. Arrays darf ich noch nicht verwenden.
Hätte jemand eine Idee.

function longestNumber(s : string) : word;

Sucht die längste Ziffernfolge (aus Ziffern von '0' bis '9') im String s. Gibt es mehrere gleich lange, wird davon die erste zurückgegeben. Sind keine Ziffern enthalten, gibt die Funktion den Wert 0 zurück.

Hinweis: Die längste Ziffernfolge muß nicht unbedingt die größte Zahl in s sein! Eine so gefundene Ziffernfolge darf auch mit einer oder mehreren '0' beginnen.

Monday 3. Jun 2021 14:49

AW: Erstellung einer Funktion
 
Und wo ist das Problem?

DieDolly 3. Jun 2021 14:50

AW: Erstellung einer Funktion
 
Zitat:

Zitat von Monday (Beitrag 1490601)
Und wo ist das Problem?

Zitat:

Arrays darf ich noch nicht verwenden.
Da fängt es schon an. Mir persönlich wäre es herzlich egal was man darf und was nicht. Systematisch werden die Studenten bei euch wohl klein gehalten ...

runningsoft 3. Jun 2021 14:51

AW: Erstellung einer Funktion
 
Wie sieht denn dein String, der der Funktion übergeben wird aus? Und was hast du schon an code?

TiGü 3. Jun 2021 15:02

AW: Erstellung einer Funktion
 
Zitat:

Zitat von DieDolly (Beitrag 1490602)
Systematisch werden die Studenten bei euch wohl klein gehalten ...

Hast du studiert?

Mo53 3. Jun 2021 15:18

AW: Erstellung einer Funktion
 
Ich habe die anderen Funktionen bis zu der oben genannten schonmal erstellt, bin dann bei der Funktion hängen geblieben.
Der String der der Funktion übergeben wird wäre z.B. 123Hallo65378

Delphi-Quellcode:
{$APPTYPE CONSOLE}

{$R+,Q+,X-}

uses
  System.SysUtils;

var
  s : string;

function countDigits(s : string) : byte;
var run , number : byte;
  begin
    number := 0;
    for run := 1 to length(s) do
    begin
      case s[run] of
       '0'..'9' : inc(number);
      end;
      countDigits := number;
    end;
  end;

function countEvenDigits(s : string) : byte;
var run , number : byte;
  begin
    number := 0;
    for run := 1 to length(s) do
      begin
        case s[run] of
          '0','2','4','6','8' : inc(number);
        end;
        countEvenDigits := number;
      end;
  end;

function countOddDigits(s : string) : byte;
var run , number : byte;
  begin
    number := 0;
    for run := 1 to length(s) do
      begin
        case s[run] of
          '1','3','5','7','9' : inc(number);
        end;
        countOddDigits := number;
      end;
  end;

function countNonDigits(s : string) : byte;
var run, number : byte;
  begin
    number := length(s);
    for run := 1 to length(s) do
      begin
        case s[run] of
          '0'..'9' : dec(number);
        end;
        countNonDigits := number;
      end;
  end;

function longestNumber(s : string) : word;
var run , number : byte;
    zifferGefunden : boolean;
begin
  number := 0;
  zifferGefunden := FALSE;
  for run := 1 to length(s) do
    begin

    end;
    longestNumber := number;
end;



begin
  write('Bitte satz eingeben');
  readln(s);
  writeln('Ziffern: ',countDigits(s));
  writeln('gerade Ziifern: ',countEvenDigits(s));
  writeln('ungerade Ziffern: ',countOddDigits(s));
  writeln('zählt keine Ziffern von 0 bis 9: ',countNonDigits(s));
  readln;

end.



procedure deleteDigits(var s : string);
procedure printInfos(s : string);

Daniel 3. Jun 2021 15:42

AW: Erstellung einer Funktion
 
Bitte bleibt beim Thema - eine Diskussion über die Vorgaben des Profs sind an dieser Stelle überflüssig.

Delphi.Narium 3. Jun 2021 15:45

AW: Erstellung einer Funktion
 
Zitat:

Zitat von DieDolly (Beitrag 1490602)
Zitat:

Zitat von Monday (Beitrag 1490601)
Und wo ist das Problem?

Zitat:

Arrays darf ich noch nicht verwenden.
Da fängt es schon an. Mir persönlich wäre es herzlich egal was man darf und was nicht. Systematisch werden die Studenten bei euch wohl klein gehalten ...

Es geht um systematisches Lernen und nicht um einfach: Mach mal was, mal sehen was rauskommt und wenn nix rauskommt ist auch egal.

Es geht halt darum das Programmieren zu lernen. Hier wird halt zufällig Delphi genutzt.

Nach Abschluss des Studiums soll die Fähigkeit zu programmieren so ausgebildet sein, dass die Programiersprache, die Entwicklungsumgebung, ... absolut nachrangig ist.
Es geht darum Aufgabenstellungen, Probleme, ... zu analysieren und diese dann mit den jeweils zur Verfügung stehenden Mitteln zu lösen. Und da hilft es durchaus, nicht immer nur den gerade einfachsten Weg zu gehen, sondern auch mal einen komplizierten, um eben auch mal die über den Tellerrand zu schauen.

Und bei der momentanen Aufgabenstellung ist der vorgegebene Weg eventuell ja nicht unbedingt der einfachste, aber der Lerneffekt, zu dem die erfolgreiche Lösungssuche führt, dürfte deutlich höher sein.

Immer dieses unreflektierte Rumpöbeln gegen alle Bildungseinrichtungen, jedwedes Lehrpersonal, ... ist einfach nur ätzend.

Zitat:

Zitat von TiGü (Beitrag 1490605)
Zitat:

Zitat von DieDolly (Beitrag 1490602)
Systematisch werden die Studenten bei euch wohl klein gehalten ...

Hast du studiert?

Vermutlich nicht, sonst würde sie verstehen, warum so vorgegangen wird, wie wir es momentan bei Mo53s "Studienbeleitung" erleben.

Und wenn man Mo53 Fortschritte beobachtet, so scheint der gewählte Weg ja durchaus effektiv zu sein.

runningsoft 3. Jun 2021 15:53

AW: Erstellung einer Funktion
 
Du könntest in einem
Delphi-Quellcode:
try ... except
Block zeichenweise prüfen, ob das betreffende Zeichen in deinem string eine Ziffer ist oder nicht, und mitzählen, wieviele Ziffern du bereits aufeinanderfolgend hattest.
Kommst du auf eine Nicht-Ziffer, setzt du deinen Zähler wieder auf 0 zurück.

Hier mein Lösungsvorschlag:

Delphi-Quellcode:
function longestNumber(s : string) : word;
var run , number, tempresult, ziffer : byte;
    zifferGefunden : boolean;
    test : string;
begin
  number := 0;
  tempresult := 0;
  zifferGefunden := FALSE;
  for run := 1 to length(s) do
    begin
    test := s[run];
    try
    ziffer := strtoInt(test);
    inc(tempresult);
    if number < tempresult then
      number := tempresult;
    except
    tempresult := 0;
    end;
    end;
  longestNumber := number;
end;

Delphi.Narium 3. Jun 2021 16:05

AW: Erstellung einer Funktion
 
Versuch' bitte mal vom Prinzip sowas in der Art:

Die Funktion bekommt den String übergeben, dann gehst Du in einer Schleife darüber, solange ein Zeichen keine Zahl ist, wird es ignoriert.

Ist es eine Zahl, so wird das Zeichen an eine Variabel angehängt, so dass diese Variabel dann alle Ziffern enthält, bis das erste Zeichen kommt, das keine Ziffer ist.

Erhälst Du nun bei weiterem Fortlauf über die Zeichenfolge wieder eine Ziffer, so wird in einer weiteren Variabel wie oben vorgegangen. Beim ersten Zeichen, das keine Ziffer ist, wird nun eine "Zwischenprüfung" gemacht, indem Du die Variabeln mit den Zeichenfolgen vergleichst, nach Länge ...

Der Inhalt der Variabel, die hier als kleiner herauskommt kann verworfen werden und die Variabel für die nächste (eventuell vorhanden) Ziffernfolge genutzt werden.

Du brauchst also zur übergebenen Zeichenfolge und der Laufvariabel für die Schleife, noch zwei Stringvariabel, in denen Du die bisher längste und die gerade aktuelle Ziffernfolge vorhälst.

Eine Abwandlung bzw. Erweiterung Deiner Funktion countDigits könnte da schon ausreichend sein, sie muss sich halt zusätzlich noch die Ziffernfolgen merken und deren Vergleich durchführen. Das case ... end benötig dazu "nur" einen Else-Zweig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.
Seite 1 von 6  1 23     Letzte »    

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