Inverser un tableau

Résolu/Fermé
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
- 20 déc. 2008 à 13:23
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
- 2 mars 2013 à 11:07
Bonjour,
salut les gars!!je voulais inverser le contenu d'un tableau de telle sorte que le premier élément soit le dernier et le dernier soit le premier.Je sais que le tri serait la méthode idéale, mais je l'ai essaye dans u premier temps et je suis bloque! J'aimerais que qqn me donne juste des astuces pour y parvenir!
A voir également:

5 réponses

fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808
20 déc. 2008 à 21:52
Salut,
Si son programme marche. Pas besoin de deux tableaux ;)
T'inverse le premier élément avec le dernier, puis le second avec l'avant-dernier etc.
Pas besoin de tableau supplémentaire ;)
2
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
3
21 déc. 2008 à 23:13
salut fiddy, j'ai tenu compte de ce que tu ma dit et je viens de modifier mon prrogramme en utilisant la boucle.Lorsque je le compile, ça marche. mais quand je l'execute il ne m'affiche rien a l'ecran. Voici le code:
#include<stdio.h>
 main ()

{ int  i,tampon=0,tab[6]={6,8,1,2,3,8};

     
    for(i=1;i<6;i++)
     {
        scanf("%d",&tab[i]);
     }
    
       for(i=1;i<3;i++)  
       {
           tampon=tab[i];
           tab[i]=tab[5-i];
           tab[5-i]=tampon;
        }
     
     for(i=1;i<6;i++)
      {
        printf("%d",tab[i]);
     }   
}   


NB: Étape 0 : on échange t[0] et t[5]
Étape 1 : on échange t[1] et t[4]
Étape 2 : on échange t[2] et t[3]

    
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808 > Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010

21 déc. 2008 à 23:32
Faut plutôt s'inspirer du premier programme.
Teste :
#include <stdio.h>

int main(void){
    int tab[]={1,2,3,4,5,6,7,8,9,10};
    const size_t n=sizeof tab/sizeof *tab;

    int debut=0,fin=n-1;
    int tmp;

    while(debut<fin){
        tmp=tab[debut];
        tab[debut]=tab[fin];
        tab[fin]=tmp;
        debut++;
        fin--;
    }

    for(int i=0;i<n;i++)
        printf("%d ",tab[i]);

    puts("");

    return 0;
}

Cdlt
0
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
3 > fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022

22 déc. 2008 à 01:11
ok, je vais le tester. juste une question:il parrait que t'as pas parcouru la tab avant de l'inverser.et j'ai pas trop saisi cette partie de la declaration: 'const size_t n=sizeof tab/sizeof *tab;'
Et qu'est ce que fait cette fonction 'puts'?
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 808 > Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010

22 déc. 2008 à 01:23
il parrait que t'as pas parcouru la tab avant de l'inverser.
En fait, j'initialise le tableau, puis avec la boucle while j'inverse le premier élément avec le dernier etc.

const size_t n=sizeof tab/sizeof *tab;'
Le const permet de spécifier au compilateur que cette variable ne changera pas. C'est une bonne habitude à prendre. De plus, cela pourra permettre certaines optimisations.
Le size_t, c'est tout simple, c'est le type renvoyé par l'opérateur sizeof.
sizeof tab va te renvoyer taille globale du tableau (soit taille d'un int * nombre d'éléments du tableau).
Donc en divisant par sizeof *tab (ou sizeof(int)) on obtient le nombre d'éléments du tableau.

Et qu'est ce que fait cette fonction 'puts'
Le puts() final permet de sauter une ligne avant de quitter le programme. C'est plus propre.
Tu peux faire printf("\n"); si tu préfères.
0
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
3 > fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022

22 déc. 2008 à 14:45
ok,merci beaucoup pour ce que t'as fait. Je viens d'analyser ton code et je crois que marche.mais je l'ai pas encore compilé. Par contre j'ai fait ceci et marche tout a fait.


#include<stdio.h>
#define n 6
 main ()

{ int  i,tampon=0,tab[n]={6,8,1,2,3,8};

     
    for(i=1;i<n;i++)
     {
        scanf("%d",&tab[i]);
     }
    
       for(i=1;i<n/2;i++)  
       {
           tampon=tab[i];
           tab[i]=tab[n-1-i];
           tab[n-1-i]=tampon;
        }
     
     for(i=1;i<n;i++)
      {
        printf("%d",tab[i]);
     }   
}   

Remarque:Dans mon programme j'inverse le premier avec le dernier,le seconde avec l'avant dernier ainsi de suite jusqu'a ce que tout le contenu du tableau soit inverse.
0
MHV-SEC
Messages postés
116
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
22 janvier 2012
11
20 déc. 2008 à 13:54
tiens voila mon idee :
main()
{
int tableau[n], debut = 0 , fin = n - 1, temp;//temp est une case temporaire pour faire l'echange
....
while(debut < fin)
{
temp = tableau[debut];
tableau[debut] = tableau[fin];
tableau[fin] = temp;
debut++;
fin--;
}
...
}
1
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
3
20 déc. 2008 à 14:21
pas mal, je vais essayer pour voir si ça peut marcher! merci pour ton aide.
0
MHV-SEC
Messages postés
116
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
22 janvier 2012
11
20 déc. 2008 à 14:24
j'ai oublie de mettre : #define n 10 en haut
sinon tu peux modifier la taille du tableau comme tu veux
1
Sabetodo
Messages postés
120
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
18 août 2010
3
20 déc. 2008 à 20:57
excuse-moi mon cher, mais je doute fort que ça puisse marcher.Je crois qu'il me faudrait plutot deux tableau pour faire ça.
0
MHV-SEC
Messages postés
116
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
22 janvier 2012
11
21 déc. 2008 à 14:08
*
mais je doute fort que ça puisse marcher
salut sabetodo
pour sa marche a merveille
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
brahim001
Messages postés
4
Date d'inscription
jeudi 11 décembre 2008
Statut
Membre
Dernière intervention
21 décembre 2008
5
21 déc. 2008 à 20:30
je pense ke fiddy a donné la meillieur method
0