TheRogerFederer
Messages postés256Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention10 mars 2016
-
Modifié par TheRogerFederer le 22/09/2015 à 11:58
TheRogerFederer
Messages postés256Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention10 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 !
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)".
TheRogerFederer
Messages postés256Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention10 mars 20161 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 ??
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
Vous n’avez pas trouvé la réponse que vous recherchez ?