Autor Beitrag
-=F2k=-
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 :wink:).

Gruß und schonmal viel Glück
a.C.k
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93

WIN 2000
Delphi 6 Enterprise ; Delphi 7 Studio
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
    ausblenden 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:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      randomize
    end// Bei Programstart
    [...]
    function GetZufallszahl : Integer;
    begin
      Result := random(99) + 1;
    end// liefert einen zufalswert zwischen 1 und 100


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=- Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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 :D
Gruß
F2k
-=F2k=- Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:
ausblenden 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.:
ausblenden 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
ausblenden Quelltext
1:
ini.readstring					

aber wie soll ich weiter fortfahren???
wie kann ich die einzelnen Vokabeln rausfiltern und die dann unterschiedlich abfragen lassen?
Gruß
F2k
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden 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); // Auslesen der Kathegorie Leichter
    Zufall := Random(Kat.Count - 1); // Wert zwischen 0 und Anzahl - 1 auswürfeln
    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=- Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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! :D
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 :oops:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Sa 28.06.03 21:44 
Hmm ich würde das so machen:

ausblenden Delphi-Quelltext
1:
2:
var
  SchonGefragt: set of Integer;


Dann ganz am Anfang
ausblenden Delphi-Quelltext
1:
  SchonGefragt := [];					


und bei jeder VokabelAbfrage: (nach Klabautermannscode)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  repeat
    Zufall := Random(Kat.Count - 1);
  until (not Zufall in SchonGefragt);
  SchonGefragt := SchonGefragt + Zufall;

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
-=F2k=- Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:

ausblenden 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); // Auslesen der Kathegorie Leichter
    repeat 
    Zufall := Random(Kat.Count - 1); // Wert zwischen 0 und Anzahl - 1 auswürfeln
    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.:
ausblenden 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?? :oops:
Naja vielleicht kannstest mir erklären! Danke aber trotzdem für deine Bemühung!
Gruss
F2k
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
  private
    SchonGefragt: set of 1..255;


und später
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden 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); // Auslesen der Kathegorie Leichter
    repeat
      Zufall := Random(Kat.Count - 1); // Wert zwischen 0 und Anzahl - 1 auswürfeln
    until (not Zufall in SchonGefragt);
    SchonGefragt := SchonGefragt + [Zufall]; // Zufall muss in Eckige Klammern gesetzt werden, damit es eine Menge (mit einem Element) ist
    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:
ausblenden Delphi-Quelltext
1:
2:
3:
FOR i := 1 TO 20 DO BEGIN
  // HIer findet der eigentliche Vokabeltest statt
END// FOR Schleife

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:
ausblenden Delphi-Quelltext
1:
2:
VAR
  SchonGefragt : ARRAY [1..20OF Integer;

In deiner Schleife kannst du den Wert dann ganz einfach so Setzen:
ausblenden 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.
ausblenden 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; // Vorinitialisieren
  TRY
    FOR i := 1 TO Leange DO
      IF (Liste[i] = Wert) THEN // Wenn der Wert gefunden wurde
        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