AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

String ausgeben

Ein Thema von DelphiDan · begonnen am 29. Sep 2014 · letzter Beitrag vom 30. Sep 2014
Antwort Antwort
Seite 1 von 2  1 2   
DelphiDan

Registriert seit: 29. Sep 2014
1 Beiträge
 
#1

String ausgeben

  Alt 29. Sep 2014, 19:57
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!
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.325 Beiträge
 
Delphi XE2 Professional
 
#2

AW: String ausgeben

  Alt 29. Sep 2014, 20:07
überleg dir bitte, was dabei rauskommen soll: zufalldeutsch:=random(1-12); wohl eher zufalldeutsch:=random(12); (wenn ich mich nicht täusche)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: String ausgeben

  Alt 29. Sep 2014, 21:13
Aber wenn ich die Variablen sehe, schreit das gerade zu nach einem Array oder Liste.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.325 Beiträge
 
Delphi XE2 Professional
 
#4

AW: String ausgeben

  Alt 29. Sep 2014, 21:19
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)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: String ausgeben

  Alt 29. Sep 2014, 21:41
Gegenfrage: wird showmessage ausgeführt?

und sieh Dir mal case an.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#6

AW: String ausgeben

  Alt 29. Sep 2014, 23:23
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Sep 2014 um 23:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: String ausgeben

  Alt 29. Sep 2014, 23:48
wohl eher 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
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.
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#8

AW: String ausgeben

  Alt 29. Sep 2014, 23:59
Ich glaub da war was:
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 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
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: String ausgeben

  Alt 30. Sep 2014, 04:08
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
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

AW: String ausgeben

  Alt 30. Sep 2014, 05:32
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.
  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 21:03 Uhr.
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