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
Seite 1 von 6  1 23     Letzte » 
Mo53

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

Erstellung einer Funktion

  Alt 3. Jun 2021, 15:39
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.
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
85 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 15:49
Und wo ist das Problem?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.913 Beiträge
 
#3

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 15:50
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

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

AW: Erstellung einer Funktion

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

Registriert seit: 6. Apr 2011
Ort: Berlin
2.830 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:02
Systematisch werden die Studenten bei euch wohl klein gehalten ...
Hast du studiert?
  Mit Zitat antworten Zitat
Mo53

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

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16: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
(Administrator)

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

AW: Erstellung einer Funktion

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

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

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:45
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

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

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 16:53
Du könntest in einem 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;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.911 Beiträge
 
Delphi 7 Professional
 
#10

AW: Erstellung einer Funktion

  Alt 3. Jun 2021, 17: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
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 08:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf