Suite numérique [Résolu]

TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 22 sept. 2015 à 11:54 - Dernière réponse : TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention
- 22 sept. 2015 à 14:51
Bonjour, j'ai un nouveau problème sur ce sujet :

programme suite
valeur, ancval : numérique
croissant : booléen
rep : caractere
debut
afficher "entrer une valeur"
saisir ancval
croissant ß vrai
afficher "voulez-vous continuer ? (O/N) : "
saisir rep
tantque rep = "0"
afficher "entrer une valeur"
saisir valeur
si valeur <= ancval alors
croissant ß faux
finsi
ancval ß valeur
afficher "voulez-vous continuer ? (O/N) : "
saisir rep
fintantque
si croissant alors
afficher "la suite est strictement croissante"
sinon
afficher "la suite n'est pas strictement croissante"
finsi
fin
.

Ensuite j'ai codé ca :
// -- programme principal --
void clear (void) {
 while (getchar () != '\n') ;
}

int main () {
 
 // déclarations
 double valeur = 0 ;
 double ancval = 0 ;
 bool croissant ;
 char rep = 'O' ;
 
 // saisie d'une valeur
 printf(" Entrer une valeur = ") ;
 scanf("%lf",&ancval) ;
 croissant = true ;
 printf("Voulez-vous continuer ? (O/n) = ") ;
 clear () ;
 scanf("%c",&rep) ;
 while (rep == 'O') {
  printf("saisir une valeur = ") ;
  scanf("%lf",&valeur) ;
  if (valeur <= ancval) {
   croissant = false ;
  }
  ancval += valeur ;
  printf("Voulez-vous continuer ? (O/n) = ") ;
  clear () ;
  scanf("%c",&rep) ;
 }
     if (croissant = true) {
      printf("la suite est strictement croissante = Oui", croissant) ;
     }else{
      printf("la suite n'est pas stictement croissante = Non", non croissant) ;
     }
     
 return 0 ;
 
}

Voilà, donc je pense pas qu'il me retourne ce qu'il faut, parce que je ne sais pas comment lui dire que ce n'est pas croissant quand c'est le cas !
Afficher la suite 

5 réponses

Répondre au sujet
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par cptpingu le 22/09/2015 à 14:03
0
Utile
Bonjour.

Je n'ai pas regardé en détails, mais à première vu, tu confonds "=" et "==", tout comme dans l'autre post que tu as fait.

Petite astuce pour ne pas se tromper entre "=" et "==". Au lieu d'écrire: "if (a == 42)", écris "if (42 == a)", car si tu mets "=" au lieu de "==", ça ne compilera pas, et tu le verras tout de suite.

À propos des booléens:
On utilise un booléen "tel quel", c'est-à-dire que c'est déjà une unité logique, qui ne nécessite pas de comparaison pour être transformé en unité logique. Je m'explique. Un if attend une unité logique (vrai ou faux). Un "a < b" est une unité logique accepté par le if. Mettre if (a) fonctionne uniquement parce que le compilateur transforme tout seul l'expression en: "if (a == 0)".
Il n'est donc pas nécessaire de faire un "if (true == true)", mais simplement de faire "if (true)".

Donc ton expression, même corrigée, "if (croissant == true)" est écrite de manière un peu "lourde". Il faudrait plutôt écrire "if (croissant)".
À noter que l'équivalent propre de "if (croissant == false)" serait "if (!croissant)".


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 22 sept. 2015 à 14:19
0
Utile
Mais le seul == que j'ai ai au niveau du while, çà c'est juste non ??
pour le reste je pense comprendre enfin j'espère surtout, mais par contre pour les 2 printf je ne suis pas sure, il ne m'affiche pas ce qu'il faut ! :(

PS : Par contre pour ce que tu m'explique pour le booléen je comprends pas trop....................., le booléen est censé retourner seulement 2 réponses, vrai ou faux ??
Commenter la réponse de TheRogerFederer
TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 22 sept. 2015 à 14:24
0
Utile
j'ai effectivement 2 warnings sur mes printf !
Il me dit : too many arguments for format
Commenter la réponse de TheRogerFederer
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par cptpingu le 22/09/2015 à 14:29
0
Utile
Le == au niveau du while est juste. Comme en C, il est possible de se tromper et d'écrire "=" a lieu de "==" (ce qui est tout à fait valide en C, on a le droit de changer une valeur au milieu d'une structure de contrôle), on conseille aux débutant d'écrire les conditions à "l'envers". Par exemple: while ('O' == rep).

Le "=" au niveau du "if (croissant = true)" est érroné. Tu dis vouloir mettre vrai dans croissant quoi qu'il arrive, et donc tu dis toujours que le nombre est croissant.

Le booléen vaut soit vrai, soit faux. Rien d'autre. Néanmoins, je parlais de la lourdeur d'écriture qu'a tout débutant quand il aborde ceux-ci pour la première fois.
Généralement un débutant va écrire: "if (ma_condition_bool == vrai)", alors qu'il est préfèrable d'écrire "if (ma_condition_bool)".

Pour tes printfs, il y a deux soucis:
  • Tu as oublié un \n à la fin.
  • Tu as oublié de dire ou tu voulais insérer tes résultats, il te manque le "format", c-à-d un %i quelque part :).


Maintenant, pourquoi afficher la valeur de "croissant", vu que tu sais déjà si c'est croissant ou non, via le if plus haut ?
Autant n'écrire que "est croissant" ou "ne l'est pas". Donc pas besoin de deux arguments au printf, un seul suffit.

Tel que:
     if (croissant)
       printf("La suite est strictement croissante\n") ;
    else
       printf("La suite n'est pas strictement croissante\n") ;


PS: "entrer" => "entrez", c'est de l'impératif :)

Améliorer votre expérience CodeS-SourceS avec ce plugin:
ttp://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
TheRogerFederer 256 Messages postés mercredi 31 mars 2010Date d'inscription 10 mars 2016 Dernière intervention - 22 sept. 2015 à 14:51
0
Utile
Pourtant en corrigeant le "Entrer" en "Entrez", et surtout en enlevant comme tu l'as montré les croissants derrière, elle marche parfaitement
Commenter la réponse de TheRogerFederer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.