Forum: PC-Programmierung Abfrage ob markiert


von Vitali B. (Gast)


Lesenswert?

Hallo Leute!


Ich habe in VB.Net einen Vokabeltrainer programmiert, mit der Funktion, 
dass beim Klick auf einen Button "bereits gelernt" die Frage nicht mehr 
angezeigt wird.
Das Ganze funktioniert über einen Zufallsgenerator. Heißt, dass die 
Fragen zufällig hereinfliegen, solange die Frage nicht als "bereits 
gelernt" markiert wurde.


Hier der VB-Code, wo ich noch Probleme habe:
Der Code bezieht sich auf den Klick auf den Button "nächste Frage".
1
            Dim y as Integer
2
            zufallszahl = r.Next(0, i)
3
            While y < 500
4
                If gelernteFragen(y) <> zufallszahl Then
5
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
6
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
7
                Else
8
                    zufallszahl = r.Next(0, i)
9
                End If
10
11
                y = y + 1
12
            End While


Und hier noch der Code des Buttons "bereits gelernt":
1
    'globale Variablen:
2
    Dim zufallszahl As Integer
3
    Dim ZaehlGelernt As Integer = 0
4
    Dim gelernteZufallszahlen(500) As Integer   
5
6
7
    Private Sub btnAnswerLearned_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerLearned.Click
8
9
10
        gelernteZufallszahlen(ZaehlGelernt) = zufallszahl
11
        ZaehlGelernt = ZaehlGelernt + 1
12
        lblGelernt.Text = lblGelernt.Text + 1
13
14
15
16
    End Sub


Wo liegt mein Fehler, dass die Fragen nicht mehr erscheinen, die bereits 
als "gelernt" markiert wurden?


Vielen vielen Dank!

Gruß

von STK500-Besitzer (Gast)


Lesenswert?

Wie wäre es, wenn du dein Programm mal sinfällig kommentieren würdest?
Prinzipiell braucht man doch nur 3 Arrays:
1. Fragen
2. Antworten
3. schon gelernt.

Dann nimmt man die Zufallszahl und guckt nach, ob das "Schon 
gelernt"-Flag gesetzt ist, und nimmt dann die nächste Zufallszahl.
Wenn sie noch nicht gelernt wurde, dann zeigt man die Frage an und 
wartet auf die Antwort.
Bei Bedarf kann dann das Flag gesetzt werden.
Und wo findet man das in deinem Programm?

von Vitali B. (Gast)


Lesenswert?

Ok Danke erstmal.

Das Ganze dann noch mal hier kommentiert:
1
            Dim y as Integer            'Zählvariable
2
            zufallszahl = r.Next(0, i)  'Zufallszahl zwischen 0 und letzter Frage (Max. Anzahl)
3
4
            While y < 500               'Solange y kleiner 500...
5
                If gelernteFragen(y) <> zufallszahl Then  'steht Zufallswert bereits in der Array "gelernteFragen"? Wenn nein, dann Frage/Antwort anzeigen
6
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
7
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
8
                Else
9
                    zufallszahl = r.Next(0, i)   ' Ansonsten neue Zufallszahl
10
                End If
11
12
                y = y + 1 'inkrementiere Zählvariable
13
            End While



und noch der andere Codeausschnitt:
1
 'globale Variablen:
2
    Dim zufallszahl As Integer
3
    Dim ZaehlGelernt As Integer = 0
4
    Dim gelernteZufallszahlen(500) As Integer   
5
6
7
    Private Sub btnAnswerLearned_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerLearned.Click
8
9
10
        gelernteZufallszahlen(ZaehlGelernt) = zufallszahl 'beim allerersten Klick auf "als gelernt markieren", auf 0. Element der Array die Zufallszahl schreiben.
11
12
        ZaehlGelernt = ZaehlGelernt + 1    'inkrementiere Indexzähler
13
        lblGelernt.Text = lblGelernt.Text + 1 'Zeige Anzahl der bereits gelernten Fragen.
14
15
16
17
    End Sub


Hoffe, jetzt ist es einleuchtender :)

von STK500-Besitzer (Gast)


Lesenswert?

Vitali B. schrieb:
> Hoffe, jetzt ist es einleuchtender :)

ist es denn für dich einleuchtender?

