Suite numérique

Résolu
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 - Modifié par TheRogerFederer le 22/09/2015 à 11:58
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 - 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 !

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 22/09/2015 à 14:03
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
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
22 sept. 2015 à 14:19
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 ??
0
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
22 sept. 2015 à 14:24
j'ai effectivement 2 warnings sur mes printf !
Il me dit : too many arguments for format
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 22/09/2015 à 14:29
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 1
22 sept. 2015 à 14:51
Pourtant en corrigeant le "Entrer" en "Entrez", et surtout en enlevant comme tu l'as montré les croissants derrière, elle marche parfaitement
0
Rejoignez-nous