• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie kart - zadanie z książki C++

Object Storage Arubacloud
0 głosów
1,009 wizyt
pytanie zadane 13 czerwca 2016 w C i C++ przez SebekMakaron Obywatel (1,290 p.)

Oto treść zadania:

"Rozdaj użytkownikowi pięć kart, pozwól mu dobrać nowe karty" - (skrócona wersja)

A dokładniej chodzi mi o to ażeby ktoś pomógł mi wymyślić kod na sprawdzenie czy dana karta się nie powtórzyła oto mój kod na wylosowanie 5 kart.

#include <cstdlib>
#include <ctime>

using namespace std;

int karty[9] =  {2, 3, 4, 5, 6, 7, 8, 9, 10};
char figury[4] = {'J', 'Q', 'K', 'A'};
char znak[4] = {'s', 'h', 'd', 'c'};


int Losuj(){
     int liczba = rand() % 13;

     return liczba;
}

int main()
{
    srand(time(NULL));
    int karta, lZnak;

     for(int i = 0; i < 5; i++){
          karta = Losuj();
          lZnak = (Losuj() +4) % 4;

          if(karta < 9){
               cout<<karty[karta]<<znak[lZnak]<<" ";
          }
          else {
               karta -= 9;
               cout<<figury[karta]<<znak[lZnak]<<" ";
          }
     }

    return 0;
}

Oczywiście nie jestem pewien czy mój kod w ogóle cokolwiek jest warty w tym oto zadaniu więc także porosił bym o komentarz na temat tego kodu.

A jeśli to możliwe napisanie poprawnego kodu według Ciebie. :)

komentarz 13 czerwca 2016 przez Bondrusiek Maniak (61,370 p.)
Dodałbym do Twojego kodu na wstęp bibliotekę

#include <iostream>

odpowiedzialną za wyświetlanie i pobieranie strumieni.
komentarz 13 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

Patrząc wstępnie na kod mogę wywnioskować, że nie ma sensu tworzyć dwóch osobnych tablic.. mówię o int karty[9] oraz char figury[4]. Zrób z tego jedną tablicę a do figur odwołuj się poprzez ID tj. od 11 w górę to już nie będą liczby tylko właśnie figury, a każda będzie miała swoje ID. Coś w stylu 11-J 12-Q 13-K 14-A Tylko oczywiście o jeden mniej (tablicę indeksuje się od zera)

2 odpowiedzi

+1 głos
odpowiedź 13 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
wybrane 14 czerwca 2016 przez SebekMakaron
 
Najlepsza

Masz tutaj ode mnie zdrowo przekombinowany kod do tego zadania.. taki bonus :D

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const unsigned int TAB_SIZE=4*(9+4);

struct c_Gracz
{
    bool Karty[TAB_SIZE];
    int PosiadaneKarty[TAB_SIZE];
    int IloscPosiadanychKart;

    c_Gracz():Karty{false},IloscPosiadanychKart(-1){;}

    void Losuj()
    {
        int temp;
        do temp=rand()%TAB_SIZE; while(Karty[temp]);
        Karty[temp]=true;
        IloscPosiadanychKart++;
        PosiadaneKarty[IloscPosiadanychKart]=temp;
    }
    void CzytajKarte(int ID)
    {
        static string Figury[13]={"2","3","4","5","6","7","8","9","10","J","D","K","A"};
        static string Znaki[4]={"Kier","Karo","Trefl","Pik"};
        cout<<Figury[ID%13]<<":"<<Znaki[ID/13];
    }
    void WypiszPosiadaneKarty()
    {
        cout<<"Posiadane karty: ";
        for(int i=0; i<IloscPosiadanychKart; i++)
        {
            CzytajKarte(PosiadaneKarty[i]); cout<<" ";
        }
    }
    bool SprawdzKarte(int ID)
    {
        return PosiadaneKarty[ID];
    }
};

int main()
{
    srand(time(NULL));
    c_Gracz Gracz;
    for(int i=0; i<5; i++) Gracz.Losuj();

    Gracz.WypiszPosiadaneKarty();

    cin.get();
}

 

1
komentarz 14 czerwca 2016 przez SebekMakaron Obywatel (1,290 p.)
Nie chciałbym spamować i pod każdym komentarzem dziękować więc DZIĘKUJĘ bardzo wszystkim przeanalizuje wasz kod na spokojnie porównam z moimi umiejętnościami i wysunę wnioski DZIĘKUJĘ JESZCZE RAZ WSZYSTKIM :)
+2 głosów
odpowiedź 13 czerwca 2016 przez Bondrusiek Maniak (61,370 p.)

Witam,

zamieniłem int na char oraz pozbyłem się zmiennych globalnych.

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;




int Losuj(){
     int liczba = rand() % 13;

     return liczba;
}

int main()
{
    char znak[4] = {'s', 'h', 'd', 'c'};

    char karty[13] =  {'2', '3', '4', '5', '6', '7', '8', '9', '10','J','Q','K','A'};

    srand(time(NULL));
    int karta, lZnak;

     for(int i = 0; i < 5; i++){
          karta = Losuj();
          lZnak = (Losuj()) % 4;

          if(karta < 13){

             cout<< karty[karta] << znak[lZnak]<<" ";
          }

     }

    return 0;
}

 

komentarz 13 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Mała poprawka.. zamień tablicę char karty na string.. Dziesiątki nie wpiszesz w chara :D Ostatecznie można też zrobić warunek, że ma wypisywać 10 jeżeli jest równe 0.
komentarz 13 czerwca 2016 przez Bondrusiek Maniak (61,370 p.)
fakt nie zwróciłem na to uwagi, plus

Podobne pytania

+2 głosów
2 odpowiedzi 3,408 wizyt
pytanie zadane 14 lipca 2015 w C i C++ przez Wadim Początkujący (260 p.)
0 głosów
3 odpowiedzi 2,091 wizyt
pytanie zadane 21 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
0 głosów
2 odpowiedzi 460 wizyt
pytanie zadane 30 listopada 2018 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...