Deine Abfrage, ob die Frage schon "gelernt" wurde ist falsch.
Du stellst keine Beziehung zwischen der Frage und ob sie bereits gelernt 
wurde her, sondern ob die akuelle schon gelernt wurde.
Da das Array aber mit 0 initialisiert sein müsste, wirst du keine 
Antwort auf diese Abfrage finden.

> Wo liegt mein Fehler, dass die Fragen nicht mehr erscheinen, die bereits
> als "gelernt" markiert wurden?

Und was ist damit gemeint?
Für mich ist die Frage unlogisch.

von Noname (Gast)


Lesenswert?

Du solltest Dich fragen ob Du oder sonst jemand aus Deinen Kommentaren 
mehr erfährst als aus dem Quellcode.
Das ist offensichtlich nicht der Fall.

Sowas wie
>ZaehlGelernt = ZaehlGelernt + 1    'inkrementiere Indexzähler
ist absolut überflüssig. Das gilt für alle anderen Zeilen auch.

Die Kommentare sollten klarlegen warum etwas geschieht oder auch in 
einem eine Stufe abstrakteren Sinne, was geschieht. Wer nicht versteht, 
was in einer einzelnen Zeile geschieht, muss erst noch die Sprache oder 
das programmieren lernen.

von Vitali B. (Gast)


Lesenswert?

>Du stellst keine Beziehung zwischen der Frage und ob sie bereits gelernt
>wurde her, sondern ob die akuelle schon gelernt wurde.

Leider weiß ich nicht, was du damit meinst. Kann mir nichts darunter 
vorstellen, wo die Beziehung dazwischen fehlt.


>> Wo liegt mein Fehler, dass die Fragen nicht mehr erscheinen, die bereits
>> als "gelernt" markiert wurden?

>Und was ist damit gemeint?
>Für mich ist die Frage unlogisch.

Sorry, ich habe meine Frage falsch formuliert. Sollte wie folgt lauten:

Wo liegt mein Fehler? Die Fragen erscheinen trotz des Klickens auf 
"bereits gelernt" weiterhin.


Ich weiß echt nicht weiter. Könnt ihr mir einen kleinen Denkanstoß 
geben?



Vielen Dank!

von STK500-Besitzer (Gast)


Lesenswert?

Vitali B. schrieb:
>>Du stellst keine Beziehung zwischen der Frage und ob sie bereits gelernt
>>wurde her, sondern ob die akuelle schon gelernt wurde.
>
> Leider weiß ich nicht, was du damit meinst. Kann mir nichts darunter
> vorstellen, wo die Beziehung dazwischen fehlt.

Deine Vokabeln bestehen doch jeweils aus der Gruppe:
"Frage", "Antwort" und "schon gelernt".
Leider gibt es keinen Zusammenhang zwischen den ersten beiden und dem 
letzten Teil der Gruppe.

von Vitali B. (Gast)


Lesenswert?

Also kurz umrissen:

Mein Programm bietet einmal ein Label, in dem die deutsche Vokabel 
angezeigt wird.

Darunter ein Textfeld, in dem dann die vermutete Antwort eingegeben 
werden kann (ohne weitere "Intelligenz": Textfeld wird nicht abgefragt).

Darunter wiederum befindet sich wieder ein Label, in dem dann die 
korrekte Antwort angezeigt werden kann.


3 Buttons stehen zur Verfügung:

"Nächste Frage" , "Korrekte Antwort aufdecken" und "Vokabel als 
'Gelernt' markieren".

Klickt man auf "nächste Frage", kommt nach dem Zufallsprinzip eine 
deutsche Vokabel auf das (wie oben beschrieben) erste Label. Nun kann 
der Benutzer seine vermutete Antwort eingeben. Klickt der Benutzer auf 
"Korrekte Antwort aufdecken", so wird ihm die richtige Antwort gezeigt.
Klickt er auf "Vokabel als 'Gelernt' markieren", wird die Vokabel nicht 
mehr bis zum Neustart des Programms angezeigt und erscheint somit nicht 
mehr im "Vokabel-Pool".

Das Programm holt die Daten aus einer Access-Datenbank.
Mein Vorhaben war, dass anhand dess Arrays "gelernteZufallszahlen" das 
Programm überprüft, welche Zufallszahl (und somit welcher zugeordnete 
Wert der "ID" der Access-DB) bereits angezeigt wurde, sodass die bereits 
als "gelernt" markierten Fragen nicht mehr erscheinen.

Ich möchte also die Zufallszahlen in eine Array schreiben und überprüfe 
jedes Mal beim Klick auf "nächste Frage", ob die anzuzeigende Frage 
bereits als gelernt markiert wurde. Ist dies der Fall, soll eine neue 
Frage erscheinen, die noch nicht als "bereits gelernt" markiert wurde.


Ich hoffe, das hilft! :)


Vielen Dank

von STK500-Besitzer (Gast)


Lesenswert?

Vitali B. schrieb:
> Ich möchte also die Zufallszahlen in eine Array schreiben und überprüfe
> jedes Mal beim Klick auf "nächste Frage", ob die anzuzeigende Frage
> bereits als gelernt markiert wurde. Ist dies der Fall, soll eine neue
> Frage erscheinen, die noch nicht als "bereits gelernt" markiert wurde.

Zwischen deinem Wunsch und der Wirklichkeit fehlt eine Schleife, die das 
Array nach schon gestellten Fragen durchsucht.

von Vitali B. (Gast)


Lesenswert?

Ich dachte, dass das die beiden Zeilen aus folgendem Code machen?:
1
While y < 500               'Solange y kleiner 500...
2
                If gelernteFragen(y) <> zufallszahl Then  'steht Zufallswert bereits in der Array "gelernteFragen"? Wenn nein, dann Frage/Antwort anzeigen

von Vitali B. (Gast)


Lesenswert?

Hallo!

Ich müsste das Programm morgen meinem Lehrer geben...
Könnt ihr mir vielleicht nochmals helfen?


Wäre echt super.


Danke!

von Karl H. (kbuchegg)


Lesenswert?

Formulier doch erst einmal in normalem Deutsch den Vorgang den du machen 
willst. Wenn du das schon nicht hinkriegst kannst du das auch nicht 
programmieren

Du hast einen 2-stufigen Prozess
der erste SChritt ist das Bestimmten der Nummer der Frage
Der zweite Schritt ist das Fragen und auswerten der Antwort

Wie funktioniert der erste Schritt?

  Gesucht ist also eine Zahl die
    a) zufällig ist
    b) deren Frage als "noch nicht gestellt" markiert ist

Du brauchst also eine Schleife. Wann endet diese Schleife?
Ganz einfach: wenn du eine derartige Zahl hast

  gefunden = false
  solange nicht gefunden
     bestimme eine Zufallszahl
     if Frage( Zufallszahl ) ist noch nicht gestellt then
       gefunden = true
  end solange

  -- an dieser Stelle haben wir eine Zufallszahl, deren zugehörige
  -- Frage noch nie gestellt wurde


Achtung: Das ist noch nicht alles. Du musst dir auch überlegen, wie du 
den Fall handhaben willst, dass es überhaupt keine nicht gestellte Frage 
mehr gibt.

von Vitali B. (Gast)


Lesenswert?

Hallo,

>Du brauchst also eine Schleife. Wann endet diese Schleife?
>Ganz einfach: wenn du eine derartige Zahl hast
>
>  gefunden = false
>  solange nicht gefunden
>     bestimme eine Zufallszahl
>     if Frage( Zufallszahl ) ist noch nicht gestellt then
>       gefunden = true
>  end solange


Ist das nicht identisch mit dem hier?

>           While y < 500               'Solange y kleiner 500...
>                If gelernteFragen(y) <> zufallszahl Then  'steht >Zufallswert 
bereits in der Array "gelernteFragen"? Wenn nein, dann >Frage/Antwort anzeigen
>                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
>                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
>                Else
>                    zufallszahl = r.Next(0, i)   ' Ansonsten neue >Zufallszahl
>                End If
>
>                y = y + 1 'inkrementiere Zählvariable
>            End While


Wenn ich es wüsste, würde ich nicht fragen.

von Karl H. (kbuchegg)


Lesenswert?

Vitali B. schrieb:

Wie kann

>>  gefunden = false
>>  solange nicht gefunden

identisch sein mit

>>           While y < 500               'Solange y kleiner 500...

?
Ist doch eine völlig andere Abbruchbedingung!

> Wenn ich es wüsste, würde ich nicht fragen.
Ich habe einen Zwiespalt in mir. Auf der einen Seite würde ich gerne 
sagen: Na, dann musst du das eben mal ausprobieren!
Auf der anderen Seite ist Programmieren nach der Methode "Versuch und 
Irrtum" selten eine gute Wahl, wenn es nur bei "Versuch und Irrtum" und 
unkontrolliertem Probieren bleibt.
Ein wenig probieren ist nicht schlecht und seine Ideen testen und im 
Debugger mal in Einzelschritten durchgehen und sich die Variablen 
ansehen ist so schlecht dann auch wieder nicht. Man lernt zumindest 
recht anschaulich, warum etwas nicht geht. Und oft genug entsteht dann 
daraus eine neue Idee, wie es dann richtig geht.

Hinweis: reduziere deine 500 während es Programmierens auf 5, sonst 
debuggst du dir einen Wolf. Während der Programmentwicklung nimmt man 
kleine Zahlen, damit alles überschaubar bleibt. Erst wenn alles 
funktioniert, schraubt man die Zahlen größer.

von Vitali B. (Gast)


Lesenswert?

Ok, ich werde es unter Berücksichtigung deines Hinweises probieren.

Melde mich dann wieder.

von Vitali B. (Gast)


Lesenswert?

So.

Habe es nun wie folgt programmiert:

Wird es so funktionieren?
Habe gerade kein Visual Studio zum testen hier.
1
            Dim gefunden As Boolean = False
2
3
            While gefunden = False
4
                zufallszahl = r.Next(0, i)
5
                If gelernteZufallszahlen(y) = zufallszahl Then
6
                    gefunden = True
7
                Else
8
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
9
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
10
                    picP1.Text = AngezeigtesBild(zufallszahl)
11
                End If
12
13
                y = y + 1
14
            End While


Danke!

von Robert L. (lrlr)


Lesenswert?

nein das funktioniert nicht

If gelernteZufallszahlen(y) = zufallszahl Then


das ist beim 1. mal (y = 0) also gelernteZufallszahlen(0) extrem 
unwahrscheinlich


also wird AngezeigteFrage aufgeführt

(also dein beschriebenes Problem)

obwohl z.b in gelernteZufallszahlen(1) die zufallszahl stehen würde..


(ich glaub das ist jetzt aber fast schon zu viel geholfen)

von Vitali B. (Gast)


Lesenswert?

Ok, heißt, dass ich noch eine Schleife um die WhileSchleife brauche?


Danke!

von Robert L. (lrlr)


Lesenswert?

der teil im else gehört auserhalb der schleife..

von Vitali B. (Gast)


Lesenswert?

Hallo, nun der veränderte Code:
1
y = 0
2
            Dim gefunden As Boolean = False
3
4
            While gefunden = False                              'solange nicht gefunden...
5
                zufallszahl = r.Next(0, i)                      'Zufallszahl generieren
6
                If gelernteZufallszahlen(y) = zufallszahl Then  'wenn Zufallszahl mit Zahl in der Array übereinstimmt
7
                    gefunden = True                             'als "gefunden" markieren
8
                End If
9
                y = y + 1                                       'Zählvariable erhöhen
10
            End While
11
12
            If gefunden = False Then
13
                lblQuestion.Text = AngezeigteFrage(zufallszahl)
14
                lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
15
                picP1.Text = AngezeigtesBild(zufallszahl)
16
            End If

