5 réponses
ma proposition :
j ai mit les pairs a gauche et impair a droite sans trie les nombres pair ou impair
#include <stdio.h>
#include <stdlib.h>
# define n 10
typedef enum { TRUE, FALSE } booleen;
void f_affiche_tab ( int * tab )
{
int i;
for ( i = 0; i < n; i++ )
printf("%2d ",tab[i]);
printf("\n");
}
void f_echange ( int * tab, int a, int b )
{
int aux = tab[a];
tab[a] = tab[b];
tab[b] = aux;
}
booleen f_bulle ( int * tab, int a, int b )
{
if ( tab[a]%2 != 0 && tab[b]%2 == 0 ) /* tab[b] seulement pair on echange */
{
f_echange ( tab, a, b);
return TRUE;
}
return FALSE;
}
int main ()
{
int tab[n],i;
srand( getpid() ); /* initialise le générateur de nombres aléatoires */
for ( i = 0; i < n; i++ )
tab[i] = rand()%20; /* Valeur aléatoire de 0 à 10 */
printf("Mon tableau initiale\n");
f_affiche_tab (tab);
//printf("Les Etapes\n");
int bulle;
do
{
bulle = 0;
for ( i = 0; i < n-1; i++ )
if ( f_bulle ( tab, i, i+1 ) == TRUE )
{
bulle = 1;
//f_affiche_tab (tab);
}
} while (bulle);
printf("Mon tableau triée\n");
f_affiche_tab (tab);
return EXIT_SUCCESS;
}
j ai mit les pairs a gauche et impair a droite sans trie les nombres pair ou impair
#include <stdio.h>
#include <stdlib.h>
# define n 10
typedef enum { TRUE, FALSE } booleen;
void f_affiche_tab ( int * tab )
{
int i;
for ( i = 0; i < n; i++ )
printf("%2d ",tab[i]);
printf("\n");
}
void f_echange ( int * tab, int a, int b )
{
int aux = tab[a];
tab[a] = tab[b];
tab[b] = aux;
}
booleen f_bulle ( int * tab, int a, int b )
{
if ( tab[a]%2 != 0 && tab[b]%2 == 0 ) /* tab[b] seulement pair on echange */
{
f_echange ( tab, a, b);
return TRUE;
}
return FALSE;
}
int main ()
{
int tab[n],i;
srand( getpid() ); /* initialise le générateur de nombres aléatoires */
for ( i = 0; i < n; i++ )
tab[i] = rand()%20; /* Valeur aléatoire de 0 à 10 */
printf("Mon tableau initiale\n");
f_affiche_tab (tab);
//printf("Les Etapes\n");
int bulle;
do
{
bulle = 0;
for ( i = 0; i < n-1; i++ )
if ( f_bulle ( tab, i, i+1 ) == TRUE )
{
bulle = 1;
//f_affiche_tab (tab);
}
} while (bulle);
printf("Mon tableau triée\n");
f_affiche_tab (tab);
return EXIT_SUCCESS;
}
Bonjour
Réponse détaillée : montre nous de manière détaillée ce que tu as déjà fait, et si on voit qu'il déjà eu un vrai travail, nous nous ferons un plaisir de t'aider.
Parce qu'avec ta façon de poser ta question, tu présentes tous les symptômes de quelqu'un qui cherche à faire faire ses devoirs par les autres. Et ça n'est pas très apprécié ici.
Réponse détaillée : montre nous de manière détaillée ce que tu as déjà fait, et si on voit qu'il déjà eu un vrai travail, nous nous ferons un plaisir de t'aider.
Parce qu'avec ta façon de poser ta question, tu présentes tous les symptômes de quelqu'un qui cherche à faire faire ses devoirs par les autres. Et ça n'est pas très apprécié ici.
chaibi.2000
Messages postés
2
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
11 janvier 2009
11 janv. 2009 à 19:21
11 janv. 2009 à 19:21
le code que j'ai fait(en C) :
bulle=1;
while(bulle)
{ bulle=0;
for (i=0 ; i<n-1 && ! bulle; i++)
if(T[i]>T[i+1])
{ echange(T,i,i+1);
bulle =1;
}
bulle=1;
while(bulle)
{ bulle=0;
for (i=0 ; i<n-1 && ! bulle; i++)
if(T[i]>T[i+1])
{ echange(T,i,i+1);
bulle =1;
}
Ton tri marche probablement, mais...
.Pourquoi mettre && !bulle dans le for ? Non seulement il n'est pas utile, mais il dégrade beaucoup l'efficacité du tri : Tu vas repartir de 0 dès que tu auras trouvé deux éléments à inverser, alors que tu sais très bien qu'il n'y en a pas avant au moins le rang n-1 (puisque tu es arrivé au rang n sans inversion).
Mais surtout, tu ne réponds pas au problème posé. On te demande d'utiliser une fonction bulle qui (etc, je ne recopie pas). On te demande la forme de la boucle et le code de la fonction bulle, toi tu donnes un programme (incomplet..) qui fait tout sans appeler la fonction bulle exigée.
.Pourquoi mettre && !bulle dans le for ? Non seulement il n'est pas utile, mais il dégrade beaucoup l'efficacité du tri : Tu vas repartir de 0 dès que tu auras trouvé deux éléments à inverser, alors que tu sais très bien qu'il n'y en a pas avant au moins le rang n-1 (puisque tu es arrivé au rang n sans inversion).
Mais surtout, tu ne réponds pas au problème posé. On te demande d'utiliser une fonction bulle qui (etc, je ne recopie pas). On te demande la forme de la boucle et le code de la fonction bulle, toi tu donnes un programme (incomplet..) qui fait tout sans appeler la fonction bulle exigée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Moi j'ai une question sur l'énoncé (je travaille sur le même exo) :
qu'est-ce que veulent dire les formulations "(...)triés par valeurs non croissantes(...)" et "(...)triés par valeurs non décroissantes(...)" ?
Je connais"tri par valeur croissantes", "tri par valeur décroissantes", ou "non trié", mais alors "(...)triés par valeurs non croissantes(...)" ...???
qu'est-ce que veulent dire les formulations "(...)triés par valeurs non croissantes(...)" et "(...)triés par valeurs non décroissantes(...)" ?
Je connais"tri par valeur croissantes", "tri par valeur décroissantes", ou "non trié", mais alors "(...)triés par valeurs non croissantes(...)" ...???
Mais t un noob prend un dico et regarde la définition des mots c vraiment un problème de base heuresement que d mecs comme traxex sont la il a tout compris c pas compliqué si tu comprend pas sa oublie ton évolution dans la matière. L'univers de l algo est compliqué ce n'est pas donné a tt le mde et apparemment c pas donné pr toi