irgendwas mit char?
-
Ich habe mal so etwas geschrieben.
Schau mal unter http://www.falconhunter.de
in der Sourcecodessektion nach dem Englischtrainer.
-
naja... nicht wirklich.
Ich klicke auf den Button "neu", darauf folgt, dass auf einem Label ein englisches Wort steht. Darunter liegt ein Edit-Feld in dem ich die Übersetzung eingebe. Ist das getan, geht es weiter bis ich die Lektion abgefragt wurde. wenn ich was falsch eingegeben habe wird das mit hilfe
Fehler++
gespeichert.
Die Englischen Vokabeln sehe ich eigentlich nicht. der fragt mich nur in einer zufälligen ReinfolgePS: ich benötige doch winrar dazu, nicht?
und ist dann noch der Quellcode mit dabei, ich will ja was lernen.!
-
schön das ihr mal antworten!
-
Hallo
bitte erklaer uns doch genau wo dein Problem liegt
- anzeigen
- suchen
- vergleichenund zeig uns bitte, was du schon versucht hast (und was nicht geht)
dann ist es auch viel leichter dir zu helfen
MfG
Klaus
-
der computer soll die eingabe mit einem Wort vergleichen.
1. eingeben von Wort
2. vergleichen obs das Wort ist was ich eingeben soll
3. auf einem Label mir sagen ob es richtig war.ich weiß das ich in ausdruck immer eine 4 hatte.
-
Also nochmal:
KlausB schrieb:
bitte erklaer uns doch genau wo dein Problem liegt
- anzeigen
- suchen
- vergleichenund zeig uns bitte, was du schon versucht hast (und was nicht geht)
Einen Versuch hast du noch. Du sollst nicht beschreiben, was du möchtest, sondern was nicht funktioniert, warum es nicht funktioniert und was du versucht hast dagegen zu unternehmen.
-
mach 2 Dateien:
eine mit den Worten auf deutsch und eine auf englisch. die reihenfolge der worte muss stimmen.
dann erstellst du ein Edit (Edit1) wo das wort eingegeben werden soll und ein
Label (Label1) wo es auf englisch angezeigt wird. Auserdem erstellst du einen Button (Button1)
in die header datei kommt dann das:int index;Dann in die formCreate methode schreibst du soetwas:
index = 0; TStringList *englisch = new TStringList; TStringList *deutsch = new TStringList; englisch->LoadFromFile("eng.txt"); deutsch->LoadFromFile("deu.txt"); Label1->Caption = deutsch[index];in die ButtonClick methode schreibst du dann irgendetwas wie hier:
if(Edit1->Text == englisch[index]) ShowMessage("richtig"); else ShowMessage("falsch"); if(index < englisch->Count - 1) index++ich hab das ganze nicht ausprobiert, aber es sollte funktionieren
-
nuclearspider schrieb:
mach 2 Dateien:
Würde ich nicht tun, eine reicht.
nuclearspider schrieb:
ich hab das ganze nicht ausprobiert...
Ich auch nicht
nuclearspider schrieb:
..., aber es sollte funktionieren
Glaube ich nicht.
nuclearspider schrieb:
Label1->Caption = deutsch[index];Gruß,
Alexander
-
Alexander Kempf schrieb:
Glaube ich nicht.
Ich auch nicht. Schließlich macht es nicht viel Sinn, die StringLists in der FormCreate zu erstellen.
-
tut mir leid dass ich so lange nix geschrieben habe,
aber, ich finde es cool dass ihr euch so einig seid
u.a. verstehe ich das nicht warum es nicht einfach geht dass ich keine zusätzliche datei einrichten muss, deshalb auch die überschrift der Frage "irgendwas mit char?"
ich komme übrigens beim eingeben bzw. vergleichen nicht weiter.
und ich hatte mir das so vorgestellt dass das einfach die eingabe mit einem Wort vergleicht welches ich mit == verbinde.
ungefähr so
Eingabe (edit1->Text) muss dieses wort sein
aber ich bin mir nicht sicher.

und so richtig verstehe ich alle code nicht wirklich (zu 75%) aber was ist nun wenn ich mehr als ein deutsches/ englisches Wort will?
-
clekilein schrieb:
und so richtig verstehe ich alle code nicht wirklich (zu 75%) aber was ist nun wenn ich mehr als ein deutsches/ englisches Wort will?
Und genau da kommen die Stringlisten, Dateien oder Datenbanken ins Spíel. Irgendwo mußt Du die verschiedenen Wortgruppen doch abbilden (speichern).
Am einfachsten dürfte es wohl über eine TStringList gehen. Ich würde pro Zeile der StringList eine englisch / deutsche Wortkombination eingeben, mit einem festen Trennzeichen dazwischen (ein Gleichheitszeichen z.B.). So kannst Du zum Beispiel im Notepad das Wörterbuch erstellen und pflegen. Mach einfach mal eine Datei, mit ein paar Einträgen und lade Sie in eine Stringliste. Dann kannst Du per Zufall, oder in einer bestimmten Reihenfolge durch die einzelnen Zeilen gehen und nach dem Trennzeichen suchen und die Zeile in das englische und das deutsche Wort aufteilen. Das deutsche Wort im Label ausgeben und das englische Wort gegen die Eingabe im Edit vergleichen.
Hilft Dir das weiter?
Grüße
-
Joe_M. schrieb:
Am einfachsten dürfte es wohl über eine TStringList gehen. Ich würde pro Zeile der StringList eine englisch / deutsche Wortkombination eingeben, mit einem festen Trennzeichen dazwischen (ein Gleichheitszeichen z.B.).
Ich würde dringend ein Gleichheitszeichen empfehlen und mir dann mal die Eigenschaften Names und Values der TStringList
anschauen. Dann sparst Du Dir das Suchen nach dem Trennzeichen.Gruß,
Alexander
-
also, ich soll jetzt den text dort oben abschreiben, und dann soll das funktionieren? ach,so wegen dem .txt muss das eine bestimmte stelle haben, wo das liegt?
-
Erstell mit dem Notepad mal eine Datei in dem Projektverzeichnis. Ich nenne sie hier mal Vokabeln.txt. Dort fügst Du testweise mal ein paar Zeilen ein:
ja=yes
nein=no
vielleicht=maybeIn der Header-Datei gibst Du unter private: folgendes ein:
TStringList* slVokabeln; int iPosition, iFehler; AnsiString asDeutsch; AnsiString asEnglisch; void ZeileAufteilen(AnsiString Zeile);In der CPP:
void __fastcall TForm1::FormCreate(TObject *Sender) { slVokabeln = new TStringList(); slVokabeln->LoadFromFile("Vokabeln.txt"); iFehler = iPosition = 0; if (!slVokabeln->Text.IsEmpty()) // überhaupt was in der Liste? ZeileAufteilen(slVokabeln->Strings[iPosition]); // erstes Wortpaar in asDeutsch und asEnglisch laden Label1->Caption = asEnglisch; Edit1->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (slVokabeln) delete slVokabeln; } //--------------------------------------------------------------------------- void TForm1::ZeileAufteilen(AnsiString Zeile) { int pos = Zeile.AnsiPos("="); if (pos) { asDeutsch = Zeile.SubString(1, pos - 1); asEnglisch = Zeile.SubString(pos + 1, Zeile.Length() - pos + 1); } else { asDeutsch = ""; asEnglisch = ""; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text == asDeutsch) ShowMessage("Richtig!"); else { ShowMessage("Falsch!"); iFehler++; } iPosition++; Label1->Caption = ""; Edit1->Clear(); if (iPosition < slVokabeln->Count) { ZeileAufteilen(slVokabeln->Strings[iPosition]); Label1->Caption = asEnglisch; if (Edit1->CanFocus()) Edit1->SetFocus(); } else { ShowMessage("Fertig. Anzahl Fehler: " + AnsiString(iFehler)); } } //---------------------------------------------------------------------------Dies sollte Dir als Grundlage reichen. In diesem Code wird keinerlei Fehlerbehandlung durchgeführt. Es wird auch nicht auf ungültige Zeilen in der Vokabeln.txt geprüft. Außerdem ist der Aufbau stark verbesserungsbedürftig. Ich würde das so auf keinen Fall tatsächlich einsetzen. Aber als Ausgangsbasis ist es durchaus verwendbar...
Grüße
-
Eine solche Datei kannst Du auch ohne das Rad neu zu erfinden einlesen.
Joe_M. schrieb:
ja=yes nein=no vielleicht=maybeIch habe mir mal erlaubt ein paar Änderungen einzufügen, um mal die Verwendung von Names/Values zu veranschaulichen:
Header:
TStringList* slVokabeln; int iPosition, iFehler;CPP:
void __fastcall TForm1::FormCreate(TObject *Sender) { slVokabeln = new TStringList(); slVokabeln->LoadFromFile("Vokabeln.txt"); iFehler = iPosition = 0; Label1->Caption = slVokabeln->Names[iPosition]; Edit1->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (slVokabeln) delete slVokabeln; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text == slVokabeln->Values[slVokabeln->Names[iPosition]]) ShowMessage("Richtig!"); else { ShowMessage("Falsch!"); iFehler++; } iPosition++; Label1->Caption = ""; Edit1->Clear(); if (iPosition < slVokabeln->Count) { Label1->Caption = slVokabeln->Names[iPosition]; if (Edit1->CanFocus()) Edit1->SetFocus(); } else { ShowMessage("Fertig. Anzahl Fehler: " + AnsiString(iFehler)); } } //---------------------------------------------------------------------------Wobei man natürlich den Code der in Button1Click steht auslagern sollte - aber Joe_M. hat ja bereits darauf hingewiesen.
Gruß,
Alexander
-
Seit langen habe ich mal wieder zu diesem Tehma eine Frage...
ich habe alles so gemacht wie gesagt und es hat alles geklappt.!

