Partage
  • Partager sur Facebook
  • Partager sur Twitter

les tableaux en c

Sujet résolu
    14 décembre 2018 à 19:21:28

    bonjour a vous tous, 

    voila j'ai un exercice sur les tableaux qui demande à éliminer les éléments nuls en les translatant vers soit la gauche ou la droite (comme on veut)

    exemple : 

    {5,0,0,2,3,0,1} et le résultat devra être {5,2,3,1,0,0,0} ou alors {0,0,0,5,2,3,1}

    voilà je pense que mon résonnement est correcte c'est que j'ai mis deux indices les élément nuls je les mets à la fin et les autre au début sauf que ça ne marche pas vraiment et c'est pour cela j'ai mis des printf un peu partout pour comprendre le fonctionnement sauf que rien et là je fais appel a vous merci encore  

    #include <stdio.h>
    
    int main ()
    {
    	int t1[7] = {5,0,0,9,3,0,1};
    	int t2[7] = {0};
    	
    	int i=0,j=0;
    	
    	j=6;
    	i=0;
    	while (i<7)
    	{
    		printf("i=%d\n", i);
    		if(t1[i] != 0)
    		{
    			t2[j] = t1[i];
    			j--;
    			printf("t2[j]=%d\n", t2[j]);
    		}
    
    		else
    		{	
    			printf("j1=%d\n",j );
    			
    			t2[i] = t1[i];
    			printf("t2[i]=%d\n", t2[i]);
    			
    			printf("j2=%d\n",j );
    		}
    		i++;
    
    
    	}
    
    	for(i=0; i<7 ; i++)
    
    		printf("%7d",t2[i] );
    
    
    	return 0;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      14 décembre 2018 à 19:55:52

      Hello,

      Enlève tout le else.... ;)

      Mais ton programme ne respecte pas l'ordre des éléments: 5,0,0,9,3,0,1 devient 0,0,0,1,3,9,5

      -
      Edité par edgarjacobs 14 décembre 2018 à 20:01:30

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        14 décembre 2018 à 20:14:38

        beh non on enlevant le else ça na rien changé et en plus ce n'est pas ça le résultat 0,0,01,3,9,5 le ésultat devra être 5,9,3,1,0,0,0 ou alors 0,0,0,5,9,3,1 c'est ça 

        merci a toi 

        • Partager sur Facebook
        • Partager sur Twitter
          14 décembre 2018 à 21:21:50

          Dans ton premier message le résultat obtenu conservait l'ordre (5-2-3-1 restait 5-2-3-1).

          À présent, tu dis que l'ordre doit être inversé (1-3-9-5 devient 5-9-3-1).

          Il faudrait savoir...

          -
          Edité par robun 14 décembre 2018 à 21:22:05

          • Partager sur Facebook
          • Partager sur Twitter
            14 décembre 2018 à 22:43:02

            edgarjacobs a écrit:

            Enlève tout le else

            Pas uniquement le else

            -
            Edité par edgarjacobs 14 décembre 2018 à 22:45:19

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              15 décembre 2018 à 9:23:42

              bonjour Robun, je ne faisait que répondre à edgarjacobs, encore une fois je vais présenter la problématique, c'est un tableau contenant des nombres et des zéros l'objectif est de translater les zéros soit a la droite soit a la gauche exemple : 

              {5,0,0,9,3,0,1} deviendra {5,9,3,1,0,0,0} ou bien {0,0,0,5,9,3,1} voilà c'est la problèmatique sauf que je n'obtient pas le résultat voulu avec mon programme et là je fais appel a vous pour m'aider merci 

              • Partager sur Facebook
              • Partager sur Twitter
                15 décembre 2018 à 10:57:32

                Bonjour,

                Par rapport à ton code initial, comme l'a dit Edgarjacobs il faut enlever le blocs else, mais ce n'est pas tout.

                Explications de ton code sans le blocs else seulement

                t1 = [1,0,2]
                t2 = [0,0,0]

                pour i = 0 et i = 1
                t2 = [0,0,1]

                pour i = 2
                t2 = [0,2,1]

                Supprimes les lignes 10 et 11 et modifie la ligne 18 en j++. Ou initialise i et j à 6 tous les deux (et adaptes ton code en fonction du parcours du tableau).
                • Partager sur Facebook
                • Partager sur Twitter

                Make it simple.

                  15 décembre 2018 à 14:40:37

                  j'ai rien compris a ce que vous venez d'écrire en fait le t2 je l'ai juste initialisé avec zéro car souvent quand je le fait pas je me retrouve avec des valeurs un peu bizarre c'est tout le principe est que on translate les nombres dans l'ordre dans le quels ils le sont mais je vous remercie d'avoir essayer de m'aider
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 décembre 2018 à 15:20:16

                    Bon j'ai bien compris votre énoncé maintenant si vous ne savez pas lire les consignes qu'on vous donne ce n'est pas de ma faute.

                    Voilà ce que j'ai voulu dire :

                    Lecture de droite à gauche
                    #include <stdio.h>
                     
                    int main (){
                        int t1[7] = {5,0,0,9,3,0,1};
                        int t2[7] = {0};
                         
                        int i=6,j=6;
                        
                        for (i = 6; i >= 0; i--){
                            printf("i=%d\n", i);
                            if(t1[i] != 0){
                                t2[j] = t1[i];
                                j--;
                                printf("t2[j]=%d\n", t2[j]);
                            }
                        }
                        for(i=0; i<7 ; i++)
                            printf("%7d",t2[i]);
                     
                        return 0;
                    }

                    Lecture de gauche à droite
                    #include <stdio.h>
                     
                    int main (){
                        int t1[7] = {5,0,0,9,3,0,1};
                        int t2[7] = {0};
                         
                        int i=0,j=0;
                        
                        for (i = 0; i < 7; i++){
                            printf("i=%d\n", i);
                            if(t1[i] != 0){
                                t2[j] = t1[i];
                                j++;
                                printf("t2[j]=%d\n", t2[j]);
                            }
                        }
                        for(i=0; i<7 ; i++)
                            printf("%7d",t2[i] );
                     
                        return 0;
                    }

                    Maintenant pour ce genre d'exercice bateau, je vous conseille de poser d'abord sur papier ce que vous souhaites avoir, le modéliser étape par étape (pour i = 0 je dois avoir ... pour i = 1 je dois avoir etc...) puis transcrire votre itération en code.

                    Bonne journée.

                    -
                    Edité par florentpalanque 15 décembre 2018 à 15:20:46

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Make it simple.

                      16 décembre 2018 à 13:10:00

                      En général, quand un exercice demande de modifier un tableau, il s'agit
                      1. de créer une fonction;
                      2. de modifier le tableau passé en paramètre sans en créer un nouveau.

                      void moveValuesLeft(int value, int *arr, size_t size)
                      {
                      	size_t cursor = size;
                      	size_t insert = size;
                      
                      	while (cursor > 0) {
                      		--cursor;
                      		if (arr[cursor] != value) {
                      			--insert;
                      			arr[insert] = arr[cursor];
                      		}
                      	}
                      	while (insert > cursor) {
                      		--insert;
                      		arr[insert] = value;
                      	}
                      }
                      
                      void moveValuesRight(int value, int *arr, size_t size)
                      {
                      	size_t cursor = 0;
                      	size_t insert = 0;
                      
                      	while (cursor < size) {
                      		if (arr[cursor] != value) {
                      			arr[insert] = arr[cursor];
                      			++insert;
                      		}
                      		++cursor;
                      	}
                      	while (insert < cursor) {
                      		arr[insert] = value;
                      		++insert;
                      	}
                      }



                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 décembre 2018 à 20:08:20

                        bonsoir a vous tous je voulais vous remercier d'avoir pris de votre temps et me répondre et merci a toi florentpalanque j'ai suivi vos conseil et j'ai eu le même rendu sans même regarder la solution encore merci a vous tous
                        • Partager sur Facebook
                        • Partager sur Twitter

                        les tableaux en c

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown