Le tri de tableau multidimensionnel en c++
Je suis débutant en programmation, et j'ai un problème.
J'ai créer deux dimensions, tableau [5][3] ...
Permet de dit que c'est l'exemple d'une partie de ce:
- 2 3 4
- 7 8 9
- 5 6 7
Puis-je obtenir la somme des lignes et de l'écrire à proximité :
- 2 3 4 9
- 7 8 9 24
- 5 6 7 18
Maintenant, je dois trier des tableaux par cette somme, donc, le résultat devrait ressembler à ceci:
- 7 8 9 24
- 5 6 7 18
- 2 3 4 9
Je ne sais pas comment y parvenir, c'est mon code:
#include <iostream>
#include <time.h>
using namespace std;
void tocke(int polje[5][3])
{
int vsota;
srand(time(NULL));
int sums[5];
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++){
polje[i][j] = (rand() % 10 + 1);
vsota += polje[i][j];
sums[i] = vsota;
cout << polje[i][j] << " ";
}
}
}
void urejaj(int polje[5][3])
{
cout << "\n\n\n\n" << endl;
int sums[5];
int vsota ;
double temp;
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++)
{
vsota += polje[i][j];
sums[i] = vsota;
if (sums[i] < sums[i+1])
{
temp = polje[i][j];
polje[i][j] = polje[i + 1][j];
polje[i + 1][j] = temp;
}
cout << polje[i][j] << " ";
}cout << sums[i];
}
}
int main()
{
int polje[5][3];
tocke(polje);
urejaj(polje);
cout << "\n";
system("pause");
return 0;
}
Première fonction écrit les éléments dans le champ, et le second est de trier les champs.
Après sumation, essayez de copier les tableaux à nouveau tableau mais avec le bon de commande.
Vous pourriez faire une fonction qui compare deux matrices multi-dimensionnelles, puis de comparer les deux premiers, puis de comparer le résultat de la première à la troisième?
Vous pourriez faire une fonction qui compare deux matrices multi-dimensionnelles, puis de comparer les deux premiers, puis de comparer le résultat de la première à la troisième?
OriginalL'auteur n32303 | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
Dans le cas où vous êtes toujours perdu, voici le programme complet:
OriginalL'auteur kpagcha
Votre problème peut être plus facilement résolu par un changement dans les structures de données. Au lieu d'avoir un tableau de tableaux, de disposer d'un tableau de structures. La structure de contenir la somme et le tableau de valeurs.
Avec ce concept, à trier les lignes par leurs sommes.
Vous pouvez facilement écrire un comparateur pour le présent et l'utilisation
std::sort
:Edit 1 -- la Surcharge de l'opérateur <
Vous pouvez simplifier et ne pas exiger un comparateur en fournissant un opérateur surchargé
<
:Le tri appel devient maintenant:
Compare_Rows
, peut-on avoir une surcharge d'opérateur< ?la somme n'est jamais affecté, est-il?
Le membre
sum
est à gauche de l'O. P. à calculer. Levalues
membre doit également être remplie par l'O. P.Voir mes modifications.
L'utilisation non-membre
begin
etend
intégrés dans des tableaux à la place. À l'aide destd::sort(std::begin(data), std::end(data))
, les paramètres obtenir plus générique, et il est possible de modifier le conteneur à un stade ultérieur, sans changer ce code.OriginalL'auteur Thomas Matthews
Voici comment j'allais aborder le problème:
Écrire une fonction d'échange qui permute deux lignes dans un tableau multidimensionnel. Quelque chose comme:
Ensuite, écrire une fonction somme, qui ajoute tous les éléments dans une rangée. Quelque chose comme:
Enfin, écrire une fonction de tri qui est capable de trier un tableau multidimensionnel à l'aide des opérations suivantes:
Je vais laisser à votre préférence pour décider quel algorithme de tri à utiliser.
OriginalL'auteur Brian Gradin
Je ne sais pas ce que vous entendez par ce (avez-vous à lire à partir d'une saisie, ou de le remplir avec des chiffres, etc. ?), mais disons que vous créez une matrice en deux dimensions comme ceci:
Alors vous pouvez trier la matrice par la somme de chaque ligne dans l'ordre décroissant, comme dans l'exemple suivant. J'ai utilisé
std::sort
avec un custom comparateur foncteur (créé avec une fonction lambda):.
Maintenant, nous allons sortie de la matrice:
Live exemple
OriginalL'auteur Snps