Computerhilfen.de Logo
Forum
Tipps
News

Vokabeltrainer in c

HI leute,
ich habe eine Aufgabenstellung bekommen, wovon ich keine Ahnung habe ??? :'(
kann mir da jemand weiterhelfen???wäre sehr nett
lg




Schreiben Sie ein Programm blackjack.c, welches das gleichnamige Kartenspiel (auch bekannt als
17 und 4) implementiert: Zwei Spieler ziehen abwechselnd eine Karte vom Stapel und addieren den
Kartenwert zu ihrem aktuellen Punktestand dazu. Ist der Punktestand gr¨oßer als 21 hat man verloren.
Ansonsten gewinnt derjenige mit der h¨oheren Punktzahl. Man kann jederzeit aufh¨oren, aber
auch weitere Karten ziehen, wenn der Gegner keine Karte mehr nehmen m¨ochte.
Der Spielverlauf sollte so aussehen, dass ein menschlicher Spieler und der Computer abwechselnd eine
Karte vom Stapel ziehen und entscheiden, ob sie weitermachen wollen. Die Karten werden dabei der
Reihe nach von einem gemischten Stapel heruntergenommen. Ist der Computer am Zug, sollte dieser
halbwegs intelligent entscheiden, ob es klug ist, eine weitere Karte zu ziehen oder nicht. Sind beide
Spieler (Computer und Mensch) fertig, ermittelt der Computer den Gewinner.
Das Risikoverhalten des Computers soll in drei Stufen ver¨anderbar sein:
1: ¨angstlich, 2: normal, 3: mutig.
Das Programm soll auch einen Demo-Modus haben, in dem der Computer 1000 mal gegen sich selbst
spielt. Auf diese Weise k¨onnen Sie testen wie gut der Algorithmus ist, mit dem der Computer seine
Karten zieht. Beispiel: Wie oft gewinnt der Computer bei 1000 Versuchen mit Stufe 2 gegen Stufe
3? Aufgrund der so gewonnen Daten k¨onnen Sie Abstimmungen am Programm vornehmen und die
Spielstufen so einstellen, dass es m¨oglichst interessant wird .
Beachten Sie, dass einmal gezogene Karten nicht mehr auf dem Stapel liegen!!
Nehmen Sie ein Blatt mit 32 Karten (Skat-Karten): As = 11, K¨onig= 4, Dame=3, Bube=2, alles
andere z¨ahlt was draufsteht, zwei Asse z¨ahlen als 21. 

« Letzte Änderung: 09.09.08, 12:29:09 von morpheus51 »

Antworten zu Vokabeltrainer in c:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

1.) was hat der Inhalt Deines Posts mit dem Titel Deines Posts zu tun?

2.) Solltest Du, wenn Du eine solche Aufgabenbestellung bekommst, das aber so wie Du zugibst nicht auf die Reihe bekommst, darüber nachdenken, ob Du a.) nicht im falschen Kurs bist und wie Du b.) den verpennten Stoff schleunigst nachholen kannst.

3.) Du erwartest jetzt nicht im Ernst, dass Dir hier jemand das Progrämmchen runterschreibt und Deine (Denk-)Faulheit damit unterstützt oder kompensiert?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Du solltest wenigstens den Anfang machen und etwas präsentieren, dann kann man dir weiterhelfen. Aber das ganze nur liefern wäre einfach zu einfach.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Klingt doch gar nicht so schwer. Ich würde mir erstmal Gedanken über einige Datenstrukturen machen. Also z.B. für die Karten ein struct

