0

Prüfungsfragen zusammenstellen

Prüfungsfragen zusammenstellen.

Ich habe Prüfungsfragen mit ihren Antworten in einer Tabelle diese sind in 5 Gruppen sortiert immer von 101-110, 201-210 usw

Jetzt möchte ich gerne aus jedem Frageblock 3 zufällig gewählter Fragen nehmen und in einer separaten Liste ausgeben.

Dabei sollte kontrolliert werden das keine Nummer doppelt erscheint.

 

Ziel: 15 mal das Skript laufen lassen mit den vorher zufällig ausgewählten Zahlen (welche nicht doppelt vorkommen dürfen), zu 3 Gruppen aus 101-110, 201-210 , 301-310, 401-410, 501-510

 

Bis jetzt mache ich das von Hand und gebe für alle 15 Fragen je die zufällig ausgewählte Nummer ein

Für jeden Block habe ich diese Funktion

 

let myzahl := floor(random() * 10) + 101;

Zahl := myzahl

 

Und danach schreibe ich die erhalten Zahl in Frage Nummer und dann lasse ich diese Skript laufen dies funktioniert gut

 

let Info := "

*************************

die anzahl befehle auf 4 festlegen

*************************

";

let myFilter := text('Frage Nummer');

let newAnzahl := 4;

let Info := "

*************************

Die Fragenummer einem Arry zuweisen

*************************

";

let AkNr := (select Theoriefragen where contains(text(Fragennummer), myFilter));

let Info := "

*************************

Schlaufe legen

die Anzahl der durchgänge newA zuweisen

*************************

";

let newA := false;

for ii in range(0, newAnzahl) do

            newA := cnt(select Theoriefragen where contains(text(Fragennummer), myFilter) = item(AkNr, ii)) > 0;

            let my := this;

            let newB := (create 'Prüfung-Theoriefragen');

            newB.(Pruefung := my);

            newB.(Theoriefragen := item(AkNr, ii))

end;

'Frage Nummer' := null

5 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Susann. Folgender Code müßte Dir ein Array liefern mit den zufälligen 3 Fragenummern aus den 5 Gruppen. Dieses kannst Du dann ja weiter verarbeiten um die Datensätze anzulegen, wie in Deiner letzten Formel. Mirko

    let result := [0];
    result := [];
    for i in range(1, 6) do
        let result2 := [0];
        result2 := [];
        while cnt(result2) < 3 do
            let pattern := "^" + text(i);
            let ary := (select Theoriefragen)[extractx(text('Frage Nummer'), pattern) = text(i)].'Frage Nummer';
            let result3 := item(ary, floor(random() * 11));
            result2 := unique(array(result2, [result3]))
        end;
        result := array(result, result2)end;
    let doubleArrayInText := concat(result);
    let splitText := split(replace(doubleArrayInText, " ", ""), ",");
    sort(splitText)
    
      • Susan_Schaffner_Owner
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko super das funktioniert jetzt habe ich die 15 Zahlen je mit einem Komma getrennt wo bringe ich das jetzt in meine funktion unter? jetzt  muss ich doch  die unten stehende Formel für jede im sort(splitText) vorhandene Zahl durchlaufen lassen.

      irgendwie nimmt es nicht die nächste Zahl

      ich bin mit Schleifen noch nicht sehr bewandert,ich stehe mir da immer selber auf dem Schlauch

      let Info := "
      ************************
      die Fragennummern nach dem zufallsprinzip herauslesen 5 mal 3 Fragen
      *************************
      ";
      let result := [0];
      result := [];
      for i in range(1, 6) do
          let result2 := [0];
          result2 := [];
          while cnt(result2) < 3 do
              let pattern := "^" + text(i);
              let ary := (select Theoriefragen)[extractx(text('Frage Nummer'), pattern) = text(i)].'Frage Nummer';
              let result3 := item(ary, floor(random() * 11));
              result2 := unique(array(result2, [result3]))
          end
      ;
          result := array(result, result2)
      end;
      let doubleArrayInText := concat(result);
      let splitText := split(replace(doubleArrayInText, " ", ""), ",");
      let myText := sort(splitText);
      let Info := "
      ************************
      das Resultat aufspliten und 15 mal durchlaufen lassen
      *************************
      ";
      for ii in range(1, 15) do
          let myStart := 0;
          while myStart <= 15 do
              let myFilter := text(item(myText, myStart));
              let AkNr := (select Theoriefragen where contains(text(Fragennummer), myFilter));
              let Info := "
      *************************
      Schlaufe legen
      die Anzahl der durchgänge newA zuweisen
      *************************
      ";
              let newA := false;
              for ii in range(0, 4) do
                  newA := cnt(select Theoriefragen where contains(text(Fragennummer), myFilter) = item(AkNr, ii)) > 0;
                  let my := this;
                  let newB := (create 'Prüfung-Theoriefragen');
                  newB.(Pruefung := my);
                  newB.(Theoriefragen := item(AkNr, ii))
              end;
              myStart := myStart + 1
          end
      end
      
      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Susan Schaffner Owner Hallo Susan. Den Sinn des Felds "Pruefung" in 'Prüfung-Theoriefragen' verstehe ich nicht und auch die Schleife mit dem 4er-range ist mir unklar. Mein Script erstellt 15 Datensätze und verknüpft das Verknüpfungsfeld. Prüfe mal ob es so geht:

      let result := [0];
      result := [];
      for i in range(1, 6) do
          let result2 := [0];
          result2 := [];
          while cnt(result2) < 3 do
              let extr := "^" + text(i);
              let ary := (select Theoriefragen)[extractx(text(Fragennummer), extr) = text(i)].Fragennummer;
              let result3 := item(ary, floor(random() * 11));
              result2 := unique(array(result2, [result3]))
          end
      ;
          result := array(result, result2)
      end;
      let doubleArrayInText := concat(result);
      let splitText := split(replace(doubleArrayInText, " ", ""), ",");
      let theoryQuestionNumbers := sort(splitText);
      let me := this;
      for i in theoryQuestionNumbers do
          (create 'Prüfung Theoriefragen').(
              Theoriefragen := last((select Theoriefragen)[Fragennummer = i].number(Nr));
              Pruefung := me
          )
      end
      
      • Susan_Schaffner_Owner
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko Vielen Dank für deine Hilfe ich habe es zum laufen gebracht

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Susan, verstehe ich das richtig: 'Prüfung-Theoriefragen' ist jeweils N:1 mit 'Prüfung' und 'Theoriefragen' verknüpft. Und nun sollen mit einer Schaltfläche aus 'Prüfung' heraus in 'Prüfung-Theoriefragen' insgesamt 15 Datensätze mit jeweils 3 Fragen aus den 5 Bereichen generiert und mit den beiden anderen Tabellen verknüpft werden? Das könnte man so versuchen:

    let me := this;
    for ii in range(1, 6) do
        let myCount := 1;
        while myCount <= 3 do
            let myFNr := floor(random() * 10) + (ii * 100 + 1);
            let myF := first((select Theoriefragen)[Fragennummer = myFNr]);
            if myF != 0 and cnt(('Prüfung-Theoriefragen')[Theoriefragen = myF]) < 1 then
                let newF := (create 'Prüfung-Theoriefragen');
                newF.('Prüfung' := me);
                newF.(Theoriefragen := myF);
                myCount := myCount + 1
            end
        end
    end
    
    

Content aside

  • Status Answered
  • vor 2 JahrenZuletzt aktiv
  • 5Antworten
  • 75Ansichten
  • 2 Folge bereits