Wielokrotne sortowanie.

0

Cześć. Mam funkcję sortującą sort. Problem jest tego typu, że jeśli sortuję pierwszą tablicę "cards_n" to nie ma problemu, jednak odwołując się potem do funkcji sort przy tablicach "cards_e","cards_s","cards_w" nic się nie dzieje. Co zrobiłem źle?
Tutaj cały kod:

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
void replace(int &a, int &b)
{
  int temp=a; a=b; b=temp;
}
void sort(int tab[], int n)
{
  for(int j=n-1; j>0; j--)
    for (int i=0; i<j; i++)
      if (tab[i]>tab[i+1])
      replace(tab[i], tab[i+1]);
}
int main()
{
    int zarodek,b;
    zarodek=time(NULL);
    srand(zarodek);
    b=rand();    //liczba mieszań
int cards_n[13];
int cards_e[13];
int cards_s[13];
int cards_w[13];
int a[52]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52};
int i;
        for(i=0;i<=51;i++)
            {
            cout<<a[i]<<" ";    //wypisanie tablicy PRZED pomieszaniem
            }
cout<<"\n";
        for(i=0;i<=b;i++) //na podstawie wygenerowaniej liczby mieszamy tablicę b-krotnie
            {
            random_shuffle(&a[0], &a[52]); //mieszamy tablicę dowolnie
            }
        for(i=0;i<=12;i++) //podstawianie pierwszych 13 elementów tablicy z kartami do RĘKI N
        {
                cards_n[i]=a[i];
        }
        sort(cards_n, 13);
        for(i=0;i<=12;i++)
        {
                cout<<cards_n[i]<<" ";
        }
cout<<"\n";
        for(i=13;i<=25;i++) //podstawianie kolejnych 13 elementów tablicy z kartami do RĘKI E
        {
                cards_e[i]=a[i];
        }
        sort(cards_e, 13);
        for(i=13;i<=25;i++)
        {
                cout<<cards_e[i]<<" ";
        }
cout<<"\n";
        for(i=39;i<=51;i++) //podstawianie ostatnich 13 elementów tablicy z kartami do RĘKI S
        {
                cards_s[i]=a[i];
        }
        sort(cards_s, 13);
        for(i=39;i<=51;i++)
        {
                cout<<cards_s[i]<<" ";
        }
cout<<"\n";
        for(i=26;i<=38;i++) //podstawianie kolejnych 13 elementów tablicy z kartami do RĘKI W
        {
                cards_w[i]=a[i];
        }
        sort(cards_w, 13);
        for(i=26;i<=38;i++)
        {
                cout<<cards_w[i]<<" ";
        }
}

0

http://www.cplusplus.com/reference/algorithm/sort/

uzyj tego.

Jezeli nie chcesz uzywac tego w swoim projekcie to zobacz czy jak tego uzyjesz to dziala poprawnie. Podziel ten kod na funkcje, "wypelnianiePierwszegoGracza" itd. Diagnozuj kazdy element kodu gdzie moze byc blad. Sprawdzaj czy tam moze byc czy nie.

Uzywaj debuggera.

int a[52]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52};
a jak bedziesz miec 1000 elementow to bedziesz tak pisal do 1000?

pozbadz sie magicznych numerow

kod jest dla mnie nieczytelny

2
  1. Nie umiesz formatować kodu
  2. Nie umiesz kopiować:
for(i=0;i<13;++i) cards_e[i]=a[i+13];
  1. Nie umiesz wyświetlać:
 for(i=0;i<13;++i)  cout<<cards_e[i]<<" ";
  1. jeżeli już korzystasz z <algorithm> to zrób to:
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
  {
   srand(time(0));
   unsigned cards[4][13];
   for(unsigned p=0,s=0;s<4;++s) for(unsigned n=0;n<13;++n) cards[s][n]=++p;
   random_shuffle(&cards[0][0],&cards[4][0]);
   for(unsigned s=0;s<4;++s) sort(&cards[s][0],&cards[s][13]);
   for(unsigned s=0;s<4;++s,cout<<endl) for(unsigned n=0;n<13;++n) cout<<cards[s][n]<<' ';
   return 0;
  }
0
_13th_Dragon napisał(a):

Nie umiesz formatować kodu

  1. Nie umiesz kopiować:
for(i=0;i<13;++i) cards_e[i]=a[i+13];
  1. Nie umiesz wyświetlać:
 for(i=0;i<13;++i)  cout<<cards_e[i]<<" ";
  1. jeżeli już korzystasz z <algorithm> to zrób to:
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
  {
   srand(time(0));
   unsigned cards[4][13];
   for(unsigned p=0,s=0;s<4;++s) for(unsigned n=0;n<13;++n) cards[s][n]=++p;
   random_shuffle(&cards[0][0],&cards[4][0]);
   for(unsigned s=0;s<4;++s) sort(&cards[s][0],&cards[s][13]);
   for(unsigned s=0;s<4;++s,cout<<endl) for(unsigned n=0;n<13;++n) cout<<cards[s][n]<<' ';
   return 0;
  }

Dzięki wielkie, działa wszystko jak powinno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1