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

Algorytmy rozdawania kart - pomocy

Ostatnio zmodyfikowano 2013-01-11 13:52
Autor Wiadomość
kuternoga
Temat założony przez niniejszego użytkownika
Algorytmy rozdawania kart - pomocy
» 2013-01-11 01:48:58
Potrzebuję pomocy przy implementacji innych algorytmów (quicksort, selection sort i bubble sort) w zadaniu pt. rozdanie kart. Siedzę nad tym już miesiąc, niestety żaden z moich pomysłów nie wypalił.

Treść zadania:
Spróbujmy rozdać karty dla 4 osób (losowanie bez zwracania). Prezentowane karty każdego gracza powinny być uporządkowane. Zadanie należy rozwiązać poprzez zastosowanie wszystkich z podanych tu algorytmów: sortowanie przez wstawianie/sortowanie przez wybieranie/sortowanie bąbelkowe/sortowanie szybkie


Poniżej listing:

C/C++
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

const char kolor[ 4 ] = { '\003', '\004', '\005', '\006' };
void tasuj( int[][ 13 ] );
void talia( int[][ 13 ] );
void rozdaj( int[] );

int main()
{
    int karty[ 4 ][ 13 ] = { 0 };
    srand( time( 0 ) );
    tasuj( karty );
    talia( karty );
    rozdaj( karty[ 0 ] );
    getche();
    return 0;
}

void tasuj( int tkarty[][ 13 ] )
{
    int kolor, walor;
    for( int karta = 1; karta <= 52; karta++ )
    {
        do { kolor = rand() % 4;
            walor = rand() % 13;
        }
        while( tkarty[ kolor ][ walor ] != 0 );
       
        tkarty[ kolor ][ walor ] = karta;
    }
}

void talia( int tkarty[][ 13 ] )
{
    printf( "\n As 2 3 4 5 6" );
    printf( " 7 8 9 10 W D K\n" );
    for( int w = 0; w <= 3; w++ )
    {
        printf( "\n %c", kolor[ w ] );
        for( int k = 0; k <= 12; k++ )
             printf( " %3d ", tkarty[ w ][ k ] );
       
    }
}

void rozdaj( int tkarty[] )
{
    const char * walor[ 13 ] = { "as", "dwojka",
        "trojka", "czworka", "piatka",
        "szostka", "siodemka", "osemka", "dziewiatka",
        "dziesiatka", "walet", "dama", "krol" };
    printf( "\n\n N W S E \n" );
    for( int i = 1; i <= 52; i++ )
    {
        for( int j = 0; j < 52; j++ )
        {
            if( tkarty[ j ] == i )
                 printf( " %c %10s ", kolor[ j / 13 ], walor[ j % 13 ] );
           
        }
        if( i % 4 == 0 ) printf( "\n" );
       
    }
}
P-73545
DejaVu
» 2013-01-11 05:53:34
1. Nie wiemy jaka jest treść zadania "rozdanie kart".
2. Sugeruję użyć jednej tablicy jednowymiarowej (a najlepiej std::vector) do reprezentowania kart.
P-73549
kuternoga
Temat założony przez niniejszego użytkownika
» 2013-01-11 10:42:29
Treść zadania załączyłem poprzez opcję "edytuj". Chciałbym oddać zadanie jutro, czas mam do końca stycznia.
P-73565
crash
» 2013-01-11 10:45:15
Pisałem jakiś czas temu grę w pana, nie dokończyłem a na dodatek kod gdzieś wcięło.

Wyglądało to tak, że miałem strukturę Karta, która miała dwa pola
unsigned short
 - jedno określało wartość karty (od 9 do A), drugie pole to kolor (0..3).

Druga struktura to Talia i zawierała ona w sobie wektor, który został wypełniony przez konstruktor rosnąco względem wartości, następnie losowaniem bez powtórzeń był wypełniony drugi wektor i został podmieniony z głównym.

W pętli gry względem ilości graczy (min. 2, max 4) zagnieżdżoną pętlą for obiekty klasy Gracz dostawały określoną ilość kart, tak żeby każdy miał ich po równo.

Zalecam Ci abyś dokładnie przeanalizował zasady gry na kartce, zanim jeszcze zaczniesz kodzić. Nie wiem jaką grę chcesz pisać, tak czy owak schemat przynajmniej ja bym użył podobny: klasa/struktura Gracz, k/s Talia, k/s karciany stos gry, k/s historia posunięć + ewentualnie inne struktury. Moim zdaniem algorytm gry dobrze jest pisać obiektowo. Powodziska [/code]

edit: nadgorliwość wynika z tego, że opis zadania zamieściłeś kiedy ja się produkowałem :)
P-73566
DejaVu
» 2013-01-11 12:48:49
Ja rozumiem to tak:
1. Mam jedną tablicę ze wszystkimi kartami, po czym je 'mieszam'.
2. Mam 4 graczy, rozdaję każdemu graczowi karty aż do wyczerpania puli.
3. Każdy z graczy stosuje inną strategię sortowania swoich kart.
Spróbuj napisać to w sposób opisany powyżej.

PS. To od Ciebie zależy kiedy Ty napiszesz ten program. My nie mamy zamiaru tutaj niczego pisać - co najwyżej dajemy wskazówki (chyba, że się komuś będzie naprawdę nudziło).
P-73569
kuternoga
Temat założony przez niniejszego użytkownika
» 2013-01-11 13:48:54
Strukturę programu widzę, jednak nie za bardzo wiem co mam i gdzie zmienić by zastosować inne sortowanie. W samym programie nic się nie zmienia oprócz sposobu sortowania kart, tj. z puli wyciągamy karty dla 4 graczy po kolei, a potem algorytm sortuje wg. założeń (quicksort, bubble sort, selection sort). Po wylosowaniu kart program wyświetla informacje na ekranie i kończy się.

Tu jeden z moich poprzednich programów:
C/C++
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

const char kolor[ 4 ] = { '\003', '\004', '\005', '\006' };
void tasuj( int[][ 13 ] );
void talia( int[][ 13 ] );
int main()

{
    int karty[ 4 ][ 13 ] = { 0 };
    srand( time( 0 ) );
    tasuj( karty );
    talia( karty );
    getche();
    return 0;
}
void tasuj( int tkarty[][ 13 ] )
{
    int kolor, walor;
    for( int karta = 1; karta <= 52; karta++ )
    {
        do { kolor = rand() % 4;
            walor = rand() % 13;
        } while( tkarty[ kolor ][ walor ] != 0 );
       
        tkarty[ kolor ][ walor ] = karta;
    }
}
void talia( int tkarty[][ 13 ] )
{ printf( "\n    As    2    3    4    5    6" );
    printf( "       7    8    9   10    W    D    K\n" );
    for( int w = 0; w <= 3; w++ )
    { printf( "\n %c", kolor[ w ] );
        for( int k = 0; k <= 12; k++ )
             printf( " %3d ", tkarty[ w ][ k ] );
       
    }
}
P-73571
DejaVu
» 2013-01-11 13:52:33
Dostosuj się do pkt 1. W przeciwnym wypadku nie ma szans, żeby Ci cokolwiek działało prawidłowo.
P-73573
« 1 »
  Strona 1 z 1