Partage
  • Partager sur Facebook
  • Partager sur Twitter

trouver le nombre de température

    23 octobre 2019 à 0:07:10

    Bonsoir 

    j'essaie faire cet algorithme 

    avec ce tableau température: 24,48,2,24,16,16,24 faire un algo qui affiche 24 est 2 fois, 48 est une fois, 2 est une fois, 16 est 2 fois...

    je bloque dans le test et quoi mettre dans la boucle. 

    ce que j'ai fais: 

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int tab[]={24,48,2,24,16,16,24};
        int nb=7;
        int k=0;
        for(int i=0;i<nb-1;i++){
                if(tab[i]==tab[i+1]){
                    k++;
    
                }
        printf("l'element %d apparait %d fois!\n",tab[i],k);
    
        }
    
    }



    merci d'avance bonne soirée

    -
    Edité par Rose93 23 octobre 2019 à 0:14:54

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2019 à 1:07:36

      Il faut que tu trouves le moyen de mémoriser chaque valeur entière que tu vas rencontrer dans le tableau et le nombre d'occurrences correspondantes.

      Vu qu'il s'agit de températures, les valeurs ne seront pas trop grandes et tu peux faire un tableau ayant autant de cases que de températures possibles. Chaque case mémorisera le nombre d'occurrences de la température qui servira ici d'indice pour pointer la bonne case du tableau.

      par exemple, cet algo générera un tableau dont les valeurs seront, en supposant les températures positives: [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,etc.]

      C'est la base du tri par panier.

      Si tu veux des températures négatives, il faudra inclure un décalage pour calculer les indices du tableau.

      -
      Edité par zoup 23 octobre 2019 à 1:09:28

      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2019 à 11:58:16

        j'ai essayé faire cet algo mais je ne sais pas pourquoi ca n'affiche rien. 

        Ce que j'ai fais : trier le tableau, j'ai essayé d'enregistrer la premier valeur pour la comparer aux autres et calculer le nombre d'occurrence.

        #include <stdio.h>
        #include <stdlib.h>
        void sort(int tableau[], int tailleTableau){
            int tab_tri=0;//considérer tableau trier éviter de trier pour rien
            int tmp=0;
            while(tab_tri==0){
                tab_tri=1;
                for(int i=0; i<tailleTableau-1; i++){
                    //comparaison
                    if(tableau[i]>tableau[i+1]){
                        //inverse les valeurs
                        tmp= tableau[i+1];
                        tableau[i+1]=tableau[i];
                        tableau[i]=tmp;
                        tab_tri=0;
                    }
                }
                tailleTableau= tailleTableau-1;
            }
        }
        int main()
        {
            int tab[]={24,48,2,24,16,16,24,-2,0,-15};
            int nb=10;
            int k=0;
            int tmp=0;
            int j=0;
            int i=0;
            sort(tab, nb);
        
            while(j>nb-1){
                
                for(int i=0; i<nb-1; i++){
                    if(tab[j]==tab[i+1]){
                        k++;
                    }
                }
                j++;
              printf("l'element %d apparait %d fois!\n",tab[j],k);  
            }
            
        
            
        }

        merci d'avance 

        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2019 à 12:18:54

          Il est clair que tu ne rentreras jamais dans la boucle while de la fonction main.
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2019 à 12:28:01

            zoup a écrit:

            Il est clair que tu ne rentreras jamais dans la boucle while de la fonction main.


            oui c'est vrai c'est j<nb-1.
            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2019 à 13:01:37

              Tu ne dis pas si c'est ok maintenant.

              Mais à mon avis, ça ne l'est pas: il faut peut-être remettre k à 0 de temps en temps

              -
              Edité par zoup 23 octobre 2019 à 13:01:45

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                23 octobre 2019 à 22:15:42

                salut

                je propose le code suivant, je voudrais votre avis svp

                #include <stdio.h>
                #include <stdlib.h>
                
                void tricroissant( int tab[], int taille)
                {
                    int tmp = 0;
                    for(int i = 0; i < taille; i++)
                    {
                        for(int j = i + 1; j < taille; j++)
                        {
                            if(tab[j] < tab[i])
                            {
                                tmp = tab[i];
                                tab[i] = tab[j];
                                tab[j] = tmp;
                            }
                        }
                    }
                }
                int main()
                {
                    int tab[] = {24, 48, 2, 24, 16, 16, 24, -2, 0, -15};
                    tricroissant( tab, 10);
                    int compteur;
                    for(int i = 0; i < 10; i += compteur)
                    {
                        compteur = 0;
                        for(int j = i; j < 10; j++)
                        {
                            if(tab[j] == tab[i]) compteur++;
                        }
                        printf("l'element %d apparait %d fois !\n", tab[i], compteur);
                    }
                    return 0;
                }
                



                -
                Edité par Anonyme 23 octobre 2019 à 23:26:29

                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2019 à 23:12:29

                  C'est pas mal du tout.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    23 octobre 2019 à 23:28:41

                    Merci zoup

                    je suis moi même débutant et j'essaie d'apprendre à travers les posts du forum.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 octobre 2019 à 17:45:02

                      Hello,

                      Je vais être le rabat-joie de service: ce code a un gros problème avec le i+=compteur: que se passe-t-il si un nombre n'existe qu'une seule fois dans le tableau ?

                      • 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

                        24 octobre 2019 à 19:12:52

                        voilà mon code:

                        #include <stdio.h>
                        #include <stdlib.h>
                        void sort(int tableau[], int tailleTableau){
                            int tab_tri=0;//considérer tableau trier éviter de trier pour rien
                            int tmp=0;
                            while(tab_tri==0){
                                tab_tri=1;
                                for(int i=0; i<tailleTableau-1; i++){
                                    //comparaison
                                    if(tableau[i]>tableau[i+1]){
                                        //inverse les valeurs
                                        tmp= tableau[i+1];
                                        tableau[i+1]=tableau[i];
                                        tableau[i]=tmp;
                                        tab_tri=0;
                                    }
                                }
                                tailleTableau= tailleTableau-1;
                            }
                        }
                        int main()
                        {
                            int tab[]={24,48,2,24,16,16,24,-2,0,-15};
                            int nb=10;
                            int k=0;
                            int tmp=0;
                            int j=0;
                            int i=0;
                            sort(tab, nb);
                        
                            for(int i=0; i<nb-1; i++){
                                k=0;
                                for(int j=0; j<nb-1; j++){
                                    if(tab[i]==tab[j]){
                                        k++;
                                    }
                               }
                               printf("l'element %d apparait %d fois!\n",tab[i],k);
                            }
                        
                            }

                        le problème j'aimerai afficher 16 vaut 3 fois et non 16 3 fois 16 3fois... 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 octobre 2019 à 19:31:26

                          edgarjacobs a écrit:

                          Hello,

                          Je vais être le rabat-joie de service: ce code a un gros problème avec le i+=compteur: que se passe-t-il si un nombre n'existe qu'une seule fois dans le tableau ?

                          Je ne comprends pas. Si l'élément n'est présent qu'une seule fois, compteur vaut 1 et i va pointer l'élément suivant.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 octobre 2019 à 20:07:16

                            @zoup: Ooupps, oui, j'ai mal lu, et vu un +1 comme à la  ligne 9. Sorry !
                            • 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

                            trouver le nombre de température

                            × 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