typedef struct card {
    int value; // Wert der Karte
    char text[10]; // Text, z.B. "König" oder "Sieben"
} card;
Die dann in einem Array ablegen, das für jeden Durchgang neu gemischt wird (mit Hilfe von rand() o.ä.)
card deck[32] = {
     { 7, "Sieben" },
     { 7, "Sieben" },
     { 7, "Sieben" },
     // usw. jede Karte 4x ergibt ein Deck von 32 Karten

Dann noch für die Spieler:
typedef struct player {
    bool ki; // true: Computer, false: Human
    int level; // nur für Computer. aengstlich, normal, mutig
    int value; // Wert aller erhaltenen Karten
    bool newCard; // true: nimmt noch eine neue Karte
    int next; // Index der nächsten Karte im cards-Array
    card *cards[9]; // Array der bisher erhaltenen Karten (Pointer)
} player;
Diese Strukturen global definieren oder immer an die einzelnen Funktionen weiterreichen.

Jetzt brauchst du nur noch ein paar Funktionen, die die Spiellogik implementieren, also für ein
- Spiel
  1. Initialisieren der Spieler, mischen der Karten (man array shuffle)
  2. Ausführen von Spielzügen, bis ein Ereignis eintritt (ein Spieler mehr als 21 hat) oder kein Spieler mehr eine Karte ziehen möchte
  3. Auswertung und Anzeige des Ergebnisses.

- Spielzug (am besten 2 getrennte Funktionen für Comp/Mensch)
  1. Entscheidung, ob noch eine Karte gezogen werden soll
  2. ggf. Karte ziehen (einfach die nächste aus dem Array)
  3. Situation bewerten (mehr als 21?)

Dann natürlich noch Hilfsfunktionen für die KI, Check auf >21, mischen der Karten, ...
So, das sollte für den Anfang reichen, jetzt bist du erstmal wieder dran...

danke, das hat mir schon sehr weitergeholfen...ich tüfftel jetzt mal bisschen weiter ;D

hab mich jetzt für den Vokabeltrainer entschieden

Aufgabe 3
Schreiben Sie eine Vokabeltrainer Vokabel.c f¨ur Englische Sprache.
Er sollte zwei ¨Ubungsm¨oglichkeiten bieten:
• Trainieren von Vokabeln aus einer Liste mit englisch-deutschen Wortpaaren in zuf¨alliger Reihenfolge:
Das englischeWort wird gezeigt, das deutsche muss eingegeben werden. Nach Eingabe einer
L¨osung, meldet das Programm entweder richtig oder zeigt die richtige L¨osung. Nicht gewusste
W¨orte werden sp¨ater (aber nicht sofort) noch einmal dargeboten. Gewusste W¨orte werden kein
zweites Mal gezeigt. Nach jedem Durchgang soll zur Motivation angezeigt werden, wieviele
W¨orter schon gel¨ost worden und wie viele noch zu erwarten sind. Die Aufgabe l¨auft so lange, bis
alle W¨orte gewusst werden oder der Lerner das Programm beendet. Als Statistik soll die Anzahl
der richtigen und die der falschen L¨osungen gezeigt werden. Die mittlere ben¨otigte Zeit soll f¨ur
richtige und falsche L¨osungen getrennt Protokolliert und ausgegeben werden.
Beispiel:
summary
L¨osung: Zusammenfassung
Richtig: 1, noch 24 zu l¨osen
Der Nutzer des Programms soll zwischen verschiedenen Wortlisten w¨ahlen k¨onnen, z.B. Grundwortschatz,
Aufbauwortschatz, Fachenglisch, Pflanzen, Tiere . . . Diese Listen sollen in verschiedenen
Dateien auf der Festplatte liegen, z.B: gw.dat, aw.dat, fe.dat, pflanzen.dat, tiere.dat.
• ¨Uben von unregelm¨assigen Verben: Es wird die erste Form (Infinitiv) gezeigt. Die beiden anderen
Formen (Pr¨ateritum und Partizip Perfekt) m¨ussen eingegeben werden. Wieder sollen bei Fehlern
die richtigen L¨osungen gezeigt werden und die Aufgabe sp¨ater noch einmal gestellt werden.
Auswertung wie beim einfachen Vokabeltraining. Auch die Liste mit den unregelm¨aßigen Verben
soll sich in einer Datei befinden.
Beispiel:
to be
Pr¨ateritum: was
Part. Perfekt: been
Stellen Sie sicher, dass nicht zwei mal hintereinander die gleiche Aufgabe dargeboten wird, es sei denn,
es ist nur noch eine ¨ubrig.

mein Ansatz:


/* Array9.c - mehrdimensionales Stringarray */
#include <stdio.h>
#include <string.h>
main() {
// 10=Anzahl der Strings
// 50=L¨ange der Strings
//char a[];
int i;
char a[255];
char s[][2][50]=
{
{"I","ich"}
};

printf ("Uebersetze %s: ",s[0][0]);
gets(a);

//int i;
for(i=0;i<1;i++) { //die Zahl steht für die Zeilen
// Das erste und zweite Wort
// werden verglichen
if(strcmp(s[1],a)==0) {
printf("Richtig: %s heisst %s\n",s[0],a);
} else {
printf("Falsch: %s heisst leider nicht %s\n",s[0],a);
}
}
}

hab jetzt .dat dateien mit den Vokabellisten erstellt, wie lese ich die ein?
HAbe eine Datei für die englischen wörten und eine für die Deutschen....wie krieg ich den zusammenhang?
     

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ui, da hast du dir dann die (meiner Meinung nach) schwierigere Aufgabe ausgesucht. Gerade in C kann das ein richtiges rumgefrickel werden. In C++ könnte man mit Streams, dynamischen Arrays und Strings arbeiten...
Naja, was solls. Aus Dateien lesen:

FILE *pFile;
pFile = fopen( "C:\\whatever.dat", "r" );
if( pFile == NULL ) printf( "Error" );
else {
    char buffer[100];
    fgets( buffer, 100, pFile );
    //oder
    fscanf( pFile, "%s", buffer );
    close( pFile );
}

Ich würde auch das deutsche und englische Wort in eine Datei schreiben, jedes Paar auf einer Zeile oder jedes Wort auf einer Zeile, also
I Ich
You Du
oder
I
Ich
You
Du
usw.

Als Datenstruktur eher ein Array von structs als mehrdimensionale Arrays, also
typedef struct pair {
    char english[100];
    char german[100];
} pair;

pair myWords[100];

Problem ist, dass man das Array groß genug wählen muss, dass alle Wörter reinpassen; dass man mitzählt, wie viele wirklich drin sind (beim Einlesen); dass man es evtl. noch größer macht, um ggf. falsch gewusste nochmal hinten anhängen zu können usw.
Für die unregelmäßigen Verben braucht man dann wieder eine ganz andere Struktur sowohl beim Einlesen als auch beim Speichern und Abfragen...

« DelphiVisual Basic.Net und Visual Studio!? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!