Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi verschachtelte schleifen (https://www.delphipraxis.net/84425-verschachtelte-schleifen.html)

baala 16. Jan 2007 19:08


verschachtelte schleifen
 
Hallo ihr,
ich habe ein kleines Problem. und zwar: ich schreibe morgen eine Arbeit über Delphi.
Ich befürchte, dass in der Arbeit verschachtelte for schleifen zu einsatz kommen, nur habe ich leider
nicht viel ahnung, wie ich eine solche schreiben kann.
Ich habe die Aufgabe einmal eingescannt: http://img413.imageshack.us/img413/2603/fragebj3.jpg

Es gibt noch ein paar lustige sachen!
1. das mit stringreplace zu machen, sollen wir nicht, so wollte ich das zu erst machen
2. Ich habe das ganz programm schon geschrieben, nur halt nicht mit der verschachtelung:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
buh,dat:string;
begin
dat:='';
for i:=1 to length(edit1.text) do
begin
buh:=copy(edit1.text,i,1);
if buh=edit2.text then
dat:=dat+edit3.text
else dat:=dat+copy(edit1.Text,i,1) ;
end;
edit1.text:=dat;
end;
//ich hatte das programm etwas erweitert:in edit1 kommt das wort rein, in edit2,dass gesuchte zeichen und in edit3, dass zeichen welche für das zeichen aus edit2 eingesetzt werden soll

Geht auch gut, nur solle ich das so nicht machen.

3. Das mit der verschachtelung geht nicht richtig!
Der Lehrer hat das uns gezeigt und bei langen wörtern, bzw vielen ö's,
hat das Programm nicht richtig funktioniert, nur sollen wir das trotzdem so machen...

Ich hoffe ihr hab eine Idee, wie das funktionieren kann :)

Grüß
Baal


//upps, hatte das bild vergessen :(

3_of_8 16. Jan 2007 19:13

Re: verschachtelte schleifen
 
1. Schreib dir ne eigene Replace-Funktion, geh per For-Schleife durch und ersetze alle Zeichen oder such sie dir mit PosEx raus.

2. Wozu Verschachtelung?

3. Alle Standard-Stringroutinen sind auf ASCII ausgelegt, wenn du Umlaute brauchst, musst du schauen ob es die Routine auch für ANSI gibt.

baala 16. Jan 2007 19:17

Re: verschachtelte schleifen
 
