Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przypisanie figur karcianych liczbom w programie sortującym rozdanie

Ostatnio zmodyfikowano 2013-10-25 09:11
Autor Wiadomość
smoczun
Temat założony przez niniejszego użytkownika
Przypisanie figur karcianych liczbom w programie sortującym rozdanie
» 2013-10-23 11:16:37
Witam!
Rozpoczynam właśnie swoja przygodę z c++. Kombinuje jak napisac program losujący 13 kart z talii i sortujęcy rozdanie wg. wagi figur karcianych.
Skleciłem kod losujący i sortujący liczby ale nie mam pojecia jak im przypisać figury karciane. Czy można utworzyć tablicę zawierającą wszystkie figury i sortować je na podstawie zajmowanego miejsca(kolejności) w tej tablicy? Jak by ktoś był łaskaw podsunąc jakiś pomysł będę wdzięczny. Oto mój kod:
C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;


bool czy_byla( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 52 ) + 1;
}

void wstawianie( int tab[], int n )
{
    int i, k, elem;
    for( i = 1; i < n; i++ )
    {
        elem = tab[ i ];
        k = i - 1;
        while( k >= 0 && tab[ k ] > elem )
        {
            tab[ k + 1 ] = tab[ k ];
            k--;
        }
        tab[ k + 1 ] = elem;
    }
}

int main()
{
    srand( time( 0 ) );
    int rozdane[ 13 ];
    int rozdanych = 0;
    do
    {
        int karta = wylosuj();
        if( czy_byla( karta, rozdane, rozdanych ) == false )
        {
            rozdane[ rozdanych ] = karta;
            rozdanych++;
        }
    }
    while( rozdanych < 13 );
   
    cout << "karty przed sortowaniem: " << endl << endl;
   
    for( int rozdanych = 0; rozdanych < 13; rozdanych++ )
    {
        cout << rozdane[ rozdanych ] << "   ";
    }
   
    wstawianie( rozdane, rozdanych );
    cout << endl << "\n" << "karty po sotrowaniu: " << endl << endl;
   
    for( int i = 0; i < rozdanych; i++ )
    {
        cout << rozdane[ i ] << "   ";
    }
   
   
    return 0;
   
}
P-94374
pekfos
» 2013-10-23 13:11:13
Można.
P-94384
smoczun
Temat założony przez niniejszego użytkownika
» 2013-10-23 13:20:21
Ale jak? Jakaś wskazówka? gdzie o tym poczytać? czego szukać?
P-94385
Hipochondryk
» 2013-10-23 20:55:32
Z tablicą można to zorbić tak : Robisz tablicę o N indeksach i 2 wierszach ( N= liczba kart) wpisujesz do 2wiersza każdego indeksu wagę danej karty. a do pierwszego przepisujesz nr komórki(ID) Każdemu indeksowi ustalasz rodzaj karty, następnie losujesz X kart do X elementowej tablicy i je tam zapisujesz( ich ID). Następnie zerujesz waggi (lub ustalasz -1)  wszystkim kartom których nie wylosowales. W następnym kroku sortujesz całą  tablice na podstawie Wag. I masz zrobione :)
Nie jest to Najwydajniejszy spodób lecz w oparciu o tablice jest łatwy do zaiplementowania.
P-94420
Monika90
» 2013-10-23 22:27:50
Czy chodzi ci o to jak zamienić numer karty od 1 do 52 na jej nazwę? Np. 1 to As pik, a 25 to 9 karo?

Jeśli tak, to masz:
C/C++
void print( int n )
{
    const char * suit[] = { "trefl", "karo", "kier", "pik" };
    const char * rank[] = { "As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Walet", "Dama", "Król" };
    cout << rank[( n - 1 ) % 13 ] << ' ' << suit[( n - 1 ) / 13 ];
}
P-94425
smoczun
Temat założony przez niniejszego użytkownika
» 2013-10-24 07:50:02
Dzięki wszystkim za pomoc.
@Monia
Nie za mocno kumam jak Twój kod działa, nie dobrnąłem jeszcze do wskaźników. Muszę doczytać.
Jak byś mi wyjaśniła krok po kroku co ten "kod" robi było by super.
P-94438
pekfos
» 2013-10-24 13:42:31
nie dobrnąłem jeszcze do wskaźników.
Zamiast const char* możesz użyć std::string.
P-94444
smoczun
Temat założony przez niniejszego użytkownika
» 2013-10-25 09:11:38
@pefkos

Życie mi uratowałeś! Teraz już rozumiem o co biega;)
P-94505
« 1 »
  Strona 1 z 1