Programme en C

saraseff Messages postés 137 Statut Membre -  
saraseff Messages postés 137 Statut Membre -
Bonjour tout le monde,
j'ai un problème avec un programme C et je vous remercie de bien m'aider .
Voilà je veux faire un programme qui me permet de:
-remplir un tableau
-le tasser au cas où il contient des zéros
-l'afficher sans les zéros

La partie où j'ai des problèmes est en fait pour enlever les zéros donc voilà ce que j'ai fait mais sa ne marche pas!
cpt=0;
for(i=0;i<taille;i++)
{
if(tab[i]!=0)
{
tab[cpt]=tab[i];
cpt++;
}
{
tab[cpt]=tab[i+1];
s++;
}
}

printf("voici votre tableau:\n");
for(i=0;i<taille-s;i++)
printf("%d",tab[i]);</gras>
Si vous pouvez me répondre maintenant sa serait gentil parce que j'ai exam demain !
Configuration: Windows XP
Firefox 3.5.7

6 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    Voici un algo non optimisé, quoique:
    Soit 2 indices i = 0  et j
    Pour j = 0 jusqu'à la fin du tableau
      Si tab[j] != 0
        Alors tab[i] = tab[j] et i = i+1
    Pour i jusqu'à la fin du tableau
      tab[i] = 0;
    Par très compliqué, isn't !
    Bon code.
    0
  2. saraseff Messages postés 137 Statut Membre 2
     
    pourquoi tab[i]=0? ce n'est pas tab[i]=tab[i+1] ?
    0
    1. loupius Messages postés 789 Statut Membre 148
       
      Je ne sais pas ce que tu veux faire exactement; une fois le tableau 'tassé', il y a 2 solutions:
      - le tableau conserve la même dimension et on remplit la fin du tableau avec des '0 (c'est ce que j'ai supposé),
      - le tableau est 'raccourci' et on lui donne la dimension du dernier élément non nul.
      A toi de décider.
      0
  3. saraseff Messages postés 137 Statut Membre 2
     
    dSL j'ai essayé mais sa n'a pas marché!
    0
  4. saraseff Messages postés 137 Statut Membre 2
     
    En fait je veux faire la deuxième proposition c'est pour cela j'ai supposé une autre variable s que j'incrémente à chaque fois que je trouve un zéro !mai j'ai essayé dans mon prog mais sa ne marche pas sa me done que des zéros :s
    0
    1. loupius Messages postés 789 Statut Membre 148
       
      La taille du tableau, dans l'algorithme donné sera le dernier élément + 1, c'est à dire 'i' en fin de boucle. Je ne vois pas la difficulté, l'algorithme se réduit donc à:
      Soit 2 indices i = 0  et j
      Pour j = 0 jusqu'à la fin du tableau
        Si tab[j] != 0
          Alors tab[i] = tab[j] et i = i+1
      Bonne réflexion.
      0
      1. saraseff Messages postés 137 Statut Membre 2 > loupius Messages postés 789 Statut Membre
         
        Oui mais si tab[j]==0 ??? c'est en fait sa mon problème je veux supprimer les zéros de mon tableau sans avoir recours à un autre tableau
        0
      2. saraseff Messages postés 137 Statut Membre 2 > loupius Messages postés 789 Statut Membre
         
        Bon j'ai encore une fois essayé comme ceci mais sa ne marche pas parfaitement seulement pour les premières cases!
        for(i=0;i<taille;i++)
        {
        if(tab[i]!=0)
        {
        tab[cpt]=tab[i];
        cpt++;
        }
        }
        0
      3. loupius Messages postés 789 Statut Membre 148 > saraseff Messages postés 137 Statut Membre
         
        Mais si, ça marche, je te donne un exemple:
        #include <stdio.h>
        #include <stdlib.h>
        
        #define TAILLE  8
        
        int main(int argc, char *argv[])
        {
          int i, cpt;
          int tab[TAILLE] = { 1, 2, 0, 3, 4, 0, 5, 0 };
          for (i=cpt=0; i<TAILLE; i++)
            if(tab[i])
              tab[cpt++] = tab[i];
          for (i=0; i<cpt; i++)
             printf ("%d ", tab[i]);
          printf ("  cpt=%d\n", cpt);
          return EXIT_SUCCESS;
        }
        
        [loupius@p3000]$ gcc -Wall essai.c
        [loupius@p3000]$ ./a.out
        1 2 3 4 5   cpt=5
        [loupius@p3000]$
        Au lieu d'utiliser les balise 'gras', utilise plutôt les balises 'code'.
        Bonne réflexion et bonne nuit.
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. saraseff Messages postés 137 Statut Membre 2
     
    cpt=0;
    for(i=0;i<taille;i++)
    {
    if(tab[i]!=0)
    {
    tab[cpt]=tab[i];
    cpt++;
    }
    }
    for(cpt=0;cpt<taille;cpt++)
    {
    tab[cpt]=0;
    }

    printf("voici votre tableau:\n");
    for(i=0;i<taille;i++)
    printf("%d",tab[i]);


    Voilà ce que j'ai fait mais comme je t'ai dit sa ne marche pas est-ce que tu as une idée !
    0
  7. saraseff Messages postés 137 Statut Membre 2
     
    merci louoius sa marche maintenant ;) tu me sauves
    0