Partage
  • Partager sur Facebook
  • Partager sur Twitter

Planning de la journée france ioi

    1 décembre 2020 à 12:10:50

    Bonjour a tous un petit coup pouce sur cette exo svp je vois pourtant simple mais..

    Ce que doit faire votre programme :

    Votre programme doit d'abord lire un entier décrivant votre position actuelle sur la route, sous la forme d'un nombre de kilomètres par rapport au début de la route. Ensuite, il doit lire un entier donnant le nombre de villages. Pour chaque village, il doit lire un entier décrivant la position de ce village le long de cette même route. Votre programme doit alors afficher le nombre de villages qui se trouvent à une distance inférieure ou égale à 50 km de votre position actuelle.

    Exemple

    entrée :

    120
    5
    30
    113
    187
    145
    129

    sortie :

    3

    Commentaires

    Vous êtes à la position 120 et il y a donc trois villages à moins de 50 km : ceux aux positions 113, 145 et 129. Les deux autres villages sont trop lointains.
    #include <stdio.h>
    #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
    
    
    int position;
     int nbvillage ;
     int posVillage ;
    
    int main()
    {      
       scanf("%d %d" , &position,&nbvillage);
       position=position-nbvillage;
       
       scanf("%d",&posVillage );
      
    
    if(nbvillage -posVillage <=50) 
    { 
          posVillage ++;
       }
       
       printf("%d",posVillage );
    
    
       
    }
    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2020 à 12:18:42

      doub01 a écrit:

      Pour chaque village, il doit lire un entier décrivant la position de ce village le long de cette même route. 

      Il peux y avoir plusieurs village le long de la route ! Tu dois donc saisir la position de chaque village ! Dans l'exemple il y en a 5 !
      • Partager sur Facebook
      • Partager sur Twitter
        1 décembre 2020 à 14:10:34

        Hello @doub1

        Si tu ne cherchais pas à produire un programme en C, mais à m'expliquer ce que je dois faire que me dirais-tu ?

        • Partager sur Facebook
        • Partager sur Twitter
          1 décembre 2020 à 14:33:31

          yes ce ca mais après  30-40 essaie je suis au même point mal compris le sujet
          • Partager sur Facebook
          • Partager sur Twitter
            1 décembre 2020 à 15:07:34

            @doub01

            Essaye déjà de nous expliquer en français ce que tu ferais toi sans essayer de programmer. Parce que si tu n'arrives pas à expliquer ce qu'il faut faire tu ne pourras jamais produire un programme quelconque pour résoudre le problème.

            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2020 à 15:57:30

              scanner la position actuelle
              scanner le nombre de vilalge 
              calcul pour savoir si le village est <=50km
              si <=50km
              alors incrémenter une variable villagedispo
              • Partager sur Facebook
              • Partager sur Twitter
                1 décembre 2020 à 16:08:08

                Tu dois saisir la position de chaque village, tu doit donc faire une boucle pour saisir chaque village !

                Exemple,

                1) tu saisies ta position !

                2) tu saisies le nombre de village (5 dans l'exemple) !

                3) tu saisies la position de chaque village : ce qui veut dire boucle ( 5 fois dans l'exemple) !

                   et toujours dans la boucle, incrémenter un compteur si le village est à 50 km ou moins de ta position !

                4) restituer le résultat ! 

                • Partager sur Facebook
                • Partager sur Twitter
                  1 décembre 2020 à 16:31:16

                  doub01 a écrit:

                  scanner la position actuelle
                  scanner le nombre de vilalge 
                  calcul pour savoir si le village est <=50km
                  si <=50km
                  alors incrémenter une variable villagedispo


                  Ne pense même pas à essayer de faire un programme. Explique en moi en français ce que tu fais si moi je te dis :

                  tu est au km 240, il y a 7 villages qui sont aux km 12 125 175 205 300 310 et 450. Combien sont à moins de 65 km de toi ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 décembre 2020 à 17:17:38

                    Juste pour confirmer que répondre en français à White Crow est la première étape : ça permet de mettre de l'ordre dans les idées, c'est grâce à ça qu'on pourra écrire le plan du programme. Pour moi, c'est la bonne méthode.

                    (Une petite anecdote... Jusqu'à récemment, je donnais des cours de maths à domicile. J'ai remarqué que pour résoudre un problème de maths ils faisaient comme doub01 : ils essayaient de se lancer dans la résolution sans avoir un peu réfléchi. Et je faisais comme White Crow, je leur demandais : « pas si vite ! pour résoudre ce problème, dites-moi en français quelles étapes vous allez suivre ». Et presque toujours la réponse était : « je vais faire f'(x) = machin(x+2) au carré... la limite = l'inverse de (x+3)... AB = 3 AC - 2 AD... » ce genre de réponse. Moi j'attendais quelque chose comme « je vais étudier les variations de la fonction, j'en déduirai l'existence d'un minimum et je regarderai à quelle condition il est unique ». Je vois qu'en programmation on rencontre les mêmes difficultés...)

                    -
                    Edité par robun 1 décembre 2020 à 17:32:53

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 décembre 2020 à 18:40:40

                      Ça n'est pas dit si le village est avant ou après notre position.
                      On fait comment pour tester dans ce cas?
                      C'est un autre détail à régler.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Le Tout est souvent plus grand que la somme de ses parties.

                        1 décembre 2020 à 18:45:14

                        PierrotLeFou a écrit:

                        Ça n'est pas dit si le village est avant ou après notre position.

                        Tout part de la position 0 (de la route), aussi bien ta position que celle des villages.



                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 décembre 2020 à 18:57:27

                          Supposons que je suis à la position 200 et j'ai un village à 175 et un autre à 225.
                          Dois-je tenir compte de celui à 175?
                          Je veux faire ressortir l'idée de la valeur absolue quand on calcule la distance.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                            1 décembre 2020 à 19:04:29

                            Oui, il me semble que c'est assez clair, non ?

                            doub01 a écrit:

                            afficher le nombre de villages qui se trouvent à une distance inférieure ou égale à 50 km de votre position actuelle.

                            Pour moi ça comprend aussi bien ceux où j'ai passé que ceux non encore atteint !

                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 décembre 2020 à 19:17:55

                              Donc, il devra utiliser la valeur absolue ou vérifier si la différence des distances est négative.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Le Tout est souvent plus grand que la somme de ses parties.

                                1 décembre 2020 à 20:08:44

                                PierrotLeFou a écrit:

                                Donc, il devra utiliser la valeur absolue ou vérifier si la différence des distances est négative.


                                Tu n'es pas obligé d'utiliser la valeur absolue d'une distance, tu peux simplement vérifier l'appartenance à un intervalle.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 décembre 2020 à 20:13:09

                                  PierrotLeFou a écrit:

                                  Supposons que je suis à la position 200 et j'ai un village à 175 et un autre à 225.
                                  Dois-je tenir compte de celui à 175?
                                  Je veux faire ressortir l'idée de la valeur absolue quand on calcule la distance.


                                  Ben oui. Une distance, c'est une distance. Peu importe que ce soit en avant ou en arrière.

                                  Quand tu parles de valeur absolue, je trouve que tu as le même défaut que mes anciens élèves et que doub01 : tu te jettes trop vite dans les calculs :)

                                  (De toute façon, ce qui bloque doub01 pour le moment, c'est le concept de boucle et la nécessité de s'en servir. Je crois que c'est là où White Crow veut en venir, et je pense qu'il s'y prend bien.)

                                  -
                                  Edité par robun 1 décembre 2020 à 20:14:56

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 décembre 2020 à 20:21:41

                                    Merci Robun, mais je ne suis pas pédagogue pour un sou.

                                    J'ai les mêmes problèmes avec les jeunes dèv qui foncent tête baissée pour pisser du code en continu à vouloir réfléchir en C, Java ou Python sans même prendre le temps de réfléchir tout court.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 décembre 2020 à 11:08:50

                                      Bonjour je vous merci pour vos réponse pertinente ce exactement cela "pisser du code" je parti tête baisser , je vais pas aller loin..

                                      en premier notre  position depuis le début de la route (en kilomètres)  , et en deuxième temps  le nombre de lieux (village)

                                      pour apres donner un par un la position d'un village , le nombre de villages qui se trouver a une distance <=50 donc la je dois ajouter un totalvillages 

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 décembre 2020 à 13:19:23

                                        C'est pas très clair, mais je crois que tu as compris le principe.

                                        doub01 a écrit:

                                        pour apres donner un par un la position d'un village , le nombre de villages qui se trouver a une distance <=50 donc la je dois ajouter un totalvillages 

                                        C'est ça l'idée, en effet : les positions des villages doivent être saisies une par une (c'est pourquoi il faut une boucle). Mais je ne sais pas si tu as compris que les calculs de distance nécessitent aussi une boucle (la même ? pas la même ?...)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 décembre 2020 à 13:32:24

                                          robun a écrit:

                                          (la même ? pas la même ?...)

                                          Moi, je prendrais la même, mais les deux solutions sont possible.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 décembre 2020 à 14:07:01

                                            #include <stdio.h>
                                            #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
                                            
                                            int position;
                                             int nbvillage ;
                                               int posVillage ;
                                               int total=0;
                                            
                                             
                                            
                                            int main()
                                            {   
                                              
                                            
                                               scanf("%d %d %d ",  &nbvillage , &position,&posVillage);
                                              int total=0;
                                               
                                                repeat(nbvillage)
                                                {
                                              
                                               
                                               int ecart= position-posVillage;
                                               
                                               if (ecart <=0)
                                            { 
                                                 ecart=-ecart;
                                                 }
                                            
                                            
                                            
                                             if (ecart  <=50)
                                            { 
                                                 total++;
                                               }
                                               }
                                               printf("%d",total);
                                            
                                            
                                            
                                            }
                                             voila ce que j'ai pu obtenir ce pas encore ca
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 décembre 2020 à 14:48:32

                                              La solution t'est littéralement donnée. Tu n'as pas besoin de réfléchir à quelle solution tu vas implémenter on te la donne :

                                              Votre programme doit d'abord lire un entier décrivant votre position actuelle sur la route, sous la forme d'un nombre de kilomètres par rapport au début de la route.

                                              int position_actuelle;
                                              scanf("%d", &position_actuelle);


                                              Ensuite, il doit lire un entier donnant le nombre de villages.

                                              int nombre_villages;
                                              scanf("%d", &nombre_villages);



                                              Pour chaque village,

                                              repeat(nombre_villages) {


                                              il doit lire un entier décrivant la position de ce village le long de cette même route.

                                                  int position_village;
                                                  scanf("%d", position_village);



                                              Votre programme doit alors afficher le nombre de villages qui se trouvent à une distance inférieure ou égale à 50 km de votre position actuelle.

                                              Voilà la phrase la plus compliquée de l'énoncé de la solution. On te dit que tu va devoir compter le nombre de villages qui sont à moins de 50km de toi.
                                              Compter → ça veut dire avoir une variable qui va comptabiliser ce nombre de villages. Il aurait fallu la déclarer avant le repeat →

                                              int nombre_villages_a_moins_de_50km=0;
                                              repeat(nombre_villages) {

                                              ensuite il faut savoir comment calculer la distance qui te sépare un village. Ça c'est pas compliqué, tu prends le km sur lequel est le village et soustrais le kilomètre sur lequel tu es. Si cet écart est positif alors c'est la distance, si cet écart est négatif alors il faut prendre l'opposé de ce nombre pour avoir la distance.

                                                  int ecart = position_actuelle - position_village;
                                                  int distance_au_village=0;
                                              
                                                  if (ecart<0) {
                                                      distance_au_village = - ecart;
                                                  } else {
                                                      distance_au_village = ecart;
                                                  }
                                              

                                              Maintenant qu'on a calculé la distance au village, on augmente le nombre de villages à moins de 50km si cette distance est inférieure ou égale à 50 :

                                                  if (distance_au_village <= 50) {
                                                      nombre_villages_a_moins_de_50km = nombre_villages_a_moins_de_50km + 1;
                                                  }

                                              Et voilà ce qu'on doit faire pour chaque village. On ferme donc le bloc du repeat et on peut afficher le résultat

                                              }
                                              
                                              printf("%d\n", nombre_villages_a_moins_de_50km);
                                              


                                              ----------

                                              Maintenant tu peux te dire qu'il y a une autre manière de faire :

                                              Si tu es en position P, alors tu cherches le nombre de villages qui sont à des positions comprises entre P-50 et P+50 … En gros tu augmente le nombre de villages à moins de 50 km si leur position est supérieure ou égale à P-50 ET inférieure ou égale à P+50.

                                              Essaye aussi d'implémenter cette solution.

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Planning de la journée france ioi

                                              × 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