Switch&Case Wor.Ausgabe, Wie? Hilfe!
-
Hallo,
Ich bin so ziemlich Anfänger in C++ Boarland Builder6, ich versuche mir diese Programmiersprache schon lange neben der Schule als Hobby bei zu bringen. Nun ja nicht so einfach wie ich finde, wenn man ausser ein schlaues Büchlein und den doofen Compiler, niemanden hat der einen sagt und zeigt wies geht. Darum dachte ich es wäre mal an der Zeit, die schlauen Leut's im Forum zu fragen.
Also mein Anliegen ist,
ich möchte ein Program schreiben (in Consolen-Form), in dem ich ein Saktblatt habe und per Zufall 10Karten ausgegeben werden. Also dachte ich ich fang so an das ich nen Zufallswert ermitteln lasse also die Zahlen 1 bis 32 und wollte in einen Switch & Case Schleife diesen Zahlen den Namen der Karten geben (also: 1= Karo7, 2=Karo8, 3=Karo9 ...). Hmm, nunja dies hat leider nicht so geklappt wie ichs mir vorgestellt hatte und dachte ihr könnts mir mal erklären wie des so funktionier, DANKE!
Mein Anfang:
//-----------------------------------------------------------------------------
//----- Karten geben! ----------------------------------13.Juni 2006--
//-----------------------------------------------------------------------------#include <iostream.h>
//--- Initialisierung ---------------------------------------------------------
int Karten[32];
int Karte = 10;//--- Part. Karte mischen -----------------------------------------------------
void Skatblatt()
{
randomize();
int i;
for(i=1;i<=10;i++)
{
Karte = rand();do
{
Karte = Karte % 32;
}
while(Karte>10);
Karte++;
Karten[i] = Karte;
}}
//-----------------------------------------------------------------------------
main()
{
Skatblatt();/* Hier sollte dann eigentlich der Teil mit
SWITCH & CASE hin, aber ich weiß nicht wie
*/int i;
for(i=1;i<=10;i++)
{
cout << i << ". Gezogene Karte ist " << endl;
}getchar();
return 0;
}Also wär echt toll, wenn ihr mir helft
.PS: Wie schon gesagt ich bin der totale noob, wäre cool, wenn ihrs mir versucht zu erklären das ihr nen bissel Rücksicht auf meine Dummheit nehmt, also nen bissel erläutern wär voll nett. so schon mal nen -mächtigen DANK an alle die mir helfen wollen-
Mfg, Tobi
-
[cpp] //----------------------------------------------------------------------------- //----- Karten geben! ----------------------------------13.Juni 2006-- //----------------------------------------------------------------------------- #include <iostream.h> //--- Initialisierung --------------------------------------------------------- int Karten[32]; int Karte = 10; //--- Part. Karte mischen ----------------------------------------------------- /* void Skatblatt() { randomize(); int i; for(i=1;i<=10;i++) { Karte = rand(); // ermittelt zwar zufallszahlen, aber enthaelt auch gleiche Zahlen // dh. gleiche karten --> bestimmt nicht gewollt oder? do { Karte = Karte % 32; } while(Karte>10); Karte++; Karten[i] = Karte; } } */ //----------------------------------------------------------------------------- // besser waere das array zu fuellen und dann den inhalt zu vertauschen void Skatblatt() { int i; for(i=0;i<32;i++) { Karten[i] = i; } for (i=0;i<1000;i++) // 1000 ist willkuerlich gewaehlt { int pos1,pos2,temp; pos1=rand()%32; pos2=rand()%32; temp=karten[pos1]; karten[pos1]=karten[pos2]; karten[pos2]=temp; } } //----------------------------------------------------------------------------- int main() { char* farbe[]={"Karo","Herz","Pik","Kreuz"}; char* wert []={"ASS","ZEHN","KOENIG","DAME","BUBE","9","8","7"}; randomize(); // wird nur einmal gebraucht, also reicht es hier Skatblatt(); // mischt die karten // gibt die ersten 10 karten aus int i; for(i=0;i<10;i++) { cout << i << ". Gezogene Karte ist "; cout << farbe[karten[i]/8] << " " << wert[karten[i]%8] << endl; } // oder mit switch case for(i=0;i<10;i++) { cout << i << ". Gezogene Karte ist "; switch (karten[i]) { case '0': cout << "Karo ASS" << endl; break; case '1': cout << "Karo Zehn" << endl; break; // usw. aber sehr umständlich } } getchar(); return 0; } [/cpp]
-
Schönes Gefrickle...
Mensch, ihr seid hier im C++ Forum. Benutzt auch C++...
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <ctime> using namespace std; class karte { friend ostream& operator<<( ostream& os, karte & k ); private: unsigned char farbe; unsigned char wert; static string farben[4]; static string werte[9]; public: karte( ) : farbe( 0 ), wert( 0 ) { }; karte( unsigned char f, unsigned char w ) : farbe( f ), wert( w ) { }; karte( const karte &k ) : farbe( k.farbe ), wert( k.wert ) { }; ~karte( ) { }; }; string karte::farben[ 4 ] = { "Herz", "Karo", "Kreuz", "Pik" }; string karte::werte[ 9 ] = { "6", "7", "8", "9", "10", "Bube", "Dame", "Koenig", "Ass" }; ostream& operator<<( ostream& os, karte & k ) { os << k.farben[ k.farbe ] << " " << k.werte[ k.wert ]; return os; } class stapel { private: vector< karte > kartenstapel; public: stapel( ) { srand( time( 0 ) ); for( unsigned char farbe = 0; farbe < 4; ++farbe ) for( unsigned char wert = 0; wert < 9; ++wert ) kartenstapel.push_back( karte( farbe, wert ) ); }; ~stapel( ) { }; void mischen( ) { random_shuffle( kartenstapel.begin( ), kartenstapel.end( ) ); }; karte abheben( ) { karte k = kartenstapel.back( ); kartenstapel.pop_back( ); return k; }; }; int main( ) { stapel kartenstapel; kartenstapel.mischen( ); karte hand1[5]; karte hand2[5]; for( int i = 0; i < 5; ++i ) { hand1[ i ] = kartenstapel.abheben( ); hand2[ i ] = kartenstapel.abheben( ); } cout << "Spieler 1:" << endl; for( int i = 0; i < 5; ++i ) cout << "Karte " << i << ": " << hand1[ i ] << endl; cout << endl; cout << "Spieler 2:" << endl; for( int i = 0; i < 5; ++i ) cout << "Karte " << i << ": " << hand2[ i ] << endl; cout << endl << endl; }Greetz, Swordfish
-
-
Ja ne is klar, Fisch ne.... ich versteh eigentlich mal kein wort in deinem code *g*, wie shcon gesagt ich versuchsmir sleber bei zu bringen und das auch nur sehr muehsehlich neben der schule. der erste beitrag ging ja noch halb wegs nuja trotzdem danke, ich denke es wird schon funktionieren auch wenn ich net weiss wie :(.... naja danke und tschauii
mfg, tobi
-
Swordfish, du spielst wohl kein Skat, oder?
string karte::farben[ 4 ] = { "Herz", "Karo", "Kreuz", "Pik" };
string karte::werte[ 9 ] = { "6", "7", "8", "9", "10", "Bube", "Dame", "Koenig", "Ass" };4 * 9 = 32 ???
Außerdem ist mir aufgefallen, daß du "random_shuffle" und "srand" benutzt, aber random_shuffle verwendet intern gar nicht den rand(), sondern liefert eigentlich so wie du ihn verwendest immer die selbe Zufallsfolge (zumindestens war es so bei meinem BCB5-Compiler, daher hatte ich eine eigene Zufallsklasse als dritten Parameter bei random_shuffle angegeben).
-
frodo1, vieleicht koenntest du mir ja mal den teil des progs erläutern, ich steig hier nicht ganz durch:
for (i=0;i<1000;i++) // 1000 ist willkuerlich gewaehlt
{
int pos1,pos2,temp;
pos1=rand()%32;
pos2=rand()%32;
temp=karten[pos1];
karten[pos1]=karten[pos2];
karten[pos2]=temp;
}danke!
mfg, tobi
-
Tobi, kannst du dann wenigstens cpp-Tags verwenden!? Naja, ich wills dir 'mal erklären (auch wenn ich den Code für Hässlich halte):
for( i = 0; i < 1000; i++ ) { int pos1 = rand( ) % 32; // wir suchen uns zwei zufällige Positionen int pos2 = rand( ) % 32; // im kartenstapel. rand( ) % 32 gibt eine // zufällige Zahl im bereich 0 <= x <= 31. // und dann tauschen wir die beiden Karten aus: // was 'mal // karten[ pos1 ] gewesen, ist jetzt // karten[ pos2 ] und vice versa. int temp = karten[ pos1 ]; karten[ pos1 ] = karten[ pos2 ]; karten[ pos2 ] = temp; } // das Ganze machen wir jetzt tausen mal und hoffen dadurch 'ne shöne // unordnung zu hinterlassen...Th schrieb:
Swordfish, du spielst wohl kein Skat, oder?
[quote="Swordfish]string karte::farben[ 4 ] = { "Herz", "Karo", "Kreuz", "Pik" }; string karte::werte[ 9 ] = { "6", "7", "8", "9", "10", "Bube", "Dame", "Koenig", "Ass" };4 * 9 = 32 ???[/quote]
Ne, 4 * 9 = 36, und ja, ich spiele kein Skat. Wie viele Karten gibt's denn dabei? Ist es wirklich so schwer, die Sechsen aus meinem Code zu extrahieren?
Th schrieb:
Außerdem ist mir aufgefallen, daß du "random_shuffle" und "srand" benutzt, aber random_shuffle verwendet intern gar nicht den rand(), sondern liefert eigentlich so wie du ihn verwendest immer die selbe Zufallsfolge (zumindestens war es so bei meinem BCB5-Compiler, daher hatte ich eine eigene Zufallsklasse als dritten Parameter bei random_shuffle angegeben).
Also bei meinem Visual Studio .net bekomm ich mit random_shuffle immer die selbe reihe. Es sei den ich initialisiere mit srand( time( 0 ) );
Greetz, Swordfish
-
swordfish, ich weiss, dass mein code keinen schoenheitswettbewerb gewinnen kann.
aber tobi hat geschrieben, dass er anfaenger ist und da wollte ich ihn nicht ueber gebuehr verwirren. imho ist da nicht sinnvoll klassen zu verwenden, wenn selbst auch keine verwendet und schon gar nicht operator overloading.
ausserdem schiesst du mit kanonen auf spatzen mit deinem ueberfrachten code fuer so ein kleines problem.
kein wunder das heutzutage die programme immer groesser werden.

-
Th schrieb:
Swordfish, du spielst wohl kein Skat, oder?
string karte::farben[ 4 ] = { "Herz", "Karo", "Kreuz", "Pik" };
string karte::werte[ 9 ] = { "6", "7", "8", "9", "10", "Bube", "Dame", "Koenig", "Ass" };4 * 9 = 32 ???
und auch keine ahnung vom geben und abheben

-
tobi schrieb:
swordfish, ich weiss, dass mein code keinen schoenheitswettbewerb gewinnen kann.
Selbsterkenntnis ist der beste Weg...

tobi schrieb:
imho ist da nicht sinnvoll klassen zu verwenden, wenn selbst auch keine verwendet und schon gar nicht operator overloading.
Sollte er (wie ich hoffe) ein gutes C++ Buch besitzten und ab und zu einen Blick hineinwerfen, so könnte er IMHO meinen Code nachvollziehen.
tobi schrieb:
ausserdem schiesst du mit kanonen auf spatzen mit deinem ueberfrachten code fuer so ein kleines problem.
Hm, mein Code implementiert nur, was in OOP nötig ist, um sein Problem zu lösen.
tobi schrieb:
kein wunder das heutzutage die programme immer groesser werden.

Hm, 172 KiB!?
camper schrieb:
und auch keine ahnung vom geben und abheben

Witzkeks! Ich hab' auch schonmal gehört, daß geben != abheben. Aber ich wollte den Code (lt. tobi) nicht noch komplizierter machen...

Greetz, Swordfish