das ist ja das problem, ich muss diese verschachtelung haben.
ich würde das auch gerne ohne machen, nur brauch ich das ganze für die arbeit und wenn ich das da nicht habe, hab ich ein problem.
das hauptproblem ist, ich kann mir nicht wirklich vorstellen wie das mit einer verschachtelung gehen soll. bzw wie so eine überhaupt aussieht :(

3_of_8 16. Jan 2007 19:18

Re: verschachtelte schleifen
 
Das ist doch Unsinn.

Soll man jetzt da wirklich sinnloserweise eine zweite Schleife reinbauen, obwohl es absolut nichts bringt? Versteh einer die Lehrer... :gruebel:

EDIT: Mein Ansatz wäre so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var I:integer;
    str: String;
    oldchar, newchar: Char;
begin
str:=edit1.text;
oldchar:=edit2.text[1];
newchar:=edit3.text[1];
for I:=1 to length(str) do
  if AnsiCompareText(str[I], oldchar)=0 then str[I]:=newchar;
edit1.text:=str;
end;

Tormentor32 16. Jan 2007 19:19

Re: verschachtelte schleifen
 
Also aussehen kann ein verschachtelte schleife zum Beispiel so:
Delphi-Quellcode:
var i,j: integer;
begin
  for i := 1 to 10 do
    for j := 1 to 20 do
      begin
        //...irgendwas
      end;
end;

baala 16. Jan 2007 19:24

Re: verschachtelte schleifen
 
Zitat:

Zitat von 3_of_8
Das ist doch Unsinn.

Soll man jetzt da wirklich sinnloserweise eine zweite Schleife reinbauen, obwohl es absolut nichts bringt? Versteh einer die Lehrer... :gruebel:

ja, dass ist komplett schwachsinnig, zumal diese doppelte schleife beim lehrer selbst nicht funktioniert.

@Tormentor32, vielen dank, damit werde ich es mal versuchen, halt mal schauen, wie ich das in die aufgabe ein bauen kann :gruebel:

3_of_8 16. Jan 2007 19:36

Re: verschachtelte schleifen
 
Ich persönlich würde das ohne mit der Wimper zu zucken ohne verschachtelte Schleife machen.

Klaus01 16. Jan 2007 20:45

Re: verschachtelte schleifen
 
In Deiner Aufgabenstellung (jpg Bild) steht aber auch kein Wort von Verschachtelung.
Nur etwas von for Schleifen.

Delphi-Quellcode:
function replace(Quelle,suche,ersetze:string):String
var
  i:Byte;
begin
  result:='';
  for i:=1 to length(quelle) do
    if quelle[i] = suche then
      result:=result+ersetze
    else
      result:=result+quelle[i];
end;
Grüße
Klaus

baala 16. Jan 2007 21:00

Re: verschachtelte schleifen
 
@Klaus01,
stimmt schon, dass in der aufgabe nichts von einer verschachtelung steht. Nur meinte der lehrer das zusätzlich, dass wir das damit machen sollen. Als ich ihm, meine ganz oben gepostet lösung zeigte, meine er gut, nur habe ich mich erfolgreich um den einsatz der verschachtelung gedrückt, was eingentlich wir eingentlich in dieser aufgane übenen sollte.
Vielen dank auf für deine lösung, ich werde sie ebenfalls studieren :thumb:
vll kann ich sie auch in der arbeiten benutzen, da wird der lehrer aber schauen, da wir noch nie mit funktionen gearbeitet haben... :mrgreen:

Ich habe selbst etwas weiter an der verschachtelung geschrieben, es gibt zwar noch einen fehler, den werde ich aber auch bestimmt noch finden, wenn einer von euch einmal drauf schauen möchte ;) :
ich nehme an, dass ich einfach noch den orginal string brauche um dann von ihm weiter auszulesen


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
stra:string;
begin
stra:=edit1.text;
for I := 1 to length(stra) do

if stra[i] = 'ö' then begin
   stra[i]:= 'o'  ;
   stra[i+1]:='e'   ;
   for j := i+1 to length(stra) do
   stra[j]:= stra[j-1];
end;
edit1.Text:=stra;  
end;

Flare 16. Jan 2007 21:03

Re: verschachtelte schleifen
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
function replace(Quelle,suche,ersetze:string):String
var
  i:Byte;
begin
  result:='';
  for i:=1 to length(quelle) do
    if quelle[i] = suche then
      result:=result+ersetze
    else
      result:=result+quelle[i];
end;

Dein Funktionsheader macht wenig Sinn :gruebel:
Man kann einen String als suche übergeben, du erlaubst aber bei dem Vergleich nur ein Zeichen von Quelle...

Ich finde das hier sinnvoller:
Delphi-Quellcode:
function replace(Quelle: String; suche,ersetze:char):String
Wobei das natürlich nur für ein Zeichen geht, für das Problem ö zu oe müsste man das dann eben ein bisschen komplizierter machen.
Delphi-Quellcode:
function replace(Quelle,suche,ersetze:string):String
var
  i:Byte;
begin
  result:='';
  for i:=1 to length(Quelle)-length(suche)+1 do
  begin
    if Copy(Quelle, i, length(suche))=suche then
    begin
      result:=result + ersetze + Copy(Quelle, i+1, length(Quelle));
      replace(result, suche, ersetze); // mir viel gerade nix besseres ein als eine Rekursion, darf ruhig korrigiert werden
      break;
    end
    else
      result:=result+quelle[i];
  end;
end;
(Ist ungetestet und ich glaube auch, dass da irgendwo ein Fehler drin ist...bitte korrigiert mich!)


Flare


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz