Autor |
Beitrag |
-=F2k=-
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 26.06.03 21:43
Hallo und guten Tag!!!!!
ICh habe keine Ahnung ob ich hier im richtigem Forum bin, hoffe aber, dass ihr mir helfen könnt!!!!
Ich bin ein absoluter Newbie in sachen Delphi und brauche Hilfe für eine Hausaufgabe! Ich benutze die kostenlose Personal Delphi Version 6!!
Bis Donnerstag muss ich einen Vokabeltrainer fertigstellen, der folgende Features haben soll:
Vokabelabfrage (Englisch -> Deutsch / Deutsch -> Englisch)
Vokabeleingabe (wie mach ich das???? wie sag ich delphi, dass wenn ich etwas in bsp. ein editFenster schreibe, dass es das irgendwo speichern soll)??
zufällige Vokabelabfrage
usw.. vielleicht habtz ihr noch ein paar Tipps, wie ich mir Pluspunkte ergattern kann!!!
Ich wäre euch echt sehr dankbar und wenn ihr in meiner Nähe wohnt bring ich auch ma nen Shoppen vorbei
Also es wäre echt net, wenn ich Ansätze bekommen könnte! Also ich will schon was lernen und nicht ein fertiges Programm bekommen!
Schon mal einen herzlichen Dank und falls ich mich bald hochgearbeitet habe kann ich mich sicherlich bald revangieren!!!
Gruß
-=F2k=-
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Do 26.06.03 22:21
Na, mit dem in der Nähe wohnen: Wo wohnst denn überhaupt?
Aber wenn man nix in Delphi kann, ist das hier etwas schwierig mal eben so beizubringen, wie man in einer Woche nen Vok-Trainer programmiert.
Such Dir am besten mal Infos zur Speicherung von Daten, vll. über Stringlist (wohl die beste möglichkeit bei Dir).
Dann brauchste nen Zufallsgenerator (Random).
Mit dem Speichern brauchste halt 2 Edits und einen Button mit dem du dann das neue Wort (und die Übersetzung) in 2 verschiedene (eine Deutshc eine Englisch) speicherst.
So mal der Überblick (etwas konfus, bin aber gerade mit viele Sachen beschäftigt  ).
Gruß und schonmal viel Glück
|
|
a.C.k
      
Beiträge: 93
WIN 2000
Delphi 6 Enterprise ; Delphi 7 Studio
|
Verfasst: Fr 27.06.03 11:13
was bahandelt ihr denn gerade im unterricht?
meist ist so eine Aufgabe ja als übung für einen bestimmten Themenbereich gedacht.
Habt ihr da irgendwelche vorgaben, was ihr verwenden sollt?
_________________ Wer nicht gerne denkt, sollte wenigstens von Zeit zu Zeit seine Vorurteile neu gruppieren.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Fr 27.06.03 11:40
Hallo,
dann möchte ich dir mal ein paar denkanstöße geben, die Befehle Objekte die ich erwähne kannst du in der Online-Hilfe nachschlagen (einfach den Befehl in Delphi eingeben mit der Eingabemarke in dieses gehen und F1 drücken).
- Problem 1: Daten eingeben
Hierfür müsst du einfach Zwei Edit Felder auf dein Formular legen eines für das Deutsche eines für das Engliche (ich gehe hier der einfachheit halber davon aus, das es für jedes Deutsche Wort genau eine Englische entsprechung gibt, ansonsten wird es kompliziert).
- Problem 2: Daten Speichern/Laden
Zum speichern Schlage ich dir ein INI-File vor lese dir am besten die Tutorials dazu durch (1, 2). Dann empfehle ich dir aber anstele des dort beschriebenen Objektes tIniFile das Objekt tMemIniFile zu verwenden. Dieses Objekt erlaubt es größere INI-Dateien zu bearbeiten und ist auch noch schneller dabei. Ansonsten funktioniert es genau so wie tINIFile, mit der ausnahme das du zum Speichern der Datei einen seperaten Befehl geben musst. Ein Beispiel zu tMemIniFile kannst du hier runterladen.
Die Datei solltest du dann so aufbauen, das die eine Sprache der Schlüssel und die andere Der Wert ist. Die Kathegorien kannst du verwenden um deine Vokabeln in schwierigkeitsgrade einzuteilen das könnte dann eines der Bonus features sein, wenn du das nicht willst, dann machst du HAlt nur eine Kathegorie. Die Datei würde dann so aussehen:
Quelltext 1: 2: 3: 4: 5:
| [leicht] ich=I du=you [mittel] Krankenschwester=nurse |
Die Vokabeln einer Sektion kannst du dann mit ReadSection auslesen.
- Problem 3: Zufallsgenerator
Delphi bringt einen Zufallsgenerator mit, welcher für deine Zwecke völlig ausreichend sein sollte. Du initialisierst ihn bei Programmstart mit den einmaligen aufruf des Befehls Randomize danach kannst du einen Wert ermitteln indem du den Befehl Random verwendest.
Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormCreate(Sender: TObject); begin randomize end; [...] function GetZufallszahl : Integer; begin Result := random(99) + 1; end; |
So ich denke für den Anfang ist das schon eine menge bei weiteren Fagen weist du ja wo du uns finden kannst
Gruß
Klabautermann
|
|
-=F2k=- 
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 28.06.03 11:07
Titel: DANKE
Hey Leute!
Das ist wirklich sehr nett von euch und ich bin euch sehr dankbar!
Ich werde mich jetzt mal damit beschäftigen und mal sehen was draus wird
Gruß
F2k
|
|
-=F2k=- 
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 28.06.03 13:37
Titel: Noch ene Frage :-(
Guten Mittag!
Also das Vok-Programm könnte funktionieren!
Ich kann jetzt schon einmal Vokabeln einlesen, die auch gespeichert werden!
Das Einlesen sieht wie folgt aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| public ini:tMemIniFile; procedure TForm1.ButtonClick(Sender: TObject); begin ini.writestring('Vokabeln',edit1.text,edit2.text); ini.updatefile; end; |
Aber wenn ich jetzt beispielsweise Bei Vokabeln mehrere Vokabeln eingespeichert habe und noch ne andere Kategorie habe... z.B.:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| [Vokabeln] Ich=I Du=You Er=He
[leichter] wissen=know fangen=catch |
UNd diese Vokabeln sollen dann abgefragt werden!
Wie kann ich das machen?
Ich kann es auslesen mit
Quelltext
aber wie soll ich weiter fortfahren???
wie kann ich die einzelnen Vokabeln rausfiltern und die dann unterschiedlich abfragen lassen?
Gruß
F2k
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Sa 28.06.03 14:03
Hallo,
na das hört sich doch schon mal gut an.
Das Problem besteht also dadrin eine züfällige Vokabel aus der INI Datei zu suchen.
Also gehen wir mal davon aus, dass du Vokabeln aus der Rubrik leichter abfragen möchtest. Dann musst du zuerst die Komplette Rubrik leichter komplett auslesen. Wenn du das gemacht hast, dann ist dir automatisch auch bekannt, wie viele Zeilen (vokabeln) in dieser vorhanden sind. An dieser Stelle wird dann der Zufallsgenerator interessant. Wenn du weißt, das 10 Vokabeln vorhanden sind, dann musst du nur eine ZAhl zwischen 1 und 10 (bessser 0-9) auswüfeln und den sovielten Eintrag nimmst du dann.
Folgender Programmschnipzel würfelt eine Vokabel aus und schreibt die Deutsche Bedeutung in die Variable Deutsch und die Englische in die Variable Englisch. INI ist deine t(Mem)IniFile Variable:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| VAR Kat : tStringList; Deutsch, Englisch : STRING; Zufall : Integer; begin Kat := tStringList.Create; TRY INI.ReadSection('leichter', Kat); Zufall := Random(Kat.Count - 1); Deutsch := Kat[Zufall]; Englisch := INI.ReadString('leichter', Kat[Zufall], 'FEHLER'); FINALLY Kat.Free; END; end; |
So, das sollte dir wieder ein Stück weiter helfen, lässt dir aber noch einige Aufgaben über. Ersteinmal musst du natürlich den Quelltext verstehen lernen (F1 ist dein Freund  ). Dann musst du das ganze so verallgemeinern das es dir nutzt (Kathegorie muss vom Benutzer wählbar sein usw.). Desweiteren solltses du auch einen Mechanismus einbauen, der verhindert, dass ein un die selbe Vokabel mehrfach abgefragt wird.
Viel Spaß dabei
Klabautermann
|
|
-=F2k=- 
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 28.06.03 21:21
Titel: Fast fertig!
N'abend!
Also das letzte hat mir wie immer super geholfen und ich habe alles hinbekommen und das Programm funzt einwandfrei!
Hab richtig Lust bekommen am proggen!
aber hinter die Sache mit dem, dass die Vokabeln, die schon verwendet wurden nicht noch ma kommen, bin ich absolut nicht dahintergekommen!
Ich habe mir überlegt: da die Vokabeln ja so gesagt durch Zahlen gewählt werden, könnte man ja diese zahlen in irgend ner variablen speichern und dann dem RANDOM sagen, dass er diese Zahlen rauslassen soll... aber wie das zu verwirklichen ist, ist mir momentan nicht bekannt
Viellecht weisst du ja wie man das anfangen könnte.
Danke schon mal im vorraus!
Übrigens,,,, gibt es eine deutsche Hilfedatei für Delphi?
Schönen Gruß
F2k
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Sa 28.06.03 21:44
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
-=F2k=- 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 29.06.03 00:24
Titel: ??
ThX
Also wie du das hier geschildert hast, versteh ich das ein bissel!
Aber es in den Klabautermanns Code funzt überhaupt net oder ich missverstehe da etwas!!!
Also wenn ich deine Codes anwenden würde, würde das so aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| VAR Kat : tStringList; Deutsch, Englisch : STRING; Zufall : Integer; SchonGefragt: set of Integer; begin Kat := tStringList.Create; SchonGefragt := []; TRY INI.ReadSection('leichter', Kat); repeat Zufall := Random(Kat.Count - 1); until (not Zufall in SchonGefragt); SchonGefragt := SchonGefragt + Zufall; Deutsch := Kat[Zufall]; Englisch := INI.ReadString('leichter', Kat[Zufall], 'FEHLER'); FINALLY Kat.Free; END; end; |
Das geht bei mir net
Dann noch was! Das was du da gesagt hast geht gar net!
z.B.: Quelltext 1: 2:
| var SchonGefragt: set of Integer; |
Das "set of" geht bei mir net! Oder is das etwas was ein Newbie wie ich net versteht??
Naja vielleicht kannstest mir erklären! Danke aber trotzdem für deine Bemühung!
Gruss
F2k
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: So 29.06.03 11:25
Hmm, seh gerade das set of integer nicht geht... das größte ist 255. und du willst ja sicher mehr als 255 vokabeln. außerdem muss das set Public sein und bei FormCreate auf [] gestellt werden. Dann muss der entsprechende Code so aussehen:
Delphi-Quelltext 1: 2:
| private SchonGefragt: set of 1..255; |
und später
Delphi-Quelltext 1: 2: 3: 4:
| repeat rand := random(255-1)+1; until (not rand in SchonGefragt); SchonGefragt := SchonGefragt + [rand] | , wobei rand als 1..255 definiert wird (statt als Integer)
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: So 29.06.03 12:49
Titel: Re: ??
Hallo,
das mit Mengen (Set) ist keine schlechte Idee. Wie ihr richtig festgestellt hat geht es nur mit Werten zwischen 0..256, das ist genau der Bereich den ein Byte enthält, deshalb kann man ein SET OF Byte geklarieren. Wenn du also garantiert weniger als 257 Vokabeln in jeder Kathegorie hast, dann kannst du das so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| VAR Kat : tStringList; Deutsch, Englisch : STRING; Zufall : Integer; SchonGefragt: set of Byte; begin Kat := tStringList.Create; SchonGefragt := []; TRY INI.ReadSection('leichter', Kat); repeat Zufall := Random(Kat.Count - 1); until (not Zufall in SchonGefragt); SchonGefragt := SchonGefragt + [Zufall]; Deutsch := Kat[Zufall]; Englisch := INI.ReadString('leichter', Kat[Zufall], 'FEHLER'); FINALLY Kat.Free; END; end; |
Wenn du mehr als diese 256 Werte in deiner Vokabelliste haben willst (bei einem Integer [longint] kannst du immerhin 2147483647 Positive Werte abbilden) musst du etwas anders vorgehen.
Nehmen wir mal an, wenn man in deinem Programm auf den Knopf Vokabeltest Klickt, werden jedesmal zwanzig Vokabeln Abgefragt, dann heißt das, du musst dir maximal 19 Werte merken. Um eine sonderfallbehandluing im letzten Durchlauf zu umgehen kannst du dir aber auch alle zwanzig merken. Die Runden musst du sowiso mitzählen, um zu wissen wann schluss ist.
Du hast also irgendwo in deinem Programm eine Schleife, die inetwa so aussieht:
Delphi-Quelltext 1: 2: 3:
| FOR i := 1 TO 20 DO BEGIN END; |
Jetzt willst du dir den jeweils Aktuellen Zufallswert merken. Hierfür bietet sich ein Array an. Dieses kann (falst) beliebig groß sein und jeden Datentyp enthalten. Wie brauchen hier eines mit 20 Elementen:
Delphi-Quelltext 1: 2:
| VAR SchonGefragt : ARRAY [1..20] OF Integer; |
In deiner Schleife kannst du den Wert dann ganz einfach so Setzen:
Delphi-Quelltext 1:
| SchonGefragt[i] := Zufall; |
Jetzt musst du nur noch überprüfen können, ob ein Wert bereits in dem Array steht. Damit du ein wenig ordnung in deinem Quelltext hällst, gebe ich dir hier mal eine Funktion an die hand, die genau dies macht, sie sollte eigentlich recht leicht zu verstehen sein. Der Erste Parameter ist der Wert, der gesucht wird, der Zweite das Array in dem gesucht wird und der Dritte die Position bis zu der gesucht wird die Suche beginnt hier zugeschnitten auf dein Problem im Element 1, sie ist also nicht allgemeingültig, sondern speziell für dein Problem.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function WertInListe(Wert: Integer; Liste: array of Integer; Leange: Integer): BOOLEAN; VAR i : Integer; begin Result := FALSE; TRY FOR i := 1 TO Leange DO IF (Liste[i] = Wert) THEN Result := TRUE; EXCEPT END; end; |
Du solltest als länge immer die Zählvariable deiner Schleife - 1 angeben, da dein Array ja noch nicht weiter gefüllt ist.
In der Abbruchbedingung deiner Repeat Until Schleife musst du dann diese Funktion richtig aufrufen.
Viel Spass beim zusammenpusseln dieser Infos
Gruß
Klabautermann
|
|
|