Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice france ioi niveau 1

Structure avancée - Calcul des dénivelées

15 août 2017 à 14:07:56

Bonjour à tous, voici l'exercice:

Votre programme lira d'abord un entier représentant le nombre de montées et descentes que vous avez réalisées. Pour chaque montée ou descente, il faut ensuite lire un entier représentant la variation d'altitude, cet entier étant strictement positif dans le cas d'une montée et strictement négatif dans le cas d'une descente (il n'y a rien à compter pour les tronçons qui sont bien à plat). Votre programme devra afficher l'altitude totale montée puis l'altitude totale descendue (ces deux nombres sont positifs).

Pour répondre à ce problème, que j'ai déjà résolu en python, j'ai écris ce code en C:

#include <stdio.h>

#define repeat(nb) for (int min=0, max=(nb); min<=max;min++) //Fonction repetition

int main()

{

   int nbDenivele; //nombre de monter et descente a lire

   scanf("%d", &nbDenivele); 

   int coeff; //coeff est une variable qui contient le nombre de mettre de monter ou de descente de chaque denivele

   int totalHaut=0;//total des metre monte

   int totalBas=0;//total des metre descendu

   repeat(nbDenivele) //pour le nombre de monte et de descente lu

   {

      scanf("%d", &coeff); //on lit le coeff

      if(coeff>0) //si le coeff est positif alors

      {

         totalHaut=totalHaut+coeff;

      }

      else //sinon

      {

         coeff=-coeff;

         totalBas+=coeff;

      }

   }

   printf("%d\n""%d", totalHaut, totalBas); //on affiche les resultats

}

Ce code ne fonctionne pas. Pour le premier test, nbDenivele=5. coeff va être égale successivement à 4, 7, -6, -3, et 2, on devrait donc avoir en sorti : monter = 4+7+2=13 et descente =6+3=9 or j'ai 15 et 9 au lieu de 13 et 9 en sorit de programme et je ne trouve pas mon erreur, merci de m'aider.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
15 août 2017 à 14:15:41

Salut,

Déjà, insères ton code avec le bouton </>.

Ensuite, il faut noter que le site FranceIOI n'est pas sécurisé du tout: stockage des données user en plaintext, site entier bourré de failles de type XSS/SQL injection et j'en passe et le pire dans tout ça c'est que l'équipe de maintenance/développeurs refuse de reconnaître ces problèmes et bloquent les comptes des personnes qui signalent ou s'interrogent quand à ces problèmes. Bref, regarde plutôt le site du Projet Euler si tu veux faire des exercices.

  • Partager sur Facebook
  • Partager sur Twitter
15 août 2017 à 14:43:29

En gros le site beugg et pas mon code ?
  • Partager sur Facebook
  • Partager sur Twitter
15 août 2017 à 14:46:25

BellangerThibaut a écrit:

En gros le site beugg et pas mon code ?

Déjà fais ce qu'il ta dit, et après on prendra la peine de regarder ton code source.
  • Partager sur Facebook
  • Partager sur Twitter
15 août 2017 à 14:57:34

#include <stdio.h>
#define repeat(nb) for (int min=0, max=(nb); min<=max;min++)
int main()
{
   int nbDenivele;
   scanf("%d", &nbDenivele);
   int coeff;
   int totalHaut=0;
   int totalBas=0;
   repeat(nbDenivele)
   {
      scanf("%d", &coeff);
      if(coeff>0)
      {
         totalHaut=totalHaut+coeff;
      }
      else
      {
         coeff=-coeff;
         totalBas+=coeff;
      }
   }
   printf("%d\n""%d", totalHaut, totalBas);
}
  • Partager sur Facebook
  • Partager sur Twitter
15 août 2017 à 22:17:14

#include <stdio.h>

static int  affiche_altitude_total(int n)
{
    int     i;
    int     nb;
    int     totBas;
    int     totHaut;

    i = 0;
    nb = 0;
    totBas = 0;
    totHaut = 0;
    while (i < n)
    {
        printf("Donner une variation d'altitude : ");
        if (!scanf("%d", &nb))
            return (-1);
        if (nb > 0)
            totHaut += nb;
        else
            totBas += nb;
        i += 1;
    }
    printf("-->Monte total : %d\n-->Descente total : %d\n", totHaut, -totBas);
    return (0);
}

int     main(void)
{
    int nbDenivele;

    nbDenivele = 0;
    printf("Entrer un nb de denivele : ");
    if (!scanf("%d", &nbDenivele) ||
        affiche_altitude_total(nbDenivele) == -1)
    return (84);
   return (0);
}

-
Edité par banebps 15 août 2017 à 22:50:33

  • Partager sur Facebook
  • Partager sur Twitter
16 août 2017 à 18:43:23

Avec un œil neuf aujourd'hui sur mon code j'ai trouvé mon erreur , j'avais initialisé ma fonction repeat à 0 au lieu de 1 donc je faisait un tour en trop dans ma boucle .

Merci à tous pour votre aide :)

-
Edité par BellangerThibaut 16 août 2017 à 18:50:37

  • Partager sur Facebook
  • Partager sur Twitter