Delphi-PRAXiS
Seite 2 von 6     12 34     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 16:44

AW: Erstellung einer Funktion
 
@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:)

Delphi.Narium 3. Jun 2021 16:52

AW: Erstellung einer Funktion
 
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;

Mo53 3. Jun 2021 17:17

AW: Erstellung einer Funktion
 
@Delphi.Narium da wird leider die Fehlermeldung ''nicht genügend wirkliche Parameter angezeigt''

Delphi.Narium 3. Jun 2021 17:42

AW: Erstellung einer Funktion
 
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;

Sinspin 3. Jun 2021 18:11

AW: Erstellung einer Funktion
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1490622)
In PascalScript funktioniert diese Variante:

Dir ist schon klar dass Du da gerade Hausaufgaben machst?
Ist klar, helfen macht Spass. Aber Hilfe zur Selbsthilfe ist besser. ....und macht übrigens auch Spass.

Im Studium habe ich öfter jemandem bei den Projekten geholfen. Leider auch ein paar mal so wie Du jetzt. Allerdings haben wir danach den Quelltext besprochen in der Hoffnung das etwas Verständnis aufkommt :wink:

Fritzew 3. Jun 2021 19:18

AW: Erstellung einer Funktion
 
Also schauen wir doch mal die Aufgabenstellung an:

„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.“

Daraus ergibt sich für mich als erstes:
Die Signatur der Funktion ist falsch müsste so aussehen:

Delphi-Quellcode:
function longestNumber(s : string) : string;
Ansonsten wird die Bedingung : „Gibt es mehrere gleich lange, wird davon die erste zurückgegeben“ nicht erfüllt.

Beispiele:
Input: „123 1234 12345 “ Result : „12345“
Input: „333 4444 5555 “ Result : „4444“ da erstes Vorkommen
Input : „ABCDEF“ : Result 0;

Und dann pseudo Code:
startfunc
Result ‚0‘
tempResult „“
Scheife 1 bis länge Input
Prüfe ob Input[schleife] ist eine Ziffer
Ja : hänge input[schleife] an tempresult;
Nein:
block
Wenn länge tempresult > länge result dann setze result auf tempresult
Tempresult wieder auf „“ setzen
endblock
Schleifenende
Noch einmal prüfen:
Wenn länge tempresult > länge result dann setze result auf tempresult
endfunc

mmw 3. Jun 2021 20:14

AW: Erstellung einer Funktion
 
hallo,
der Fehler duerfte hier auftreten

Delphi-Quellcode:
 if number > longestNumber then longestNumber := number;



Gruß

Mo53 4. Jun 2021 02:08

AW: Erstellung einer Funktion
 
Das Programm ist jetzt so gut wie fertig, ist nur noch ein kleines Problem bei der Ausgabe der Prozedur 'deleteDigits', ich habe herausgefunden das es so nicht zulässig ist, bin jedoch nach langem herumexperimentieren immernoch nicht darauf gekommen.

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) : 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;

 procedure deleteDigits(var s: string);
var
  run, number, savedRun, deleted: byte;
  endNotFound :boolean;
begin
  run := length(s);
  savedRun := length(s);
  endNotFound := TRUE;

  while endNotFound do
  begin
    repeat
      case s[run] of
        '0' .. '9': delete(s,run,1);
      end;
      dec(run);
    until run = 0 ;
    endNotFound := TRUE;
    end;
end;

procedure printInfos(s: string);
begin
  writeln('String: ', s, ' Ziffern: ', countDigits(s), ' Gerade: ',
    countEvenDigits(s), ' Ungerade: ', countOddDigits(s), ' Andere: ', countNonDigits(s),
    ' Längste: ',longestnumber(s),' Ohne: ',deleteDigits(s));
end;




begin
  write('Bitte Satz eingeben: ');
  readln(s);
  printInfos(s);
  readln;

end.

haentschman 4. Jun 2021 05:54

AW: Erstellung einer Funktion
 
Moin...:P
Zitat:

Das Programm ist jetzt so gut wie fertig
:thumb:

Info:
Zum Programmieren, egal welche Sprache, gehört zum Lernen ein Styleguide dazu. :wink:
Delphi: https://www.delphi-treff.de/object-pascal/styleguide/

Du machst das schon gut. :zwinker:

noisy_master 4. Jun 2021 08:16

AW: Erstellung einer Funktion
 
Zitat:

Zitat von Mo53 (Beitrag 1490636)
Das Programm ist jetzt so gut wie fertig, ist nur noch ein kleines Problem bei der Ausgabe der Prozedur 'deleteDigits', ich habe herausgefunden das es so nicht zulässig ist, bin jedoch nach langem herumexperimentieren immernoch nicht darauf gekommen.

Delphi-Quellcode:
procedure deleteDigits(var s: string);
var
  run, number, savedRun, deleted: byte;
  endNotFound :boolean;
begin
  run := length(s);
  savedRun := length(s);
  endNotFound := TRUE;

  while endNotFound do
  begin
    repeat
      case s[run] of
        '0' .. '9': delete(s,run,1);
      end;
      dec(run);
    until run = 0 ;
    endNotFound := TRUE;
    end;
end;

dürfte meiner Meinung nach für immer laufen, weil deine Bedingung für das while immer gültig bleibt....

ich würde es so versuchen:

Delphi-Quellcode:
procedure deleteDigits(var s: string);
var
  run byte;
begin
   for run := length(s) downto 1 do
     case s[run] of
       '0'..'9' : delete(s,run,1);
     end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 Uhr.
Seite 2 von 6     12 34     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