AGB  ·  Datenschutz  ·  Impressum  







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

Erstellung einer Funktion

Ein Thema von Mo53 · begonnen am 3. Jun 2021 · letzter Beitrag vom 10. Jun 2021
Antwort Antwort
mmw
(Gast)

n/a Beiträge
 
#1

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 20:14
hallo,
der Fehler duerfte hier auftreten

 if number > longestNumber then longestNumber := number;


Gruß
  Mit Zitat antworten Zitat
Mo53

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

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 02:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#3

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 05:54
Moin...
Zitat:
Das Programm ist jetzt so gut wie fertig


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

Du machst das schon gut.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

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

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 08:17
Kanns grad nicht testen, aber in deiner repeat - Schleife löschst Du ein Zeichen deines Strings wenn es sich um eine Ziffer handelt und verkürzt anschließend deinen Zähler (run) trotzdem noch um 1. Somit überspringst du für den Fall, dass du bereits vorher eine Ziffer gelöscht hast, ein Zeichen in deinem string.
Delphi-Quellcode:
while endNotFound do
 begin
    repeat
      case s[run] of
        '0' .. '9': delete(s,run,1);
      end;
      dec(run);
    until run = 0 ;
   endNotFound := TRUE;
   end;
Ich würde das ganze mit einer for..do - Schleife lösen
Delphi-Quellcode:
for i = length(s) downto 0 do
  begin
  //prüfe hier, ob das betreffende Zeichen eine Ziffer ist, wenn ja. lösche es
  //damit prüfst du tatsächlich alle Zeichen deines Strings und überspringst durch das löschen keines
  end
Wie gesagt, ungetestet.

Edit:
Mist, zu langsam getippt
  Mit Zitat antworten Zitat
noisy_master

Registriert seit: 17. Jun 2009
Ort: Wolfenbüttel/Baddeckenstedt
263 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 08:16
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;
Dirk
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 08:39
Delphi-Quellcode:
while endNotFound do
 begin
  repeat
   case s[run] of
    '0' .. '9': delete(s,run,1);
   end;
   
   dec(run);
  until run = 0 ;

  endNotFound := TRUE;
 end;
Fällt dir denn da nichts auf, warum es nicht funktioniert?
  Mit Zitat antworten Zitat
Mo53

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

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 10:35
Ich hatte vergessen zu erwähnen das das Problem eine Fehlermeldung in der Ausgabe unten ist bei
Delphi-Quellcode:
''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;
Die Fehlermeldung wird genau bei 'deleteDigits(s) angezeigt und lautet: E2054 Ungültiger Typ in write/writeln Anweisung.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 10:54
Zitat:
Die Fehlermeldung wird genau bei 'deleteDigits(s) angezeigt und lautet: E2054 Ungültiger Typ in write/writeln Anweisung.
Schau mal genau hin.
von countDigits(s) bis longestnumber(s) hast du FUNKTIONEN, die etwas zurückgeben.
Diese Rückgabe kann Writeln darstellen.
Dein deleteDigits(s) ist aber nur eine PROZEDUR, die nichts zurückgibt, also kein Result hat.
Demzufolge kann Writeln nichts damit anfangen.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.513 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Erstellung einer Funktion

  Alt 4. Jun 2021, 14:09
Debuggen ist nicht erlaubt?
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:21 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