Aide c++
nikesava
-
Arya Dröttningu Messages postés 581 Date d'inscription Statut Membre Dernière intervention -
Arya Dröttningu Messages postés 581 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je dois obtenir cet affichage de mon programme:
Combien de valeurs vous desirez trier ? 5
Dans quel ordre desirez vous trier (1 pour croissant, 2 pour decroissant) ?1
Entrer la donnee 1 de 5 ? 45
Entrer la donnee 2 de 5 ? 23
Entrer la donnee 3 de 5 ? -14
Entrer la donnee 4 de 5 ? 0
Entrer la donnee 5 de 5 ? 4
Resultats des nombres tries
Index Origine Tri
1 45 -14
2 23 0
3 -14 4
4 0 23
5 4 45
Je n'y arrive toutefois pas, mon triage n'est pas correct...
voici mon code-source
#include <iostream>
#include <math.h>
using namespace std ;
#define nDonneesMax 15
void main()
{
float Don[nDonneesMax], tempD; // Donnee
int iI, nDonI, Tri; // Variables d'itération
char Triok; // Variable de sortie
do // Reprise du programme
{
Triok = 'O';
do
{
do
{cout << "\nCombien de valeurs vous desirez trier? ";
cin >> nDonI;
if ((nDonI < 2 || nDonI >15))
{cout << "La valeur est hors de la plage, veuillez recommencer... \n\n";}
}while ((nDonI < 2 || nDonI >15));
} while (nDonI < 1 || nDonI > nDonneesMax);
cout << "\n\nDans quel ordre desirez vous trier (1 pour croissant, 2 pour decroissant) ?";
cin >> Tri;
// Entrée des coordonnées
for (iI = 0; iI < nDonI; iI++)
{
cout << "\nEntrer donnee " << iI+1 << " de 15 ?";
cin >> Don[iI];
}
// Calculs
if (Tri == 1)
{ for (iI=0; iI<nDonI; iI++)
do
{
if (Don[iI] < Don [iI+1])
{Triok = 0;
tempD= Don[iI+1];
Don[iI+1]=Don[iI];
Don[iI] = tempD;
}
}while (Triok =0);
}
if (Tri == 2)
{ for (iI=0; iI<nDonI; iI++)
do
{
if (Don[iI] > Don [iI+1])
{Triok = 0;
tempD = Don[iI+1];
Don[iI+1] = Don[iI];
Don[iI] = tempD;
}
} while (Triok =0);
}
/*cout << "valeur de i ? " << iI << "\n";*/
// Affichage des résultats
cout << "\n\nResultats des nombres tries\n";
cout << "Index\tOrigine\tTri\n";
for (iI=0; iI<nDonI; iI++)
cout << iI+1 << "\t" << Don[iI] << "\t" << tempD << "\n";
cout << "\nVoulez-vous recommencer (O/N) ?";
cin >> Triok;
}while (Triok == 'O' || Triok == 'o');
cout << "\nProgramme termine.\n";
// 5- Fin du programme
}
Combien de valeurs vous desirez trier ? 5
Dans quel ordre desirez vous trier (1 pour croissant, 2 pour decroissant) ?1
Entrer la donnee 1 de 5 ? 45
Entrer la donnee 2 de 5 ? 23
Entrer la donnee 3 de 5 ? -14
Entrer la donnee 4 de 5 ? 0
Entrer la donnee 5 de 5 ? 4
Resultats des nombres tries
Index Origine Tri
1 45 -14
2 23 0
3 -14 4
4 0 23
5 4 45
Je n'y arrive toutefois pas, mon triage n'est pas correct...
voici mon code-source
#include <iostream>
#include <math.h>
using namespace std ;
#define nDonneesMax 15
void main()
{
float Don[nDonneesMax], tempD; // Donnee
int iI, nDonI, Tri; // Variables d'itération
char Triok; // Variable de sortie
do // Reprise du programme
{
Triok = 'O';
do
{
do
{cout << "\nCombien de valeurs vous desirez trier? ";
cin >> nDonI;
if ((nDonI < 2 || nDonI >15))
{cout << "La valeur est hors de la plage, veuillez recommencer... \n\n";}
}while ((nDonI < 2 || nDonI >15));
} while (nDonI < 1 || nDonI > nDonneesMax);
cout << "\n\nDans quel ordre desirez vous trier (1 pour croissant, 2 pour decroissant) ?";
cin >> Tri;
// Entrée des coordonnées
for (iI = 0; iI < nDonI; iI++)
{
cout << "\nEntrer donnee " << iI+1 << " de 15 ?";
cin >> Don[iI];
}
// Calculs
if (Tri == 1)
{ for (iI=0; iI<nDonI; iI++)
do
{
if (Don[iI] < Don [iI+1])
{Triok = 0;
tempD= Don[iI+1];
Don[iI+1]=Don[iI];
Don[iI] = tempD;
}
}while (Triok =0);
}
if (Tri == 2)
{ for (iI=0; iI<nDonI; iI++)
do
{
if (Don[iI] > Don [iI+1])
{Triok = 0;
tempD = Don[iI+1];
Don[iI+1] = Don[iI];
Don[iI] = tempD;
}
} while (Triok =0);
}
/*cout << "valeur de i ? " << iI << "\n";*/
// Affichage des résultats
cout << "\n\nResultats des nombres tries\n";
cout << "Index\tOrigine\tTri\n";
for (iI=0; iI<nDonI; iI++)
cout << iI+1 << "\t" << Don[iI] << "\t" << tempD << "\n";
cout << "\nVoulez-vous recommencer (O/N) ?";
cin >> Triok;
}while (Triok == 'O' || Triok == 'o');
cout << "\nProgramme termine.\n";
// 5- Fin du programme
}
3 réponses
Salut,
J'ai un peu regardé ton code et j'ai fait quelques modifs. Si tu ne comprends pas n'hésite pas à poser des questions. Je n'ai pas codé la fonction tri par ordre décroissant : je te laisse le faire ;)
Pour l'affichage : c'est normal que ça ne fonctionnait pas !
Tu veux afficher le tableau d'origine (Don[iI]) or ce tableau est modifié par la fonction de tri et ensuite tu voulais afficher le tableau final mais tu affichais juste la variable tempD (qui te servait à échanger les valeurs de ton tableau).
Tu dois donc utiliser deux tableaux : au début ils contiendront les mêmes données mais pour trier tu ne modifieras qu'un tableau.
Tu auras donc le tableau Don qui contiendra les valeurs triées et le tableau DonCopie qui lui contiendra les valeurs telles qu'elles ont été rentrées ;).
J'ai un peu regardé ton code et j'ai fait quelques modifs. Si tu ne comprends pas n'hésite pas à poser des questions. Je n'ai pas codé la fonction tri par ordre décroissant : je te laisse le faire ;)
Pour l'affichage : c'est normal que ça ne fonctionnait pas !
Tu veux afficher le tableau d'origine (Don[iI]) or ce tableau est modifié par la fonction de tri et ensuite tu voulais afficher le tableau final mais tu affichais juste la variable tempD (qui te servait à échanger les valeurs de ton tableau).
Tu dois donc utiliser deux tableaux : au début ils contiendront les mêmes données mais pour trier tu ne modifieras qu'un tableau.
Tu auras donc le tableau Don qui contiendra les valeurs triées et le tableau DonCopie qui lui contiendra les valeurs telles qu'elles ont été rentrées ;).
#include <iostream> #include <math.h> using namespace std ; #define nDonneesMax 15 int main(){ float Don[nDonneesMax], DonCopie[nDonneesMax], tempD; // Donnee int iI, nDonI, Tri; // Variables d'itération char Triok; // Variable de sortie do // Reprise du programme { Triok = 'O'; do { cout << "\nCombien de valeurs vous desirez trier? "; cin >> nDonI; if ((nDonI < 2 || nDonI >15)) cout << "La valeur est hors de la plage, veuillez recommencer... \n\n"; }while ((nDonI < 2 || nDonI >nDonneesMax)); cout << "\n\nDans quel ordre desirez vous trier (1 pour croissant, 2 pour decroissant) ? "; cin >> Tri; // Entrée des coordonnées for (iI = 0; iI < nDonI; iI++) { cout << "\nEntrer donnee " << iI+1 << " de "<<nDonI<<" : "; cin >> Don[iI]; } //copie du tableau for (iI = 0; iI < nDonI; iI++) { DonCopie[iI] = Don[iI]; } // Calculs if (Tri == 1) { for (iI=0; iI<nDonI-2; iI++) { for (int i = iI+1 ; i<nDonI-1 ; i++) { if (DonCopie[iI] > DonCopie [i]) { tempD= DonCopie[iI]; DonCopie[iI]=DonCopie[i]; DonCopie[i] = tempD; } } } } if (Tri == 2) { //A faire } // Affichage des résultats cout << "\n\nResultats des nombres tries\n"; cout << "Index\tOrigine\tTri\n"; for (iI=0; iI<nDonI; iI++) cout << iI+1 << "\t" << Don[iI] << "\t" << DonCopie[iI] << "\n"; cout << "\nVoulez-vous recommencer (O/N) ?"; cin >> Triok; }while (Triok == 'O' || Triok == 'o'); cout << "\nProgramme termine.\n"; return 0 ; }
Bonjour, j'ai regardé l'algo que vous m'avez envoyé, tout est parfait, j'ai même fait la partie décroissante :P
Cependant, le seul petit bug est que ma dernière valeur n'est jamais triée?
Merci de m'aider
Cependant, le seul petit bug est que ma dernière valeur n'est jamais triée?
Merci de m'aider