Lernprogramm in C programmieren

Hallo liebe C-Experten!

Ich habe in 3 Monaten eine wichtige Prüfung mit umfangreichem Stoff. Zu diesem Zweck möchte ich mir ein Lernprogramm in C schreiben.
Das Programm soll zufällig(!) Fragen aus einem Fragenpool auswählen, auf Aufforderung die Antwort anzeigen und man kann anschließend selbst auswählen, ob man die Frage richtig oder falsch beantwortet hat (kein Multiple-Choice)

Soweit, so gut.

Nun möchte ich aber, dass das Programm falsch beantwortete Fragen erst nach einem bestimmten Zeitraum (zb. frühestens nach zehn Fragen) wieder anzeigt. Eine 3 mal richtig beantwortete Frage soll noch viel später wieder angezeigt werden dürfen (zb. nach 50 Fragen)
Sobald diese jedoch nur einmal wieder falsch beantwortet wird, gilt wieder der Zeitraum für falsch beantwortete Fragen.

Nun hab ich aber vor 2 Jahren das letzte mal C programmiert. Das programmieren der Fragen selbst dürfte mir hoffentlich keine probleme
machen, aber ich hab noch keine so genaue Idee, wie ich das Problem mit Zufallsgenerator und Zähler (für Mindestzeitraum) löse… Oder wäre eventuell C++ mit Objektorientierung und dementsprechenden Eigenschaften einfacher?

Vielleicht bemerkt auch irgendjemand noch Denkfehler oder Dinge die ich übersehen hab oder hat schlichtweg eine bessere Idee?

Vielen Dank für eure Tipps!
Bettina

Hallo Bettina,

Also das Prinzip ist ja dasjenige, welches man bei dem 3-Teiligen Karteikasten verwendet, dazu giebt es jede Menge fertige Programme als Share- und Freeware.

Am einfachsten bildest du mit deinen Fragen verschiedene Listen.

Am Anfang befinden sich alle Fragen in der ersten Liste.
Falsch beantworte Fragen kommen in Liste 2.
Nach 10 Fragen aus Liste 1 nimmst du eine aus Liste 2 nach 50 Fragen eine aus Liste 3.
3x richtig beantwortete Fragen kommen in Liste 3
Falsch beantwortete Frage aus Liste 3 kommen wieder in Liste 2

Wenn Liste 1 leer ist nimmst du eine Frage aus Liste 2, wenn die auch leer ist halt aus Liste 3.
Fragen entnimmst du am Anfang der Liste, Elemente werden am Ende der Liste eingtragen.

Die Listen musst du natürlich auf der Platte ablegen.

MfG Peter(TOO)

Ahoi also ich habe vor Jahren einen Zufallsgenerator programmiert. Es war ein Programm das beim PC-start einen Blondienen Witz anzeigt. Er wählt einen aus hundert aus. Hier kannst du es runterladen http://old.quellcodes.de/cpp_misc.php
das Prog heißt Witzometer.
Hoffe es hilft dir ein bischen weiter.

Valentin

also ich habe vor Jahren einen Zufallsgenerator
programmiert. Es war ein Programm das beim PC-start einen
Blondienen Witz anzeigt. Er wählt einen aus hundert aus. Hier
kannst du es runterladen http://old.quellcodes.de/cpp_misc.php
das Prog heißt Witzometer.
Hoffe es hilft dir ein bischen weiter.

Aloha!

Danke ich werds mir nach der Arbeit runter saugen *g*
Und sei’s nur um die Witze, schließlich bin ich Blondine … *schmunzel*

Liebe Grüsse (von der blonden)

Bettina

Hallo Peter!

Also das Prinzip ist ja dasjenige, welches man bei dem
3-Teiligen Karteikasten verwendet, dazu giebt es jede Menge
fertige Programme als Share- und Freeware.

Hast du vielleicht irgendwo einen Programmnamen oder Link auf Lager?

Am einfachsten bildest du mit deinen Fragen verschiedene
Listen.

Naja, da werden dann die Fragen aber nicht zufällig ausgewählt oder hab ich da was falsch verstanden?
Obwohl… bei der Menge an Fragen is es eh bald egal… *kopfraucht*

Danke für deine Hilfe,
Bettina

Hallo Bettina,

Hast du vielleicht irgendwo einen Programmnamen oder Link auf
Lager?

http://www.download.com/Teaching-Tools/3150-2051-0.h…

MfG Peter(TOO)

1 Like

Die Idee von Peter (Listen) ist ein sehr guter Ansatz. In C++ kannst
du Listen sehr einfach verwalten, hier gibt es die stl-container,
u.a. std::list für listen.
Einfügen/Entnehmen geht jeweils über eine Funktion. Desweiteren wird
unter random_shuffle definiert, womit du Listen so richtig
durcheinander würfeln kannst. Die Grundlage ist somit gegegen, falls du
dich entscheidest ein eigenes Programm zu schreiben.

Gruß Markus

1 Like

Hallo JamaicanPearl,

einige Varianten, Dein Problem zu lösen,
wurden ja im Thread genannt. Von mir dazu
noch etwas grundsätzlicher Senf :wink:

Ich habe in 3 Monaten eine wichtige Prüfung mit umfangreichem
Stoff. Zu diesem Zweck möchte ich mir ein Lernprogramm in C
schreiben.

Wenn die Prüfung wichtig ist, dann nimm sie
ernst und vergeude nicht Deine Zeit mit solchen
Dingen. Programmiere ein wenig in der übrigen Zeit
herum, aber binde dieses niemals an Deine Prüfung.

Das Programm soll zufällig(!) Fragen aus einem Fragenpool
auswählen, auf Aufforderung die Antwort anzeigen und man kann
anschließend selbst auswählen, ob man die Frage richtig oder
falsch beantwortet hat (kein Multiple-Choice)

Schreib Dir Papp-Karten je mit Fragen und Antworten drauf.
Wenn Du fertig bist (mit Schreiben), beherrschst Du den
Stoff und es gibt keine Notwendigkeit für ein „Lernprogramm“ :wink:

Nun möchte ich aber, dass das Programm falsch beantwortete
Fragen erst nach einem bestimmten Zeitraum (zb. frühestens
nach zehn Fragen) wieder anzeigt. Eine 3 mal richtig
beantwortete Frage soll noch viel später wieder angezeigt
werden dürfen (zb. nach 50 Fragen)
Sobald diese jedoch nur einmal wieder falsch beantwortet wird,
gilt wieder der Zeitraum für falsch beantwortete Fragen.

:wink:

Nimm die Pappkarten, bei denen Du völlig sicher bist, dass
Du die Antwort beherrschst, aus dem Stapel raus :wink:

Nun hab ich aber vor 2 Jahren das letzte mal C programmiert.
Das programmieren der Fragen selbst dürfte mir hoffentlich
keine probleme machen, aber ich hab noch keine so genaue Idee,
wie ich das Problem mit Zufallsgenerator und Zähler
(für Mindestzeitraum) löse… Oder wäre eventuell C++
mit Objektorientierung und dementsprechenden Eigenschaften
einfacher?

Schon die Fragestellung sollte Dir deutlich machen, dass
das Werkzeug C/C++ für Dich „auf die Schnelle“ nicht
geeignet ist, um für eine wichtige Prüfung zu lernen.
Nimm Deinen Kartenstapel und setze Dich in ein Eiscafé
oder in den Park :wink:

Vielleicht bemerkt auch irgendjemand noch Denkfehler oder
Dinge die ich übersehen hab oder hat schlichtweg eine bessere
Idee?

Wie gesagt, wenn die Prüfung vorbei ist und Du den Kopf
frei hast, sollte es Dir leichter fallen, in die
Programmierung und die Struktur wieder einzudringen.
Noch dazu nach dem Erfolgserlebnis der bestandenen
Prüfung :wink: Das wird dann ein Programm für die
„nächste Prüfung“.

Zum Programm: Jede Frage ist eine kleine
Struktur aus Text, Status und wiederhol_Zähler.
Dann führst Du einen globaler_Zähler
mit, in dem steht, wieviele Fragen
Du gerade bearbeitet hast. Der Status
bezeichnet, „wie“ Du die konkrete Frage be-
antwortet hast, bei „richtig“ gilt Status=Status+1,
bei falsch gilt Status=Status-1.
Bei der Beantwortung der Frage gilt dann:
if (status > 2) wiederhol_Zähler = globaler_Zähler + 50
if (status > 1) wiederhol_Zähler = globaler_Zähler + 20
if (status == 0) wiederhol_Zähler = globaler_Zähler + 5
if (status > -1) wiederhol_Zähler = globaler_Zähler + 3
sonst: if wiederhol_Zähler = globaler_Zähler + 1

dann: globaler_Zähler = globaler_Zähler + 1

jetzt neue_nummer auswürfeln und schauen ob
globaler_Zähler >= wiederhol_Zähler[neue_nummer]
der neuen Frage ist. Wenn nicht, andere
Frage auswürfeln (bis globaler_Zähler >= wiederhol_Zähler[…])

Grüße

CMБ

Hallo Semjon!

Schreib Dir Papp-Karten je mit Fragen und Antworten drauf.
Wenn Du fertig bist (mit Schreiben), beherrschst Du den
Stoff und es gibt keine Notwendigkeit für ein „Lernprogramm“
:wink:

Danke für den Tipp, aber auf Pappe sind die Fragen schon verewigt. :smile:
Das mit dem Beherrschen des Stoffes stimmt leider immer nur für die nächsten 2 Tage, bei dieser Menge Stoff leider zuwenig Zeit.

Übrigends: Mein Freund hat mein Posting gelesen, das Programm bereits geschrieben (allerdings in Java) und sich angeboten, bei Gelegenheit die Fragen zu digitalisieren *g* (Das Imponier-Gen der Männer ist schon eine schöne Erfindung :smile:))

Ich hab mit dem Programm also keine Arbeit mehr :]

Schon die Fragestellung sollte Dir deutlich machen, dass
das Werkzeug C/C++ für Dich „auf die Schnelle“ nicht
geeignet ist, um für eine wichtige Prüfung zu lernen.
Nimm Deinen Kartenstapel und setze Dich in ein Eiscafé
oder in den Park :wink:

Das mit dem Eiscafe ist eine gute Idee, darum danke für deine Antwort, ich geh jetzt auf ein Eis :]

Ciao, Bettina