AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Erstellung einer Funktion

Ein Thema von Mo53 · begonnen am 3. Jun 2021 · letzter Beitrag vom 10. Jun 2021
Antwort Antwort
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 14:51
Wie sieht denn dein String, der der Funktion übergeben wird aus? Und was hast du schon an code?
  Mit Zitat antworten Zitat
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 15:18
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);
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 15:42
Bitte bleibt beim Thema - eine Diskussion über die Vorgaben des Profs sind an dieser Stelle überflüssig.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#4

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:05
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.
  Mit Zitat antworten Zitat
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:44
@runningsoft @Delphi.Narium Vielen Dank für eure Lösungsvorschläge, try und except, hatten wir noch nicht behandelt in den Vorlsungen deshalb bin ich mir da unsicher ob ich das benutzen darf, ich werde da mal nachfragen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#6

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:52
Eventuell könnte dashier schon reichen, ist aber ungetestet:
Delphi-Quellcode:
function longestNumber(s : string) : byte;
var run, number : byte;
  begin
    longestNumber := 0;
    number := 0;
    for run := 1 to length(s) do
    begin
      case s[run] of
       '0'..'9' : inc(number);
      else
        begin
          if number > longestNumber then longestNumber := number;
          number := 0;
        end;
      end;
    end;
    if number > longestNumber then longestNumber := number;
  end;

Geändert von Delphi.Narium ( 3. Jun 2021 um 17:39 Uhr) Grund: Text angepasst.
  Mit Zitat antworten Zitat
Mo53

Registriert seit: 16. Mai 2021
59 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 17:17
@Delphi.Narium da wird leider die Fehlermeldung ''nicht genügend wirkliche Parameter angezeigt''
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#8

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 17:42
An welcher Stelle wird der Fehler angezeigt?

In PascalScript funktioniert diese Variante:
Delphi-Quellcode:
function longestNumber(s : string) : byte;
var run, number : byte;
  begin
    Result := 0;
    number := 0;
    for run := 1 to length(s) do
    begin
      case s[run] of
       '0'..'9' : number := number + 1;
      else
        begin
          if number > Result then Result := number;
          number := 0;
        end;
      end;
    end;
    if number > Result then Result := number;
  end;
Oder alternativ:
Delphi-Quellcode:
function longestNumber(s : string) : byte;
var run, number, longNum : byte;
  begin
    longNum := 0;
    number := 0;
    for run := 1 to length(s) do
    begin
      case s[run] of
       '0'..'9' : inc(number);
      else
        begin
          if number > longNum then longNum := number;
          number := 0;
        end;
      end;
    end;
    if number > longNum then longNum := number;
    longestNumber := longNum;
  end;

Geändert von Delphi.Narium ( 3. Jun 2021 um 18:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz