Bingoblätter erstellen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Bingoblätter erstellen

Beitrag von erikafuchs »

Ihr Lieben - hier bekommt ja jeder geholfen:
um das Kopfrechnen für meine Schüler etwas aufzulockern wollte ich Bingoblätter erzeugen, ein Blatt geht prima, mehrere schaffe ich nicht und ich bekomme nicht raus warum. Ich möchte euch das Problem mal an einem ganz kleinen Beispiel vorstellen: Auf Tabellenblatt1 stehen in der ersten Spalte 9 Einträge untereinander. Das Makro erzeugt auf dem Tabellenblatt2 eine Tabelle mit den 9 Einträgen in zufälliger Anordnung. Hier ist der Code:

Code: Alles auswählen

Sub Bingo
   dim zeile, spalte, n, aufanz, breite, zaehl, zufall, sprung, tabanz, tab as integer
   dim aufseite, binseite as object
   binseite = ThisComponent.sheets.getByName("Tabelle2")  'auf dieser Seite stehen in der ersten Spalte 9 beliebeige Einträge
   aufseite = ThisComponent.sheets.getByName("Tabelle1") 
                                                      'hier werden diese Einträge zufällig in eine 3mal3 Tabelle eingetragen
   breite=3
   tabanz=10                                    'so viele Bingoblätter sollen erzeugt werden 
   aufanz=breite*breite
   zaehl=aufanz
'   for tab = 0 to tabanz
       ThisComponent.sheets.getByName("Tabelle1").getCellRangeByName("B1:B10").clearContents(4)  
                                                      'hier werden die Markierungen der benutzten Zahlen wieder gelöscht 
       for zeile=0 to breite-1
          for spalte =0 to breite-1
             zufall=fix(rnd()*zaehl+1)      'erzeugt eine Zufallszahl, die Maximalzahl wird in jeder Runde eins kleiner
             sprung=zufall
                for n=0 to aufanz+1
                   if aufseite.getCellByPosition(1,n).string<>"*" then      
                                                      'hier wird überprüft, ob dieser Eintrag schon benutzt wurde
                      sprung=sprung-1
                      if sprung=0 then       
                             'sorgt dafür, dass die per Zuallszahl bestimmte nächste ungenutzte Zahl ausgewählt wird 
                         binseite.getCellByPosition(spalte,zeile+tab*(breite+1)).formula="=Tabelle1.A" & n+1
                         aufseite.getCellByPosition(1,n).string="*"          'markiert bereits verwendete Zahlen
                         zaehl=zaehl-1
                      exit for                   
                   end if
                endif
             next n                
          next spalte    
      next zeile
'   next tab   
End Sub
die Schleife "for tab = 0 to tabanz - next tab" sollte jetzt eigentlich bei jedem Durchlauf die Zeile um 4 weiterzählen (zeile+tab*(breite+1) - das klappt aber ums Verplatzen nicht. Wenn ich das "tab" in "zeile+tab*(breite+1" händisch immer eins raufsetze geht es. Wenn ich die Schleife aktiviere, wird "tab" aber nicht weitergezählt. Kann mir auch hier wieder mal jemand helfen?
Grüße
Pit
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bingoblätter erstellen

Beitrag von DPunch »

Aloha

Beim ersten Blick auf den Code fällt mir eigentlich nur auf, dass Du

Code: Alles auswählen

zaehl=aufanz
ausserhalb jeder Schleife einen Wert zuweist, aber innerhalb der Schleife mit

Code: Alles auswählen

zaehl=zaehl-1
runterzählst und mit

Code: Alles auswählen

zufall=fix(rnd()*zaehl+1)
dann immer bei 0 landen solltest.
Vielleicht mal

Code: Alles auswählen

for tab = 0 to tabanz
zaehl=aufanz
(also Zuweisung innerhalb der äußersten Schleife) probieren?

Werde es mir, wenn ich die Zeit finde, morgen mal auf der Arbeit genauer anschauen, dann kann ich das auch testen.
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bingoblätter erstellen

Beitrag von erikafuchs »

Lieber DPunch,
klar! Wie kann man nur so auf dem Schlauch stehen! Ich sollte mir vielleicht ein neues Hobby suchen - ich habe da sicher zwei Stunden dran gebastelt.
Vielen Dank
Pit
Antworten