Langage c petit problème

Résolu
rafale69300 Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -  
rafale69300 Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   25
 
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   Statut Membre Dernière intervention   2
 
Désolé de te répondre que maintenant merci pour tes conseil !!
0