Autor Beitrag
hcg
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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:

ausblenden 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.

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 24.01.06 09:27 
Hallo,

kuerze solange den Satz um das erste Wort, bis nur ein Wort ueber bleibt.

Gruss Horst
Danny87
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: Di 24.01.06 09:33 
Bevor der Code nicht in Delphi-Tags steht, kann ich leider, leider, leider nicht helfen... :evil:


gruss daniel
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 24.01.06 09:37 
user profile iconKroko hat folgendes geschrieben:
Hier gibt es Code-Tags, wer soll denn das lesen :x :?:

user profile iconDanny87 hat folgendes geschrieben:
Bevor der Code nicht in Delphi-Tags steht, kann ich leider, leider, leider nicht helfen... :evil:

Überlegt Euch bitte mal, ob der Tonfall allgemein und einem Foren-Neuling gegenüber im speziellen tatsächlich angebracht ist. Ich erinnere mich an eine Diskussion, wo die schlechte Stimmung im Forum moniert wurde. Solche Äußerung heben die Stimmung bestimmt nicht.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
hcg Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 24.01.06 09:53 
Moin und :welcome: im Forum!

Bist du noch dabei oder haben wir dich schon "verschreckt"? :wink:

Also, wir helfen gerne, aber nur dann, wenn du auch Einsatz für dein Problem zeigst.

cu
Narses
Danny87
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: Di 24.01.06 10:01 
hier, so gehts. ist zwar nicht die eleganteste lösung, aber sie funktioniert:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
i := length(MeinString);
repeat
  dec(i);
until (MeinString[i]=' ') OR (i = 1);
LetztesWort := copy(MeinString, i{+1?}, 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 24.01.06 11:16 
Moin!

Den entscheidenden Tipp hat dir user profile iconHorst_H doch schon gegeben:
user profile iconHorst_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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: Di 24.01.06 11:21 
user profile iconNarses hat folgendes geschrieben:
Moin!

Den entscheidenden Tipp hat dir user profile iconHorst_H doch schon gegeben:
user profile iconHorst_H hat folgendes geschrieben:
kuerze solange den Satz um das erste Wort, bis nur ein Wort ueber bleibt.



genau das macht die funktion von mir. ;-)


gruss daniel
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 24.01.06 11:38 
Moin!

user profile iconDanny87 hat folgendes geschrieben:
genau das macht die funktion von mir.

Ja, wir haben ja jetzt gesehen, dass du das mit links coden kannst, toll. :roll: Möglicherweise hat user profile iconhcg das aber nicht verstanden, sonst hätte er doch nicht weiter gefragt, oder? :wink:

Wie sieht´s aus, user profile iconhcg, verstehen, das da passiert, oder abschreiben und vergessen? :wink:

cu
Narses
hcg Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 24.01.06 11:56 
NEin .. also gut ich hab das grad während Deutsch veruscht zu erarbeiten:
ausblenden 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 user profile iconTino: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 24.01.06 12:19 
Moin!

Finden wir doch erstmal raus, was der Code hier tut:
ausblenden 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); // Position des ersten Leerzeichens in S, oder 0
  if (PosLeer <> 0) then // wenn ein Leerzeichen drin ist, dann
    //     +-----------------------in diesem String Zeichen löschen
    //     |  +---------------------ab dem Leerzeichen
    //     v  v        v-------------bis zum Ende der Zeichenkette
    Delete(S, PosLeer, Length(S));
  Result := S; // das Funktionsergebnis ist der Rest in 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function Last(S: String): String;
  var
    PosLeer: Integer;
begin
  PosLeer := Pos(' ',S); // Position des ersten Leerzeichens in S, oder 0
  while (PosLeer <> 0) do // solange noch ein Leerzeichen in S ist...
    // lösche das erste Wort und bestimme PosLeer neu
  Result := S; // Rest ist das letzte Wort
end;

Jetzt müssen wir nur noch das erste Wort löschen können. Was Delete() tut wissen wir, also:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
//     +-------------in diesem String löschen
//     |  +-----------ab dem ersten Zeichen
//     v  v  v---------bis zum ersten Leerzeichen
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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 24.01.06 15:52 
Ich habs =):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function Last(S:string):string;
  begin
  while Pos(' ',S)>0 do
    S:=ButFirst(S);
  Result:=S;
  end;


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 29

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 :wink:
huhn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 272
Erhaltene Danke: 1

WIN XP
D7Pers
BeitragVerfasst: Di 24.01.06 17:20 
ich hab au mal sowas gemacht^^:
ausblenden volle Höhe Delphi-Quelltext
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:
//damit bekommt man die stelle von hinten her...
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;
//oder
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;
//dann kannste au no den ganzen text erst umdrehen xD
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;
//ach da gibts noch viel mehhhr möglichkeiten

die sachen sind mit gerade eingefallen, einiges ähnelt schon meinen vorgängern..
mfg huhn

_________________
Quod Erat Demonstrandum-Was zu beweisen war! *THX to Chrissivo!*