Jetzt fehlt die Abbruchbedingung für den Index in der Array. :-(

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also so wird das doch nix überleg' dir doch erst mal fern von aller 
Sprache wie es funktionieren könnte (wenn man dann Probleme mit der 
Umsetzung hat kann man auch mal den lehrer fragen der ist nicht nur 
zum Tafelabwischen da!).
1
anzahlFragen = 500
2
fragen[anzahlFragen]    = {"Frage 1", "Frage 2", ...}
3
antworten[anzahlFragen] = {"Antwort 1", "Antwort 2", ...}
4
gelernt[anzahlFragen]   = {false, false, ...}
So... nun bestimmst du eine Zufallszahl und schaust ob diese schon 
gelernt wurde wenn ja würde ich einfach im Array nach vorne gehen und 
die nächste ungelernte Frage wählen sonst läuft dein Algorithmus im 
Zweifel unendlich lange...
Wenn nun eine Frage als gelernt markiert werden soll setzt du einfach 
gelernt[fragenummer] auf true und fertig.

von Vitali B. (Gast)


Lesenswert?

So.

Globale Variablen:
1
    Dim zufallszahl As Integer
2
    Dim ZaehlGelernt As Integer = 0
3
    Dim gelernt(5) As Boolean
4
    Dim y as Integer = 0


Button "nächste Frage":
1
        Dim AngezeigteFrage(5) As String
2
        Dim AngezeigteAntwort(5) As String
3
        Dim AngezeigtesBild(5) As String
4
        Dim i As Integer = 0
5
6
        picP1.Hide()
7
8
        Try
9
            con.Open()
10
            reader = cmd.ExecuteReader()
11
12
            While reader.Read()
13
                AngezeigteFrage(i) = reader("Frage").ToString
14
                AngezeigteAntwort(i) = reader("Antwort").ToString
15
                AngezeigtesBild(i) = reader("Bild").ToString
16
                i = i + 1
17
            End While
18
19
20
            y = 0
21
22
            While y <= 5
23
                If gelernt(y) = True Then
24
                    zufallszahl = r.Next(0, i)
25
                End If
26
                y = y + 1
27
            End While
28
29
30
            lblQuestion.Text = AngezeigteFrage(zufallszahl)
31
            lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
32
            picP1.Text = AngezeigtesBild(zufallszahl)



Button "Antwort gelernt":
1
            gelernt(y) = zufallszahl


Ich weiß beim besten Willen nicht weiter.

Gruß

von STK500-Besitzer (Gast)


Lesenswert?

1
    Try

und wo ist das Catch?


1
Button "Antwort gelernt":
2
3
            gelernt(y) = zufallszahl

Immer noch nicht gemerkt, dass das falsch ist, obwohl dir das schon 
jemand anders oben erzählt hat?

von Karl H. (kbuchegg)


Lesenswert?

>            y = 0
>
>            While y <= 5
>                If gelernt(y) = True Then
>                    zufallszahl = r.Next(0, i)
>                End If
>                y = y + 1
>            End While
>
>
>            lblQuestion.Text = AngezeigteFrage(zufallszahl)
>            lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
>            picP1.Text = AngezeigtesBild(zufallszahl)


gehs doch einfach mal auf einem Zettel Papier durch


Index   Frage         Antwort         gelernt
 1      2 + 2              4            nein
 2      8 * 3             24            nein
 3      12 + 8            20            nein
 4      3 + 4             12            nein
 5      8 - 6              2            nein

Wie gehst du vor.
Als erstes würfelst du eine Zahl zwichen 1 und 5. Sagen wir 3.
Jetzt schaust du bei gelernt, Index 3, nach, ob diese Frage schon 
gelernt wurde. Nein, wurde sie nicht. Also kannst du die Frage stellen.
  Wieviel ist 12 + 8 ?
Bei der richtigen Antwort 20 trägst du das ein: gelernt, Index 3, wird 
auf Ja gestellt


Index   Frage         Antwort         gelernt
 1      2 + 2              4            nein
 2      8 * 3             24            nein
 3      12 + 8            20            ja
 4      3 + 4             12            nein
 5      8 - 6              2            nein

Du würfelst wieder für die nächste Frage und deine Zufallszahl sagt dir, 
dass du Frage 5 nehmen sollst.
Also schaust du bei gelernt(5) nach, ob diese Frage eine ist, die du 
stellen sollst. Sie ist nicht als gelernt markiert (gelernt(5) steht auf 
Nein).
Also stellst du die Frage
 Wieviel ist 8 - 6 ?
Bei richtiger Antwort, 2, trägst du im gelernt Array, an der Stelle 5 
ein, dass diese Frage gelernt wurde:


Index   Frage         Antwort         gelernt
 1      2 + 2              4            nein
 2      8 * 3             24            nein
 3      12 + 8            20            ja
 4      3 + 4             12            nein
 5      8 - 6              2            ja

Nächste Frage. Du würfelst wieder (Zufallszahl bestimmen) und die 
Zufallszahl sagt, dir dass die nächste Frage, die Frage Nummero 3 wäre. 
Wie gewohnt siehst du nach, ob diese Frage eine zu lernende ist und 
stellst fest, dass gelernt(3) auf 'Ja' steht, du diese Frage also nicht 
mehr stellen brauchst. Daher würfelst du erneut und diesmal sei die 
Zufallszahl 2. Du schaust wieder nach und gelernt(2) sagt dir, dass 
diese Frage eine zu lernende ist.
ALso fragst du
  Wieviel ist 8 * 3 ?
und wenn der Benutzer die richtige Antwort gibt, nämlich 24, dann 
markierst du Frage 2 als nicht mehr zu lernende


Index   Frage         Antwort         gelernt
 1      2 + 2              4            nein
 2      8 * 3             24            ja
 3      12 + 8            20            ja
 4      3 + 4             12            nein
 5      8 - 6              2            ja

Und so gehst weiter und weiter, bis alle Fragen gelernt wurden.

Nimm jetzt mal deinen Code her, spiel ihn mal selber durch (also nicht 
einfach nur den COmputer arbeiten lassen und danach lametieren, dass 
nichts funktioniert, sondern DU bist der Computer und arbeitest das 
Programm ab) und sieh nach, was dein Code macht. Erfinde ein paar Daten, 
erfinde die Zufallszahlen und ansonsten machst du einfach nur genau das, 
was in deinem Programm steht. Du machst nicht das was du dir denkst das 
hier passieren müsste, sondern genau und 100% nur das, was in deinem 
Programm niedergeschrieben steht. Und das spielst du für ein paar 
Fragen/Antwort SPielchen durch, wobei du natürlich deine erfundenen 
Zufallszahlen auch mal so legst, dass du auf einer bereits gelernten 
Frage landest.


>            gelernt(y) = zufallszahl
wie soll denn das funktionieren?
gelernt(irgendwas) kann nur ja/nein, false/true sein. Du hast es doch 
selbst als Boolean definiert. Wie willst du denn da eine Zahl zuweisen. 
Die letzte Zufallszahl, mit der du deine Frage dann gestellt hast, sagt 
dir doch, welches gelernt, welcher Index davon, auf true zu setzen ist.

von Vitali B. (Gast)


Lesenswert?

Hallo Karl-Heinz,

das ist mir soweit auch geläufig, danke für deinen Beitrag! Habe es auch 
durchgespielt, habe aber noch ein Verständnisproblem mit der Schleife.

> und wo ist das Catch?

Das Catch gibt dann den Fehler in einer Msgbox aus. Habe es aus 
Platzgründen jetzt hier weggelassen, da es nichts mit der Funktionalität 
zutun hat.


>            gelernt(y) = zufallszahl
sollte heißen:
>            gelernt(zufallszahl) = True


Ich probiere es jetzt das letzte Mal, ansonsten bekenne ich mich zu 
einer schlechten Note.

Hier der Codeausschnitt meines nun nochmals modifizierten Programms:
1
zufallszahl = r.Next(0, i)
2
            i = 0
3
            While i <= 500
4
                If gelernt(i) <> True Then
5
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
6
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
7
                    picP1.Text = AngezeigtesBild(zufallszahl)
8
                End If
9
                i = i + 1
10
            End While


Gruß

von STK500-Besityer (Gast)


Lesenswert?

nee, immer noch falsch geraten.

Beispiel:
Deine Zufallszahl ist 6
gelernt(3) ist false, gelernt(6) ist aber true, weil die Frage schon man 
richtig beantwortet wurde.
Wo ist der Fehler?

von Vitali B. (Gast)


Lesenswert?

1
If gelernt(zufallszahl) <> True Then

Dann wohl so. Wenn das stimmen sollte, geht es trotzdem nicht ;-)

von Karl H. (kbuchegg)


Lesenswert?

Vitali B. schrieb:
>
1
> If gelernt(zufallszahl) <> True Then
2
>
>
> Dann wohl so. Wenn das stimmen sollte, geht es trotzdem nicht ;-)

Wo in deiner Schleife bestimmst du denn eine neue Zufallszahl.

Ich kann mich nur wiederholen: Spiel das selber als Computer durch! Dann 
muss dir doch auffallen, dass du immer dieselbe Frage daraufhin 
untersuchst, ob sie schon gestellt wurde oder nicht, weil du in der 
Schleife keine neue Zufallszahl erzeugst.

Ich will dich doch nicht damit häkeln, dass ich dir immer wieder 
nahelege, dass DU selber mal dein Programm mit von dir erfundenen 
Zufallsdaten durchspielst. Aber schön langsam hab ich das Gefühl mit den 
Mund fusselig zu reden (im übertragenen Sinne).

von Vitali B. (Gast)


Lesenswert?

1
            zufallszahl = r.Next(0, i)
2
            i = 0
3
            While i <= 500
4
                If gelernt(zufallszahl) <> True Then
5
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
6
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
7
                    picP1.Text = AngezeigtesBild(zufallszahl)
8
                Else
9
                    zufallszahl = r.Next(0, i)
10
11
                End If
12
                i = i + 1
13
            End While

von Karl H. (kbuchegg)


Lesenswert?

ok.
und wie kommst du jetzt aus der Schleife raus, sobald du eine zu 
fragende Frage hast?

von Vitali B. (Gast)


Lesenswert?

Das weiß ich leider nicht.

von Karl H. (kbuchegg)


Lesenswert?

Dann überleg dir was.
Wann endet denn die Schleife

     While i <= 500

von Vitali B. (Gast)


Lesenswert?

Jetzt muss ich immer häufiger auf "Nächste Frage" klicken, je mehr 
Antworten bereits als "gelernt" markiert wurden.

Hängt dies mit der Abbruchbedingung die Karl-Heinz geschrieben hat 
zusammen?

Ich habe zwar schon was von einer Abbruchbedingung gelesen, weiß aber 
nicht, wie ich die in der Schleife realisieren soll.

von Karl H. (kbuchegg)


Lesenswert?

Wofür steht eigentlich das i in

    zufallszahl = r.Next(0, i)

?

Das frag ich mich schon die ganze Zeit und mir will einfach kein 
wirklich stichhaltiger logischer Grund einfallen, warum da i steht.

von Vitali B. (Gast)


Lesenswert?

i ist eine Zählvariable weiter oben, die die Anzahl der Elemente in 
einem Array angibt.

Das Ganze bedeutet nur, dass eine Zufallszahl zwischen 0 und des 
höchsten Indexes (i) generiert werden soll.

von Vitali B. (Gast)


Lesenswert?

So nun:
1
            zufallszahl = r.Next(0, i)
2
            i = 0
3
            While i <= 500
4
                If gelernt(zufallszahl) <> True Then
5
                    lblQuestion.Text = AngezeigteFrage(zufallszahl)
6
                    lblRightAnswer.Text = AngezeigteAntwort(zufallszahl)
7
                    picP1.Text = AngezeigtesBild(zufallszahl)
8
                    Exit While
9
                Else
10
                    zufallszahl = r.Next(0, i)
11
12
                End If
13
                i = i + 1
14
            End While

Und ja, es läuft :-)

von Karl H. (kbuchegg)


Lesenswert?

Vitali B. schrieb:

> Das Ganze bedeutet nur, dass eine Zufallszahl zwischen 0 und des
> höchsten Indexes (i) generiert werden soll.

Siehst du, und das ist Blödsinn.
Wenn du 500 Fragen hast, dann brauchst du eine Zufallszahl zwischen 0 
und 499 (inklusive, oder eben 1 und 500. keine Ahnung ob in VB bei 0 
oder bei 1 angefangen wird zu zählen). Und zwar jedes mal!

Welchen Sinn soll es haben, wenn du dir zunächst eine Zahl zwischen 0 
und 1 generieren lässt? Auf die Art hat doch Frage 328 niemals eine 
Chance als allererste drann zu kommmen.

Wie hab ich das denn weiter oben gemacht? Ich hatte 5 Fragen und die 
erste Zufallszahl mit der ich hochgekommen bin war 3 (also eine Zahl 
zwischen 1 und 5). Ich habe NICHT nach einer Zahl zwischen 1 und 1 
gesucht, weil ich das 1te mal versucht habe eine Frage zu finden. Und 
beim 2-ten mal dann eine Zufallszahl zwischen 1 und 2. Ich habe immer 
gleich gewürfelt! Immer eine Zufallszahl zwischen 1 und 5

von Robert L. (lrlr)


Lesenswert?

>>          gelernt(y) = zufallszahl


>Immer noch nicht gemerkt, dass das falsch ist, obwohl dir das schon
>jemand anders oben erzählt hat?


das ist übrigens NICHT falsch, sondern einfach ein anderes "system" (das 
aber genauso funktionieren würde, wenn richtig ausprogrammiert)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.