| Autor |
Beitrag |
hcg
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 24.01.06 09:16
Hi!
Also ich habe seit September Informatik und habe nun eine Aufgabe bekommen, eine Funktion zu schreiben die das letzte Wort eines Satzes ausgibt ( bzw. das letzte Leerzeichen dieses Satzes ausgibt).
Wir haben schon 2 Funktionen die :
a) Sie gibt das erste Wort eines Satzes aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function First(s:string):string var Posleer:Integer begin Posleer:=Pos(' ',S) if(Posleer <>0) then Delete (S,Posleer,Length(S); Result:=S end; |
(^^ so in etwa...)
Die 2. Funktion gibt den restlichen Satz aus , jedoch nicht das 1.Wort.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function ButFirst (s:string):string; var Posleer:Integer begin Posleer:= Pos (' 's); if (Posleer <>0)then Delete (S,1,Posleer) Result:=S; end; |
Sooo jetzt hab ich bis heute folgende Aufgabe: Ich soll eine Fkt. schrieben die das letzte Wort ausgibt. Es ist echt dringend und ich habe leider keine Idee.
Danke im Vorraus..
lg !
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Di 24.01.06 09:17
Hier gibt es Code-Tags, dann kann man dies viel besser lesen !
//EDIT: Die Aufgabe wurde doch sicherlich gestellt, damit ihr lernt, wie man sich Gedanken über ein Problem macht und dieses löst., Also mache ein Vorschlag für die funktion, erstelle sie, teste sie und wenn es dann nicht funktioniert, helfe ich gern!
mfg
//EDIT2: Tonfall
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
Zuletzt bearbeitet von Kroko am Di 24.01.06 09:54, insgesamt 1-mal bearbeitet
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 24.01.06 09:27
Hallo,
kuerze solange den Satz um das erste Wort, bis nur ein Wort ueber bleibt.
Gruss Horst
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: Di 24.01.06 09:33
Bevor der Code nicht in Delphi-Tags steht, kann ich leider, leider, leider nicht helfen...
gruss daniel
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 24.01.06 09:37
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
hcg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 24.01.06 09:48
Sry!
das mit den Tags hab ich nicht gewusst ... werd es mir für die Zukunft merken!
Natürlich wurde die Aufgabe gestellt und das seit letztem Dienstag. Ich habe jetzt eine Woche versucht das Problem zu lösen und bin zu keiner Lösung gekommen, deswegen war die Frage hier im Forum auch die letzte Option die mir eingefallen ist.
lg
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: Di 24.01.06 09:48
Der is neu?
Oh, sry, das hab ich net gesehn.
Entschuldigung hcg
| Christian S. hat folgendes geschrieben: | | Überlegt Euch bitte mal, ob der Tonfall allgemein(...) |
Ich hab das nicht böse gemeint, sondern eher ironisch.
gruss daniel
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 24.01.06 09:53
Moin und  im Forum!
Bist du noch dabei oder haben wir dich schon "verschreckt"?
Also, wir helfen gerne, aber nur dann, wenn du auch Einsatz für dein Problem zeigst.
cu
Narses
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: Di 24.01.06 10:01
hier, so gehts. ist zwar nicht die eleganteste lösung, aber sie funktioniert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function Last(s : string) : string; var bEnabled : boolean; begin bEnabled := true;
while bEnabled do begin if pos(' ',s) > 0 then delete(s,1,pos(' ',s)) else begin result := s; bEnabled := false; end; end; end; |
gruss daniel
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 24.01.06 10:17
Ab und zu ist es besser, wenn man sich nicht nur auf die mitgelieferten Funktionen verlässt, sondern was eigenes macht. Wieso vorne anfangen, wenn man was am Ende sucht?
Delphi-Quelltext 1: 2: 3: 4: 5:
| i := length(MeinString); repeat dec(i); until (MeinString[i]=' ') OR (i = 1); LetztesWort := copy(MeinString, i, length(MeinString)-i); | Zu machen ist hier noch ein Abfangen, wenn evtl. MeinSring mit mehreren Leerzeichen aufhört (z.B. eine boolsche Variable CharGefunden verwenden) und wenn der String nur aus einem Zeichen besteht, geht das auch noch in die Hose.
_________________ We are, we were and will not be.
|
|
hcg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 24.01.06 10:56
Hmm da sind Elemente dabei die ich noch nicht gelernt habe...
Der Tipp des Lehrers war, wir sollen uns die ButFirst Fkt. anschaun und das irgendwie ableiten oder so ...
lg!
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 24.01.06 11:16
Moin!
Den entscheidenden Tipp hat dir Horst_H doch schon gegeben:
Horst_H hat folgendes geschrieben: | | kuerze solange den Satz um das erste Wort, bis nur ein Wort ueber bleibt. |
Versuch doch das mal umzusetzen und zeig den Code, wenn er nicht funktioniert, dann können wir da weitermachen, wo du bist.
cu
Narses
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: Di 24.01.06 11:21
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 24.01.06 11:38
Moin!
Danny87 hat folgendes geschrieben: | | genau das macht die funktion von mir. |
Ja, wir haben ja jetzt gesehen, dass du das mit links coden kannst, toll.  Möglicherweise hat hcg das aber nicht verstanden, sonst hätte er doch nicht weiter gefragt, oder?
Wie sieht´s aus, hcg, verstehen, das da passiert, oder abschreiben und vergessen?
cu
Narses
|
|
hcg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 24.01.06 11:56
NEin .. also gut ich hab das grad während Deutsch veruscht zu erarbeiten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| function Last(s:string):string var Posleer:Integer begin if Posleer <>0 then Delete (S,Posleer,Length(S); else |
Ja und jetzt steck ich irgendwie in der Schleife die solange die Wörter löscht bis nur mehr eins übrig ist.. Aber keine Ahnung ob das da oben auch nur ansatzweise funktionieren kann...
lg
Moderiert von Tino: Code- durch Delphi-Tags ersetzt
^
EDIT: Sry dachte das ist das normale Code Tag.
Naja muss jetzt vom Laptop gehen .. keine Ahnung ob ichs bis zur Informatik Std. wieder hier her schaffe.. Danke auf jedenfall!
Zuletzt bearbeitet von hcg am Di 24.01.06 12:00, insgesamt 1-mal bearbeitet
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: Di 24.01.06 11:59
hmm... ich seh da keine schleife. wird die funktion in einer schleife aufgerufen?
//Edit: mit deinem Code löscht du alles ausser das erste wort.
- Posleer ist nicht initialisiert.
gruss daniel
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 24.01.06 12:19
Moin!
Finden wir doch erstmal raus, was der Code hier tut:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function First(S: String): String; var PosLeer: Integer; begin PosLeer := Pos(' ',S); if (PosLeer <> 0) then Delete(S, PosLeer, Length(S)); Result := S; end; |
Du willst jetzt das letzte Wort haben. Wir haben schon festgestellt, dass du solange Wörter löschen musst, bis nur noch eins über ist. Woran erkennt man, dass nur noch ein Wort über ist? Wenn kein Leerzeichen mehr in S ist, dann kann nur noch ein Wort über sein. Also, Grundgerüst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function Last(S: String): String; var PosLeer: Integer; begin PosLeer := Pos(' ',S); while (PosLeer <> 0) do Result := S; end; |
Jetzt müssen wir nur noch das erste Wort löschen können. Was Delete() tut wissen wir, also:
Delphi-Quelltext 1: 2: 3: 4:
| Delete(S, 1, PosLeer); |
Damit solltest du alles bei der Hand haben, um die Funktion zusammenstellen zu können. Dann füge mal statt dem hervorgehobenen Kommentar in der Funktion Last() den nötigen Code ein und zeig das Ergebnis in deinem nächsten Posting.
cu
Narses
|
|
hcg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 24.01.06 15:52
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 24.01.06 16:02
womit endet denn ein satz ? mit einem satzzeichen, von da aus gehst du zurück zum letzten leerzeichen und du hast dein wort 
|
|
huhn
      
Beiträge: 272
Erhaltene Danke: 1
WIN XP
D7Pers
|
Verfasst: Di 24.01.06 17:20
ich hab au mal sowas gemacht^^:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| function backpos(searchstr:char;source:string):integer; var i:integer; begin for i := length(source) downto 1 do if source[i] = searchstr then begin result := i; exit; end; end; function laststring(source:string; searchchar:char):string; var i:integer; begin result:=source; for i:=length(result) downto 1 do if result[i] = searchchar then begin delete(result,1,i); exit; end; end; function ls2(source:string; searchchar:char):string; var i:integer; temp:string; begin setlength(temp,length(source)); for i:=length(source) downto 1 do temp[length(source)-i+1]:=source[i]; delete(temp,pos(searchchar,temp),length(temp)); showmessage(temp); setlength(result,length(temp)); for i:=length(temp) downto 1 do result[length(temp)-i+1]:=temp[i]; end; |
die sachen sind mit gerade eingefallen, einiges ähnelt schon meinen vorgängern..
mfg huhn
_________________ Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*
|
|