![]() |
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. |
AW: Erstellung einer Funktion
Und wo ist das Problem?
|
AW: Erstellung einer Funktion
Zitat:
Zitat:
|
AW: Erstellung einer Funktion
Wie sieht denn dein String, der der Funktion übergeben wird aus? Und was hast du schon an code?
|
AW: Erstellung einer Funktion
Zitat:
|
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); |
AW: Erstellung einer Funktion
Bitte bleibt beim Thema - eine Diskussion über die Vorgaben des Profs sind an dieser Stelle überflüssig.
|
AW: Erstellung einer Funktion
Zitat:
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:
Und wenn man Mo53 Fortschritte beobachtet, so scheint der gewählte Weg ja durchaus effektiv zu sein. |
AW: Erstellung einer Funktion
Du könntest in einem
Delphi-Quellcode:
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.
try ... except
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; |
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 01:39 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