aber, wenn eine Vokabel mehrere bedeutungen hat wie kann ich das machen?ich habe mir das so vorgestellt: Yes=Ja=Nein=
diese ganzen bedeutungen, wenn mir das mal jemand sagen könnte wäre das ganz ok.ö
-
Du möchtest also für eine Vokabel mehrere Bedeutungen in Deiner Vokabel-Textdatei speichern? Dann vermute ich, dass Dein Beispiel
clekilein schrieb:
ich habe mir das so vorgestellt: Yes=Ja=Nein=
nur einfach unglücklich gewählt ist.
Du könntest sowas in einem solchen Format abspeichern:maybe=vielleicht,eventuell hot=heiß,scharf,echt geilDu hast dann natürlich keine exakte Zuordnung von einer Vokabel auf eine Übersetzung, so dass Du nicht einfach Values nutzen kannst.
Stattdessen könntest Du eine temporäre Stringliste nutzen, in die Du Values reinschmeißt (Text-Eigenschaft) und dann die Eigenschaft
CommaText nutzt, um die einzelnen Übersetzungen zu erhalten.
Wenn Du natürlich irgendwann auf die Idee kommen solltest, das ganze auch in umgekehrter Richtung zu machen, solltest Du Dir über
die Struktur noch mal eingehender Gedanken machen.Gruß,
Alexander
-
also jetzt nur durch kommata trennen und dann geht das ab?
-
clekilein schrieb:
also jetzt nur durch kommata trennen und dann geht das ab?
Wenn Du das andere, was ich geschrieben habe, auch beherzigst, dann sollte das abgehen.
Gruß,
Alexander
-
das funktioniert aber nicht, da muss ich dem mehrere Antworten mit komma getrennt sagen (also genau das was da steht!)