Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› X-Skript / Developer-Pack —› Lösungsvorschlag Aufgabe Kap4

Autor Mitteilung
verfasst am: 16.08.2007, 00:29
Registrierdatum: 24.07.2007, 10:19

 Beiträge: 71
So nun meine Lösungsvorschläge für die Aufagben Kapitel 4

... Alles wie bisher

procedure Quiz2;
var
  FragenList : TStringList;
  AntwortenList : TStringList;
  Antwort : String;
  testing : String;      //für test ob leer
  testing2 : String;     //für test ob erstes zeichen leerzeichen ist
  boltest : Boolean;     //für neue SChleife
  dummy : Integer;
begin
  Q2_richtig := 0;
  testing :='';
  testing2 :=' ';
  boltest := true;

  FragenList := TStringList.Create;
  FragenList.CommaText := Q2_Fragen;

  AntwortenList := TStringList.Create;
  AntwortenList.CommaText := Q2_Antworten;

  game_api_messageBox(AnleitungQuiz2);

  for dummy := 0 to FragenList.Count-1 do
  begin
    game_api_messageBox(FragenList[dummy]);
    while boltest do      // schleife die solange läuft bis das erste zeichen kein leerzeichen ist und antwort nicht leer ist
    begin
      if ((game_api_QueryText('Antwort:',30,Antwort)=true) and (Antwort<>testing) and not (pos(testing2,Antwort)=1)) then boltest:=false
    // hier muss nichts gemacht werden
    end;
    boltest:=true;
    Antwort := UpperCase(Antwort);
    if (Antwort = AntwortenList[dummy]) then
      inc(Q2_richtig);
    Antwort:='';
  end;

  FragenList.Free;
  AntwortenList.Free;
end;

procedure auslagern(frage:String; var rechn:Array of Integer);       // zur erstellung der zahlen zur rechnung
var
  i, zaehl, laenge:Integer;
  text: Char;
begin
  zaehl:=0;
  laenge:=Length(frage);
  For i:=1 to laenge do
  begin
    text:=StrGet(frage,i);
    if ((text='+') or (text='x')) then zaehl:=zaehl+1;
  end;
  SetLength(rechn,zaehl+1);
  For i:=0 to zaehl do
  begin
    rechn[i]:=random(100)+20;
  end;
end;

procedure Quiz3;
var
  Ergebnis : String;
  zahl: Array of Integer;
begin
  game_api_messageBox(AnleitungQuiz3);
  auslagern(Q3_Frage1,zahl);
  game_api_messageBox(Format(Q3_Frage1,[zahl[0],zahl[1]]));
  while (not game_api_QueryText('Lösung:',10,Ergebnis)) do
  begin
    // hier muss nichts gemacht werden
  end;
  if (StrtoIntdef(Ergebnis,0) = zahl[0]*zahl[1]) then
    inc(Q3_richtig);

  Ergebnis := '';
  auslagern(Q3_Frage2,zahl);
  game_api_messageBox(Format(Q3_Frage2,[zahl[0],zahl[1],zahl[2]]));
  while (not game_api_QueryText('Lösung:',10,Ergebnis)) do
  begin
    // hier muss nichts gemacht werden
  end;
  if (StrtoIntdef(Ergebnis,0) = (zahl[0]+zahl[1])*zahl[2]) then
    inc(Q3_richtig);

  Ergebnis := '';
  auslagern(Q3_Frage3,zahl);
  game_api_messageBox(Format(Q3_Frage3,[zahl[0],zahl[1]]));
  while (not game_api_QueryText('Lösung:',10,Ergebnis)) do
  begin
    // hier muss nichts gemacht werden
  end;
  if (StrtoIntdef(Ergebnis,0) = zahl[0]*zahl[1]) then
    inc(Q3_richtig);
end;
... Ab hie wieder alles normal



So ich hab probiert 2a und b gleichzeitig zu lösen, da nur mit or erweitert werden muss. Ich hoffe ich hab die fragestellung richtig verstanden, allerdings hab ich keine ahnung wie man das mit den rechenzeichen machen kann, das er die automatisch einsetzt und die rechenzeichen beachtet (werds noch ein bissle probieren und wenn ich auf eine Lösung komm die noch dazu posten, wird dann aber wahrscheinlich noch etwas länger).
verfasst am: 16.08.2007, 10:41 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hmm, hier mal ein Tip. Da du ja schon Kapitel 6 durch hast, sollte das ganze halbwegs einfach per Array gelöst werden können. Um an der Stelle gleich paar Sachen zu üben, würde ich folgendes Vorgehen vorschlagen. Du definierst dir einen neuen Aufzählungstyp TRechenoperation (für den Anfang mit den Elementen Addition und Multiplikation - später wären auch Klammern und weitere Rechernoperationen denkbar). Dann verwendest du einen Array of TRechenoperation an Stelle von zaehl, und merkst dir dort die Reihenfolge der Rechenoperationen.

Dann kannst du in einer Schleife den FragenText Stück für Stück mit Zufallszahlen auffüllen (eine Schleife ist nötig, weil du ja die Anzahl der benötigten Parameter für Format nicht im Vorfeld kennst). Die Zufallszahlen müsstest du dir auch in einem Array merken. Mit der Kombination von beiden Arrays solltest du dann einfach das Ergebnis ausrechnen können. Schwierig ist dabei allerdings nochmal, Punkt- vor Strichrechnung zu berücksichtigen.

So, und jetzt viel Spass beim knobeln.

PS: Auch mit dem Wissen bis Kapitel 4 könnte man ähnlich vorgehen, man müsste dann die einzelnen Zahlen bzw. Rechenoperationen jeweils in einer Stringlist zwischenspeichern. Man könnte aber auch gleich einen anderen Ansatz wählen, und z.B. mit Pos zuerst nach %d * %d zu suchen, und den String stückweise zu ersetzen. Da man zuerst nach den Multiplikationen sucht, erfüllt man automatisch Punktrechnung vor Strichrechnung - allerdings muss man sich bei der Variante etwas einfallen lassen, wie man z.B. %d * %d * %d abfangen könnte. Alles in Allem ist ein solcher Ansatz vermutlich umständlicher, da man dann ja auch beliebige Zahlen im String suchen müsste (um z.B. die Produkte anschließend zu addieren).



Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.016 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003