Langage c petit problème

Résolu/Fermé
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 26 nov. 2008 à 18:07
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 27 nov. 2008 à 19:04
Bonjour, j'ai fait un code qui se compile très bien et qui marche bien le seul petit souci doit venir de mon algo mais je ne vois pas comment le résoudre, je vous explique : c'est un programme qui demande a l'utilisateur de tapé un nombre et autant qu'il veut normalement jusqu'a qu'il tape 0 pour signaler a l'utilisateur si la suite de nombre qu'il a rentré est soit croissante, soit décroissante soit constante et moi je ne peux rentrer que 2 nombres pas plus et je ne vois pas trop comment faire donc je vous laisse mon code et si vous trouvez ma petite faute je prendrais volontier votre aide.

#include<stdlib.h>
#include<stdio.h>

typedef enum {faux,vrai} bool;
void analyse_resultat(int nb1,int nb2,bool *ptcroiss,bool *ptconstant,bool *ptdecroiss);
void afficher_resultat(bool croiss,bool constant,bool decroiss);
int main(void)
{
        int n1,n2;
        bool croissant,constant,decroissant;
        croissant = vrai;
        constant = vrai;
        decroissant = vrai;
        printf("\n-1 pour terminer le programme");
        do{
                printf("\nSaisir un nombre (0 pour sortir)");
                scanf("%d",&n1);
                if(n1 == 0){
                        printf("\nLa suite est vide");
                }
                else
                        scanf("%d",&n2);
                        if(n1 >= 1 && n2 == 0){
                        printf("\nLa suite a un seul élément");
                }
                if(n1 >= 1){
                        analyse_resultat(n1,n2,&croissant,&constant,&decroissant);
                        n2 = n1;
                }
        }while(n1 == -1);
        afficher_resultat(croissant,constant,decroissant);
}


void analyse_resultat(int nb1,int nb2,bool *ptcroiss,bool *ptconstant,bool *ptdecroiss)
{
        if(*ptcroiss && nb1 > nb2){
                *ptcroiss = faux;
        }
        if(*ptconstant && nb1 != nb2){
                *ptconstant = faux;
        }
        if(*ptdecroiss && nb1 > nb2){
                *ptdecroiss = faux;
        }
}


void afficher_resultat(bool croiss,bool constant,bool decroiss)
{
        if(croiss){
                printf("\nLa suite est croissante");
        }
        else if(constant){
                printf("\nLa suite est constante");
        }
        else if(decroiss){
                printf("\nLa suite est décroissante");
        }
        else
                printf("\nLa suite est non tirée");
}
A voir également:

2 réponses

Droopy_ Messages postés 248 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 17 janvier 2009 25
26 nov. 2008 à 21:06
Bonjour,

Il y a plusieurs choses qui vont pas :
- Tu ne peux lancer que deux nombres, car tu lis n1, puis tu lis n2, puis tu analyse et tu recommences, donc uniquement deux valeurs à la fois.
Ce que tu veux faire, je pense, c'est tu lis n1, puis dans la boucle, tu lis n2, tu analyses, puis n1=n2 et on boucle...

- Certains tests doivent passer à la fin de la saisie. Par exemple, pour savoir s'il n'y a aucune ou une seule valeur. Il te faut un compteur pour compter le nombre de valeurs. Là, tu vérifies rien de très intéressant.

- De plus, quelle est la différence pour toi entre -1 terminer et 0 sortir ???
J'ai du mal à saisir, surtout que tu ne testes jamais 0.

- Ensuite, tes variables croissant, constant et decroissant sont déclarées dans la fonction main, elle ne peuvent pas être modifiée par la fonction analyse. (Du moins pas simplement ;-). Il faut les déclarer AVANT main.
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
27 nov. 2008 à 19:04
Désolé de te répondre que maintenant merci pour tes conseil !!
0