Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2010, 15:59   #1
Ялок
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 11
По умолчанию Зачет. (На visual C++ 6).

Задание у меня такое: Напишите программу, в которой бы описывалась полная колода карт(36), выполнялась сортировка карт и показывалась отсортированная колода.

1)Колоду я буду описывать с помощью класса.( Подскажите как описать карты в классе?)
2)Нужно произвести перетасовку карт.(Подскажите как это реализовать).
3)Меня интересует как произвести сортировку.

Результаты этих трех пунктов буду выводить на экран.
Ялок вне форума Ответить с цитированием
Старый 25.12.2010, 16:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как описать карты в классе?
Тип карты
Код:
struct karta{Имя, Достоинство:string}
А в классе делай массив
Код:
karta Карты[36]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.12.2010, 18:43   #3
Ялок
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 11
По умолчанию

Вот выдает одну ошибку 'i' : redefinition: multiple initialization.


Вот сам код, напротив места где выдает ошибку напишу ////// ОШИБКА //////.
Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct Karta{
    int mast, rang;
    Karta():mast(-1),rang(-1){};
};
class Koloda{
    int n;
    Karta *kol;
public:
    Koloda():n(0) {}
    Koloda(int);
    ~Koloda();
    Koloda (const Koloda &);       
       Koloda(const Karta& first){
           n=1;
        kol[0].mast=first.mast;
        kol[0].rang=first.rang;
    
    }
    Koloda & operator =(const Koloda &);
    friend istream&operator >>(istream& , Koloda&);
    friend ostream&operator <<(ostream&, const Koloda& );
    Koloda & operator ++();
    int operator ()(int) const;
    int & operator [](int ) const;
    Koloda& sort();
    Koloda vyb(int mas) const;
};

istream&operator>>(istream & is, Koloda & kol){
        Karta tmp;
        kol = Koloda();
        int num = 0;
        is >> num;
        if(num > 0 && num < 52){
            kol.n = num;
            for(int j = 0; j<num; j++) {
                   //cout<<" введите масть(0-3): ";
                is>>tmp.mast;
                if(tmp.mast >=0 && tmp.mast <= 3)
                    //cout<<"введите ранг (0-12): ";
                    is>>tmp.rang;
                else
                    throw "неверно задана масть";
                if(tmp.rang >= 0 && tmp.rang <= 12) {
                    kol.kol[j].mast=tmp.mast;
                    kol.kol[j].rang=tmp.rang;
                }
                else
                    throw "неверно задан ранг";
            }
        }
        else
            throw "неверный размер колоды";
        return is;
}
 ostream&operator <<(ostream& os, const Koloda& kol) {
        cout<<kol.n<<endl;
        if(kol.n==1){
             os<<"0)"<<kol.kol[0].mast<<" "<<kol.kol[0].rang<<endl;
        }
        else{
                if(kol.n){
                    os<<kol.n<<endl;
                    for(int i=0;i<kol.n;i++)
                        os<<i<<") "<<kol.kol[i].mast<<" "<<kol.kol[i].rang<<endl;
                }
                else
                    os<< "пустая колода"<<endl;
        }
        return os;
}
Koloda ::Koloda(int k){
    n=k;
    if(n > 0 && n < 52) {  
        for(int i=0;i<k&&i<52; )  {
                int m=rand()%4;
                int r=rand()%13;
                int fl=1;
            for (int j=0;j<k;j++)
                if(kol[j].mast==m && kol[j].rang==r){
                    fl=0;
                    break;        
                }
                if(fl){
                    kol[i].mast=m;
                    kol[i].rang=r;
                    i++;
                }
        }
    }
    else
        throw "неверный размер колоды";
}
Koloda &  Koloda :: operator++(){
Karta tmp1,tmp2;
int flag=0;
    if (n+1<53){
for(int i=n;i<n+1; ) {
                int m=rand()%4;
                int r=rand()%13;
                int fl=1;
               // cout<<"*"<<endl;
            for (int j=0;j<n;j++)
                if(kol[j].mast==m&&kol[j].rang==r){
                    fl=0;
                    break;        
                }
                if(fl){
                    kol[i].mast=m;
                    kol[i].rang=r;
                    n+=1;
                    break;    
        }
        }
    }
    else
    throw "колода полная";
    return *this;
}
int  Koloda :: operator ()(int nom)const{
    if (nom > n)
    throw "карт в колоде меньше";
    else{
            Karta tmp=kol[nom];
            cout<<tmp.mast<<endl;
    }
}
int &  Koloda :: operator[](int nom)const{
Karta tmp=kol[nom];
cout<<tmp.rang<<endl;
}
Koloda &  Koloda :: sort(){

for (int i=0;i<n;i++)
        for(int j=0;j<n-1;j++){
            if (kol[i].mast>kol[j].mast){
                int m,r; m=kol[i].mast; r=kol[i].rang;
                kol[i].mast=kol[j].mast; kol[i].rang=kol[j].rang;
                kol[j].mast=m; kol[j].rang=r;
            }
        }
for (int i=0;i<n;i++) ////// ОШИБКА //////
        for(int j=0;j<n-1;j++){
            if(kol[i].mast==kol[j].mast&&kol[i].rang>kol[j].rang){
                int r;  r=kol[i].rang;
                 kol[i].rang=kol[j].rang;
                 kol[j].rang=r;
        }
       }
           return *this;
}

