Algorytm na odczytywanie kart [c++]

Awatar użytkownika
Damian905
Użytkownik
Użytkownik
Posty: 144
Rejestracja: 2 sty 2008, o 17:14
Płeć: Mężczyzna
Podziękował: 9 razy
Pomógł: 16 razy

Algorytm na odczytywanie kart [c++]

Post autor: Damian905 »

Witam!!! Mam problem z takim oto programem. polecenie :
Karty w talii możemy ponumerować od 1 do 52. Hierarchia każdej karty w pierwszej kolejności określa rodzaj karty, w drugiej jej kolor. Jeśli przyjmiemy, ze kartę najważniejszą w hierarchii oznaczamy najmniejsza liczba, kolejnym liczbom będą przyporządkowane następujące karty: 1 - As wino; 2 - As czerwo;.............;52 - 2 żołądź.
Napisz program, który z pliku skradającego sie z 52 wierszy, w ktorym zapisana jest liczba oznaczajaca hierarchie karty, odczyta jaka karta znajduje sie pod podana cyfra. Przyklad: liczbie 2 odpowiada zapis "A-kier", a liczbie 5 zapis"K-pik".
arecek
Użytkownik
Użytkownik
Posty: 283
Rejestracja: 26 sty 2007, o 22:11
Płeć: Mężczyzna
Podziękował: 4 razy
Pomógł: 93 razy

Algorytm na odczytywanie kart [c++]

Post autor: arecek »

Najprościej :

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <string>

int main()
{
std::ifstream plik;
std::string text;


    plik.open("lista.txt");

    for(n=0;n<52;n++)
    {
        getline(plik, text);

        if(text=="1")
        {
         std::cout<<"A-kier 
";
        }

        /* i 51 if ... */
    }

    plik.close();
    getchar();
    return 0;
}
Jeżeli dobrze myślę to karty układają się kolorami ? pik,kier,karo,trefl, pik,kier,karo,trefl itd? Wtedy można zamienić odczytany string na liczbę i sprawdzać podzielność .

Kod: Zaznacz cały

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ifstream plik;
string text;

int n,k,cyfra;

plik.open("lista.txt");

    for(n=0;n<52;n++)
    {
        getline(plik, text);

        istringstream iss(text);
        iss >> cyfra;

        k = (cyfra-cyfra%4)/4;

        switch(k)
        {
            case 0:
            text="A-";
            break;

            case 1:
            text="K-";
            break;

            case 2:
            text="Q-";
            break;

            case 3:
            text="J-";
            break;

            case 4:
            text="10-";
            break;

            case 5:
            text="9-";
            break;

            case 6:
            text="8-";
            break;

            case 7:
            text="7-";
            break;

            case 8:
            text="6-";
            break;

            case 9:
            text="5-";
            break;

            case 10:
            text="4-";
            break;

            case 11:
            text="3-";
            break;

            case 12:
            text="2-";
            break;

        }

        if(cyfra%4 == 0)
        {
         text+="trefl";
        }

        else if(cyfra%3 == 0 )
        {
         text+="karo";
        }

        else if(cyfra%2 == 0)
        {
         text+="kier";
        }

        else
        {
         text+="pik";
        }

    cout<<text<<"
";
    }

    plik.close();
    getchar();
    return 0;
}

Jeśli nie mamy dokładnie określonej ilości wierszy można użyć while(plik)
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Algorytm na odczytywanie kart [c++]

Post autor: kadiii »

Tak przypadkiem zerknąłem. Kod jest oczywiście dobry, ale razi niekonsekwencja używania switcha. Kod wyglad jednak dużo przejrzyściej kiedy używamy elementów danego języka konsekwentnie(i adekwatnie do sytuacji). To tak w ramach dygresji
Awatar użytkownika
Damian905
Użytkownik
Użytkownik
Posty: 144
Rejestracja: 2 sty 2008, o 17:14
Płeć: Mężczyzna
Podziękował: 9 razy
Pomógł: 16 razy

Algorytm na odczytywanie kart [c++]

Post autor: Damian905 »

Dzieki wielkie z ten programik, jednak nie chce mi sie skomplikowac poniewaz moj kompilator wyrzuca taki blad: "sstream: No such file or directory". Moj kompilator to DevC++ 4.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Algorytm na odczytywanie kart [c++]

Post autor: matshadow »

zainstaluj sobie najnowszego Dev-a Dobrze radzę
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Algorytm na odczytywanie kart [c++]

Post autor: soku11 »

Nie ma najnowszego deva IDE jest juz dawno porzucone i nierozwijane. Blad wynika z jakiejs starej wersji kompilatora nieposiadajacego dobrych naglowkow. Mozna wiec sciagnac nowszy kompilator i podlaczyc go pod deva, albo (co radze) przesiasc sie na lepsze IDE z wiekszymi mozliwosciami.

Pozdrawiam.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Algorytm na odczytywanie kart [c++]

Post autor: matshadow »

Chodziło mi o
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Algorytm na odczytywanie kart [c++]

Post autor: soku11 »

I tak ten dev ma juz ze dwa lata tak mysle...

Pozdrawiam.
ODPOWIEDZ