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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| /* fonction de permutation
*
* @pre: nombre d'éléments introduits exclusivement impaire
* @in: position actuelle à permuter
* position de départ de la récursivité
* pointeur sur le tableau à permuter
* taille du tableau à permuter
* @verif si (pos*2+1)%taille== depart: sauvegarder tableau[depart]
* @out: valeur sauvegardée
*/
int Permuter(int position, int depart, int* tableau, size_t taille)
{
int retour;
/* valeur utilisée en maintes occasion*/
int arrivee=(position*2+1)%taille;
/*verif: est-on au point de retour? */
if(arrivee==depart)
{
/* sauvegarde de la valeur */
retour=tableau[arrivee];
/* modification du tableau */
tableau[arrivee]=tableau[position];
}
else
{
/* Permuter la position d'arrivee */
retour=Permuter(arrivee,depart,tableau,taille);
/*deux cas envisageables: première exécution, ou toutes les suivantes */
if(depart==position)
tableau[arrivee]=retour;
else
tableau[arrivee]=tableau[position];
}
return retour;
}
int main()
{
int tab[200];
int cpt=0;
int intro=0;
do
{
std::cout<<"introduisez le nombre"<<cpt+1<<" (0 pour quitter)"<<std::endl;
std::cin>>intro;
if(intro!=0)
{
tab[cpt]=intro;
cpt++;
}
}while(intro>0);
/* si le nombre d'éléments itroduits est paire, on abandonne le dernier
* (cf pre)*/
if(cpt%2!=1)
{
std::cout<<"il faut un nombre impair d'éléments... le dernier sera omis"
<<std::endl;
cpt--;
}
/*permutation en partant de pos=0 */
Permuter(0,0,tab, cpt);
/*permutation en partant de pos=2 */
Permuter(2,2,tab, cpt);
/*affichage final */
for(int i=0;i<cpt;i++)
std::cout<<tab[i]<<" ";
return 0;
} |
Partager