Последний раз редактировалось Stilet; 27.12.2010 в 19:21.
Ялок вне форума Ответить с цитированием
Старый 27.12.2010, 18:44   #4
Ялок
Пользователь
 
Регистрация: 25.12.2010
Сообщений: 11
По умолчанию

Код:
Koloda  Koloda :: vyb(int m)const{
Koloda newkol;
int j=0, fl=0;
for(int i=0;i<n;i++){
    if (kol[i].mast==m){
        fl=1;
        newkol.n+=1;
        newkol.kol[j].mast=kol[i].mast;
        newkol.kol[j].rang=kol[i].rang;
        j++;
    }
}
if (!fl) cout << "такой масти в колоде нет" << endl;
return newkol;
}


int main (int argc, char *argv[])
{
    srand (time(NULL));
    int a, flagok=0; Koloda kolo(6);
    cout << "Исходная колода: " << kolo << endl;
    do { cout <<"Пустой конструктор-0"<<endl
            <<"1. Инициализация количеством карт"<<endl
            <<"2. Инициализация одной картой"<<endl
            <<"3. ввод вручную"<<endl
            <<"4. Добавить карту(генератор случайных чисел)"<<endl
            <<"5. узнать масть"<<endl
            <<"6. узнать ранг"<<endl
            <<"7. упорядочить по убыванию"<<endl
            <<"8. карты одной масти"<<endl
            <<"9. выход"<<endl
            <<"Введите требуемый вариант: ";
        cin>>a;
    switch (a){
        case 0: {Koloda kolod; cout<<kolod; break;}
        case 1:{
            int par;
            cout<<"введите количество карт: ";
            try {
            cin>>par;
            Koloda kolod(par);           
            cout<<kolod<<endl;}
            catch (const char *msg){cout<<msg<<endl;};
            break;}
        case 2:{
            Karta kart; cout<<"введите масть: "; cin>>kart.mast;cout<<endl;
            cout<<"введите ранг: "; cin>>kart.rang; cout<<endl;
            Koloda koloda(kart);
            cout<<koloda<<endl;
            break;
        }
        case 3:{
            int k;
            Karta kart;
            cout<<"введите масть: "; cin>>kart.mast;
            cout<<"введите ранг: "; cin>>kart.rang;
            Koloda kolod(kart);
            cout << "Колода до ввода: " << kolod << endl;            
            cout<<"введите количество карт, а затем пары ьасть-ранг: ";
            try{
            cin>>kolod;
            }
            catch (const char *msg){cout<<msg<<endl;};
            cout<<"Кодода после ввода: "<<kolod<<endl;
            kolo = kolod;
            break;
        }
        case 4:{
            cout << "Колода до добавления: " << kolo;
               try {
               ++kolo;
               cout << "Колода после добавления: " << kolo <<endl;
               }
               catch (const char *msg){cout<<msg<<endl;};
      
        break;}
        case 5:{
            cout << "введите номер карты: ";
            int nomer;
            cin >> nomer;
            kolo(nomer);
            break;
        }
        case 6:{cout << "введите номер карты: ";
            int nomer;
            cin >> nomer;
            kolo[nomer];
            break;};
        case 7:{kolo.sort();
                cout << kolo << endl;
                break;
        };
        case 8:{
            cout << "введите желаемую масть: ";
            int mas;
            cin >> mas;
            Koloda kar2;
           // cout << kar2 << " fdg" << endl;
            kar2=kolo.vyb(mas);
            cout << kar2 << endl;
            break;
    };
        case 9: {flagok=1; break;}
    }
    }
            while(!flagok);
  
    cout << "Hello world!" << endl;

    return 0;

}

Последний раз редактировалось Stilet; 27.12.2010 в 19:21.
Ялок вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зачет Rycu4 Помощь студентам 1 17.12.2010 18:14
Зачет strabik Общие вопросы C/C++ 8 13.05.2010 18:26
зачет Dante68 Фриланс 13 12.03.2010 21:06