Rechercher : dans
Par :

Inverser un tableau

Dernière réponse le 24 déc 2008 à 21:02:18 Sabetodo, le 20 déc 2008 à 13:23:43 
 Signaler ce message aux modérateurs

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!

Configuration: Windows XP
Firefox 3.0.5

Meilleures réponses pour « inverser un tableau » dans :
Inverser les éléments d'un tableau -Récursivité- Voir Voici une procédure récursive qui permet d’inverser les éléments d’une partie d’un tableau compris entre la position p et n : Procedure Inverser (Var t : Tab; p, n : Integer); Var aux : Real; Begin If p < n Then ...
Décaler les éléments d'un tableau (Rotation) -Récursivité- VoirVoici une procédure récursive qui permet de décaler tous les éléments d’un tableau d’une position à droite à partir de la position p Procedure Decaler (Var t : Tab; p, n : integer); Begin If p
Rotation écran / Affichage inversé (90° ou 180°) VoirSi votre écran est inversé (rotation d'angle 90° voire 180°), ceci est dû : soit aux propriétés de votre carte graphique soit à une mauvaise manipulation sur le clavier Vérifier les propriétés de la carte graphique Cliquer avec le bouton...
Manipulations élémentaires des tableaux sous MatLab VoirSommaire I. Stockage des tableaux II. L'indexation linéaire II.1. Accéder à un élément d'un tableau en utilisant l'indexation linéaire II.2. Passer d'une indexation à l'autre II.2.1. La fonction ind2sub II.2.2. La fonction sub2ind III. La...
Tableau de bord VoirNotion de tableau de bord Un tableau de bord est une représentation graphique synthétique d'un ensemble d'indicateurs donnant à un responsable tous les éléments lui permettant de prendre visuellement et rapidement des décisions. Compte-tenu de sa...

1

MHV-SEC, le 20 déc 2008 à 13:54:14
  • +1

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--;
}
...
}

Répondre à MHV-SEC

2

Sabetodo, le 20 déc 2008 à 14:21:21

Pas mal, je vais essayer pour voir si ça peut marcher! merci pour ton aide.

Répondre à Sabetodo

3

MHV-SEC, le 20 déc 2008 à 14:24:13
  • +1

J'ai oublie de mettre : #define n 10 en haut
sinon tu peux modifier la taille du tableau comme tu veux

Répondre à MHV-SEC

4

Sabetodo, le 20 déc 2008 à 20:57:15

Excuse-moi mon cher, mais je doute fort que ça puisse marcher.Je crois qu'il me faudrait plutot deux tableau pour faire ça.

Répondre à Sabetodo

5

fiddy, le 20 déc 2008 à 21:52:56
  • +2

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 ;)
Google is your friend

Répondre à fiddy

8

Sabetodo, le 21 déc 2008 à 23:13:37

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]

Répondre à Sabetodo

9

fiddy, le 21 déc 2008 à 23:32:56

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
Google is your friend

Répondre à fiddy

10

Sabetodo, le 22 déc 2008 à 01:11:56

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'?

Répondre à Sabetodo

11

fiddy, le 22 déc 2008 à 01:23:01

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.
Google is your friend

Répondre à fiddy

12

Sabetodo, le 22 déc 2008 à 14:45:30

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.

Répondre à Sabetodo

13

fiddy, le 22 déc 2008 à 14:55:20
  • +1

Ton programme a un petit problème pour l'inversion des éléments car tu commences ta boucle for à 1.
Or en C le premier indice est 0.
for(i=0;...)
De plus, je ne vois pas l'intérêt d'initialiser ton tableau, si tu refais des scanf derrière.
Sinon, n'oublie pas que le prototype de main est :int main(void) s'il ne reçoit pas de paramètres.
Bien sûr, il ne faut pas oublier le return 0; final.
Cdlt
Google is your friend

Répondre à fiddy

14

 Sabetodo, le 24 déc 2008 à 21:02:18

T'as tout a fait raison mon cher!!!En fait, c'est en rédigeant le code que je me suis trompeé. Sinon ça va. J'en profite pour te souhaiter une bonne et heureuse année 2009 au cotes des tiens bien sur.

Répondre à Sabetodo

6

MHV-SEC, le 21 déc 2008 à 14:08:11
  • +1

*
mais je doute fort que ça puisse marcher
salut sabetodo
pour sa marche a merveille

Répondre à MHV-SEC

7

brahim001, le 21 déc 2008 à 20:30:57

Je pense ke fiddy a donné la meillieur method

Répondre à brahim001