Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi String ausgeben (https://www.delphipraxis.net/182088-string-ausgeben.html)

DelphiDan 29. Sep 2014 18:57

String ausgeben
 
Hallo Leute,

ich bin noch ein "Anfänger" in Delphi und komme gerade nicht wirklich weiter, weil ich den Fehler in einer Procedure nicht findet.

Ich versuche ein einfachen Vokabeltrainer zu erstellen.
Man kann jeweils 12 Wörter eintragen (pro Sprache) und diese sollen dann auf einem extra Panel in 2 Edit Felder abgefragt werden.
Nun ist mein erstes Problem, dass nach dem man auf den Button "Start" klickt, keine Wörter auf den Editorfelder ausgeben werden.

Die gesamte Procedure lautet:

Delphi-Quellcode:
var d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12:string;
    zufalldeutsch,zufallenglisch:integer;

procedure TForm1.ButtonstartClick(Sender: TObject);
begin

    if deutsch1.text='' then
    begin
    showmessage('Bitte alle Felder ausfüllen');
    exit;
    end;
    if deutsch2.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen');
    exit;
    end;
    if deutsch3.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen');
    exit;
    end;
    if deutsch4.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen');
    exit;
    end;
    if deutsch5.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen');
    exit;
    end;
    if deutsch6.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if deutsch7.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
     end;
    if deutsch8.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if deutsch9.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if deutsch10.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
   end;
    if deutsch11.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
     exit;
    end;
    if deutsch12.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch1.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
     exit;
    end;
    if englisch2.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch3.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch4.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
     exit;
    end;
    if englisch5.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch6.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
     exit;
    end;
    if englisch7.text='' then
     begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch8.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch9.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch10.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch11.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;
    if englisch12.text='' then
    begin
    showmessage('Fehler'+'Bitte alle Felder ausfüllen') ;
    exit;
    end;

    panel1.visible:=true;

    d1:=deutsch1.text;
    d2:=deutsch2.text;
    d3:=deutsch3.text;
    d4:=deutsch4.text;
    d5:=deutsch5.text;
    d6:=deutsch6.text;
    d7:=deutsch7.text;
    d8:=deutsch8.text;
    d9:=deutsch9.text;
    d10:=deutsch10.text;
    d11:=deutsch11.text;
    d12:=deutsch12.text;
    e1:=englisch1.text;
    e2:=englisch2.text;
    e3:=englisch3.text;
    e4:=englisch4.text;
    e5:=englisch5.text;
    e6:=englisch6.text;
    e7:=englisch7.text;
    e8:=englisch8.text;
    e9:=englisch9.text;
    e10:=englisch10.text;
    e11:=englisch11.text;
    e12:=englisch12.text;

    zufalldeutsch:=random(1-12);

    If zufalldeutsch=1 then
    begin
    editdeutsch.text:=d1;
    editenglisch.text:=e1;
    end else
    If zufalldeutsch=2 then
    begin
    editdeutsch.text:=d2;
    editenglisch.text:=e2;
    end else
    If zufalldeutsch=3 then
    begin
    editdeutsch.text:=d3;
    editenglisch.text:=e3;
    end else
    If zufalldeutsch=4 then
    begin
    editdeutsch.text:=d4;
    editenglisch.text:=e4;
    end else
    If zufalldeutsch=5 then
    begin
    editdeutsch.text:=d5;
    editenglisch.text:=e5;
    end else
    If zufalldeutsch=6 then
    begin
    editdeutsch.text:=d6;
    editenglisch.text:=e6;
    end else
    If zufalldeutsch=7 then
    begin
    editdeutsch.text:=d7;
    editenglisch.text:=e7;
    end else
    If zufalldeutsch=8 then
    begin
    editdeutsch.text:=d8;
    editenglisch.text:=e8;
    end else
    If zufalldeutsch=9 then
    begin
    editdeutsch.text:=d9;
    editenglisch.text:=e9;
    end else
    If zufalldeutsch=10 then
    begin
    editdeutsch.text:=d10;
    editenglisch.text:=e10;
    end else
    If zufalldeutsch=11 then
    begin
    editdeutsch.text:=d11;
    editenglisch.text:=e11;
    end else
    If zufalldeutsch=12 then
    begin
    editdeutsch.text:=d12;
    editenglisch.text:=e12;
    end;
Kann mir jemand helfen?
Danke!

Helmi 29. Sep 2014 19:07

AW: String ausgeben
 
überleg dir bitte, was dabei rauskommen soll:
Delphi-Quellcode:
zufalldeutsch:=random(1-12);
wohl eher
Delphi-Quellcode:
zufalldeutsch:=random(12);
(wenn ich mich nicht täusche)

Luckie 29. Sep 2014 20:13

AW: String ausgeben
 
Aber wenn ich die Variablen sehe, schreit das gerade zu nach einem Array oder Liste.

Helmi 29. Sep 2014 20:19

AW: String ausgeben
 
Zitat:

Zitat von Luckie (Beitrag 1274257)
Aber wenn ich die Variablen sehe, schreit das gerade zu nach einem Array oder Liste.

ich denke das ist der zweite Schritt den er machen soll
erst mal soll sein vorhandenes funktionieren - danach kann man optimieren (lernen)

p80286 29. Sep 2014 20:41

AW: String ausgeben
 
Gegenfrage: wird
Delphi-Quellcode:
showmessage
ausgeführt?

und sieh Dir mal
Delphi-Quellcode:
case
an.

Gruß
K-H

himitsu 29. Sep 2014 22:23

AW: String ausgeben
 
Und warum liegen alle Variablen global rum und sind nicht lokal in der Methode deklariert?

Den Sinn der d- und e-Variablen kann ich auch nicht erkennen.
Delphi-Quellcode:
    If zufalldeutsch=1 then
    begin
    editdeutsch.text:=deutsch1;
    editenglisch.text:=englisch1;
    end else
    If zufalldeutsch=2 then
Das mit den Arrays wurde schon gesagt
und für die Edits gibt es FindComponent. (was auch das vorgeschlagene CASE überflüssig machen würde)

Und die (fehlende) Codevormatierung ist eher als grausam zu bezeichnen.

BUG 29. Sep 2014 22:48

AW: String ausgeben
 
Zitat:

Zitat von Helmi (Beitrag 1274249)
wohl eher
Delphi-Quellcode:
zufalldeutsch:=random(12);
(wenn ich mich nicht täusche)

Du täuschst dich: für die Zahlen zwischen 1 und 12 fällt noch ein +1 :mrgreen:
Delphi-Quellcode:
// Random(n) gibt eine Zahl zwischen 0 und n-1 zurück
zufalldeutsch:=random(12) + 1;

@DelphiDan: Das Textfeld bleibt leer, weil keiner deiner Bedingungen in deinem if-then-else "Monster" zutrifft.

Puke 29. Sep 2014 22:59

AW: String ausgeben
 
Ich glaub da war was:
Zitat:

Zitat von DelphiDan (Beitrag 1274246)
ich bin noch ein "Anfänger" in Delphi

Ach, er ist noch Anfänger. Und warum reiten dann alle (bis auf BUG und p80286) auf ihm rum?

DelphiDan, versuch erstmal den ersten Teil mit einer oder-Verknüpfung zu minimieren (Du musst es noch nicht mit FindComponent machen):
Delphi-Quellcode:
if (deutsch1.text = '') or (deutsch2.text = '') or ... or (englisch11.text = '') or (englisch12.text = '') then
   ShowMessgae('...')
else
begin
  // Hier kommt der Teil ab dem "panel1.visible := false" rein
  panel1.visible := false;
  {...}
end;
Und dann kannst du weitermachen mit der
Delphi-Quellcode:
case
-Anweisung
Delphi-Quellcode:
case zufallszahl of
 1: begin
       // Hier kommt die Zuweisung dann rein
       editdeutsch.text:=d1;
       editenglisch.text:=e1;
    end;
 2: begin
       // Hier kommt die Zuweisung dann rein
    end;
 {...}
end;
Das wird übersichtlicher und einfacher für dich.

Beste Grüße
Puke

BUG 30. Sep 2014 03:08

AW: String ausgeben
 
Zitat:

Zitat von Puke
Und warum reiten dann alle (...) auf ihm rum

Die Kommentare zeigen die nächsten Schritte auf, die DelphiDan mit dem Code gehen sollte.
  • bessere Einrückung
  • die Wiederholungen vermeiden (Array und Schleifen)
  • dann eventuell die globalen Variablen
Delphi-Quellcode:
case
wäre zwar eine schönere Krücke, aber erst mit Schleifen bekommt man ein Großteil der Wiederholungen erschlagen.

Es ist halt wirklich "Anfängercode", aber das ist OK für einen Anfänger ... nur möchte man sich eben auch weiterentwickeln und die Kritik in der DP ist dafür aus meiner Erfahrung ein günstiges Mittel. Im Prinzip schreibt jeder mal "gruseligen" Code; die entscheidende Fähigkeit ist es zu erkennen, dass und warum er "gruselig" ist. Es hilft, wenn man es oft genug gesagt bekommt.

Reviewed (~kritisiert) wird der Code, nicht der Programmierer.
In dem Sinne: nicht abschrecken lassen von den Alt-Eingesessenen, wir wollen nur dein Bestes :wink:

Namenloser 30. Sep 2014 04:32

AW: String ausgeben
 
Es hat aber auch keinen Sinn, einen Anfänger, der mit einer konkreten Frage ankommt, mit einer Flut an Informationen zu erschlagen, die mit seinem Problem nicht direkt etwas zu tun haben. Eins nach dem anderen... Erst mal den eigenen Ansatz zum Laufen bringen, danach kann man ggf. schauen, ob/wie es besser geht. Genau wie es in Mathe oder anderen Fächern ja auch am effektivsten ist, erst mal eine Aufgabe selbstständig zu bearbeiten und anschließend mit der Musterlösung zu vergleichen, statt gleich in die Musterlösung zu schauen.

Ist doch normal, dass man so anfängt. Meine ersten Programme sahen genau so aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.
Seite 1 von 2  1 2      

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