Petite code qui gère un four.

Four

a marqué ce sujet comme résolu.

Bonjour à tous, voici un petit code que j’ai fais avec son algorithme… bien que le code soit fonctionnelle et que ma logique semble bonne j’ai voulu ajouter une demande à l’utilisateur pour continuer ou non la boucle mais je n’arrive pas à savoir ou placé ma boucle do while et si il faut utilisé une telle boucle, ça fait 2h que je bloc dessus je n’arrive pas à savoir ou placé mon do while avec la demande à l’utilisateur si on continue à cuire ou pas.

Voici le code et son algorithme. (j’ai fait l’algorithme car j’ai eu quelques complication dans mes codes précédent que j’ai envoyé sur le forum et ma logique semblait pas très bonne donc j’ai voulu ressayé un code en faisant son algorithme mais je pense que ma logique est bonne c’est juste que je n’arrive pas à placé le do while et la demande de rep au bon endroit.

merci de m’aider à comprendre ou est-ce que je dois mettre cette boucle do while et si c’est une boucle do while qu’il faut que j’utilise.

code :

//Le four et le poulet.

/*
Algorithme four :

	déclarer variable : Temp, Minutes : entier.
                        FourEtat : bool.
                        FourOpen : chaine de caractère.

	Demande à l'utilisateur d'allumé le four

        tantque le four est ouvert alors
            mettre le fourEtat à vrai

            tant que le fourEtat sst vrais alors

                Demande a l'utilisateur de réglé la température pour préchauffer four
                Demande à l'utilisateur combien de minutes mettre pour préchauffer le four

                tant que minutes est supérieur à 1 et inférieur au minutes entrée

                    décrémente minute de 1;

                    si les minutes sont inférieur au minutes entrée alors
                        affiche le nombre de minutes restante
                    sinon si les minutes sont inférieur ou égale à zéro alors
                        Affiche : Ouvrir la porte Mettre poulet dans le four et en suite fermer la porte
                    finsi.

                fintantque.

        sinon

            mette le fourEtat à faux

        finsi.

        fintantque.
finprogramme.

*/

#include <iostream>
#include <string>

int main()
{
    int temp,minutes;
    bool fourEtat = "False";
    std::string fourOpen;
    char rep{'0'};

    do{

        std::cout <<"Veuillez allumer le four taper On pour allume le four : ";
        std::cin >> fourOpen;




             while (fourOpen =="On")
            {
                fourEtat = true;


                    while (fourEtat == true)
                    {
                        std::cout <<"Veuillez entree la temperatur du four : ";
                        std::cin >> temp;
                        std::cout <<"Veuillez entee les minutes pour prechauffer le four : ";
                        std::cin >> minutes;


                        while (minutes < 0 || minutes >= 0)
                        {


                           if (minutes > 0 && minutes <= 60 && temp > 0 && temp <= 250)
                           {
                               minutes --;
                               std::cout <<"Il reste encore : " << minutes << "minutes."<<std::endl;
                               break;
                           }
                           else if (minutes <= 0 || temp <= 0)
                           {
                               std::cout <<"Veuillez ouvrir la porte du four ensuite veuillez retirer le poulet du four, et ensuite fermer la porte."<<std::endl;
                               break;
                           }
                           else
                           {
                               std::cout <<"Erreur !"<<std::endl;
                               fourEtat = false;
                               break;
                           }

                        }

                    }

            }

            std::cout <<"Cuire autre chose ? "<<std::endl;
            std::cin >> rep;
       }while (rep != 'O' || rep !='o');

}


Merci d’avance pour votre aide.

Passez une bonne soirée.

+0 -0

Bonjour,

Oui, une boucle do/while() est ce qu’il faut pour que l’utilisateur puisse recommencer. Comment gérer cette boucle do/while()? Il faut faire exactement ce que tu as fait! Sauf que l’on recommence si la réponse est égale à '0' ou bien est égale à 'o’, tu as utilisé !=.

Ça ne marche pas, parce que dans ta boucle tu as plein de boucles qui elles, ne se terminent jamais.

  • while ( fourOpen=="On" ) teste quelque chose qui reste tout le temps vrai!
  • while ( fourEtat==true ) teste aussi quelque chose qui reste vrai (à moins de choisir une température de plus de 256°C.)
  • while ( minutes<0 || minutes>=0 ) est aussi toujours vrai. Tout nombre est ou bien strictement négatif ou bien supérieur ou égal à zéro! Il y a des break donc cette boucle est quittée rapidement mais ton four ne va pas beaucoup chauffer!
+0 -0

Bonjour,

Oui, une boucle do/while() est ce qu’il faut pour que l’utilisateur puisse recommencer. Comment gérer cette boucle do/while()? Il faut faire exactement ce que tu as fait!

Ça ne marche pas, parce que dans ta boucle tu as plein de boucles qui elles, ne se terminent jamais.

  • while ( fourOpen=="On" ) teste quelque chose qui reste tout le temps vrai!
  • while ( fourEtat==true ) teste aussi quelque chose qui reste vrai (à moins de choisir une température de plus de 256°C.)
  • while ( minutes<0 || minutes>=0 ) est aussi toujours vrai. Tout nombre est ou bien strictement négatif ou bien supérieur ou égal à zéro! Il y a des break donc cette boucle est quittée rapidement mais ton four ne va pas beaucoup chauffer!
dalfab

Ah ok merci bcp, sauf que je vois pas ce que je dois faire du coup lol….

+0 -0

Salut,

Ah ok merci bcp, sauf que je vois pas ce que je dois faire du coup lol….

Ben ça… C’est à toi de choisir le comportement que tu veux. Là on sait pas vraiment où tu veux aller parce que ni le pseudo-code ni l’implémentation n’ont de sens. Plutôt que d’inventer des exercices pas très bien définis dans ton coin, tu ferais mieux d’essayer de résoudre des exercices clairement posés.

Si on reprend ton pseudo-code :

	déclarer variable : Temp, Minutes : entier.
                        FourEtat : bool.
                        FourOpen : chaine de caractère.

Déjà là, c’est quoi la distinction sémantique entre FourEtat et FourOpen ? Pourquoi l’un est un bool et l’autre une string ?

	Demande à l'utilisateur d'allumé le four

Ton pseudo-code ne dit pas quoi faire de la réponse de l’utilisateur.

        tantque le four est ouvert alors

Déjà là ça par mal, on vient de demander d’allumer le four, mais tu fais une condition sur le fait qu’il est ouvert (??? on ne préchauffe pas un four la porte ouverte !).

            mettre le fourEtat à vrai

Même question que précédemment, quel est le sens de fourEtat ?

            tant que le fourEtat sst vrais alors

Soit.

                Demande a l'utilisateur de réglé la température pour préchauffer four
                Demande à l'utilisateur combien de minutes mettre pour préchauffer le four

Ça devrait pas être au début, ça ? Et plus utile que demander "d’allumer le four"…

                tant que minutes est supérieur à 1 et inférieur au minutes entrée

Il n’y a rien qui fait augmenter minutes, donc la condition "inférieur aux minutes entrées" sera toujours vraie si on la prend au sens "inférieur ou égal", ou bien fausse au début et la boucle ne sera jamais exécutée si on la prend au sens "inférieur strictement"

                    décrémente minute de 1;

Soit. Les minutes vont s’écouler rapidement !

                    si les minutes sont inférieur au minutes entrée alors
                        affiche le nombre de minutes restante
                    sinon si les minutes sont inférieur ou égale à zéro alors
                        Affiche : Ouvrir la porte Mettre poulet dans le four et en suite fermer la porte
                    finsi.

Comme dit ci-dessus, la première condition est toujours vraie !

                fintantque.

Là tu finis la boucle sur les minutes supérieures à 1, soit.

        sinon

??? Ce sinon ne correspond à aucun si !

            mette le fourEtat à faux

OK, donc là tu rends la boucle sur fourEtat (et la variable fourEtat elle-même) inutile(s) puisque tu remplis la condition de sortie après la première exécution quoiqu’il arrive.

        finsi.

Pareil, le finsi ne correspond à rien.

        fintantque.

Et en arrivant à cette fin de boucle, fourEtat sera faux, et donc la boucle ne sert à rien.

Bref, tout ça pour dire que tu pars d’un problème mal posé, puis tu l’implémentes différemment mais d’une façon qui n’a pas bien plus de sens… C’est le meilleur moyen pour t’empêtrer longtemps dans des questions qui n’ont pas de réponse parce que tu t’attaques à un problème mal défini. Prends un exo comme ceux de france-ioi avec un énoncé clair, au moins tu auras un but moins vague que ton truc de four et de poulet…

+1 -0

Salut,

Ah ok merci bcp, sauf que je vois pas ce que je dois faire du coup lol….

Ben ça… C’est à toi de choisir le comportement que tu veux. Là on sait pas vraiment où tu veux aller parce que ni le pseudo-code ni l’implémentation n’ont de sens. Plutôt que d’inventer des exercices pas très bien définis dans ton coin, tu ferais mieux d’essayer de résoudre des exercices clairement posés.

Si on reprend ton pseudo-code :

	déclarer variable : Temp, Minutes : entier.
                        FourEtat : bool.
                        FourOpen : chaine de caractère.

Déjà là, c’est quoi la distinction sémantique entre FourEtat et FourOpen ? Pourquoi l’un est un bool et l’autre une string ?

	Demande à l'utilisateur d'allumé le four

Ton pseudo-code ne dit pas quoi faire de la réponse de l’utilisateur.

        tantque le four est ouvert alors

Déjà là ça par mal, on vient de demander d’allumer le four, mais tu fais une condition sur le fait qu’il est ouvert (??? on ne préchauffe pas un four la porte ouverte !).

            mettre le fourEtat à vrai

Même question que précédemment, quel est le sens de fourEtat ?

            tant que le fourEtat sst vrais alors

Soit.

                Demande a l'utilisateur de réglé la température pour préchauffer four
                Demande à l'utilisateur combien de minutes mettre pour préchauffer le four

Ça devrait pas être au début, ça ? Et plus utile que demander "d’allumer le four"…

                tant que minutes est supérieur à 1 et inférieur au minutes entrée

Il n’y a rien qui fait augmenter minutes, donc la condition "inférieur aux minutes entrées" sera toujours vraie si on la prend au sens "inférieur ou égal", ou bien fausse au début et la boucle ne sera jamais exécutée si on la prend au sens "inférieur strictement"

                    décrémente minute de 1;

Soit. Les minutes vont s’écouler rapidement !

                    si les minutes sont inférieur au minutes entrée alors
                        affiche le nombre de minutes restante
                    sinon si les minutes sont inférieur ou égale à zéro alors
                        Affiche : Ouvrir la porte Mettre poulet dans le four et en suite fermer la porte
                    finsi.

Comme dit ci-dessus, la première condition est toujours vraie !

                fintantque.

Là tu finis la boucle sur les minutes supérieures à 1, soit.

        sinon

??? Ce sinon ne correspond à aucun si !

            mette le fourEtat à faux

OK, donc là tu rends la boucle sur fourEtat (et la variable fourEtat elle-même) inutile(s) puisque tu remplis la condition de sortie après la première exécution quoiqu’il arrive.

        finsi.

Pareil, le finsi ne correspond à rien.

        fintantque.

Et en arrivant à cette fin de boucle, fourEtat sera faux, et donc la boucle ne sert à rien.

Bref, tout ça pour dire que tu pars d’un problème mal posé, puis tu l’implémentes différemment mais d’une façon qui n’a pas bien plus de sens… C’est le meilleur moyen pour t’empêtrer longtemps dans des questions qui n’ont pas de réponse parce que tu t’attaques à un problème mal défini. Prends un exo comme ceux de france-ioi avec un énoncé clair, au moins tu auras un but moins vague que ton truc de four et de poulet…

adri1

Ok Adri, merci pour tes avis et conseils.

+0 -0

Pourquoi ne pas visualiser la situation où tu es devant un vrai four avec la porte fermée et eteint?

Quelles seraient les étapes à suivre?

Qu’est-ce qui est illogique? Par exemple, préchauffer un four la porte ouverte.

Qu’est-ce que tu veux vraiment savoir? La température et le temps de cuisson.

Et si tu veux faire chauffer un autre poulet? Bon appétit!

AMA, ce type d’exo est prématuré. Pour moi, on devrait avoir une grosse machine à états finie avec des événements qui déclencheront des transitions d’un état vers un autre.

Au final c’est plus un exo de modélisation (papier+crayon —> des ronds et des flèches). Le passage au C++, c’est vite du code dégueulasse qu’en vérité personne ne peut avoir envie de maintenir (*). Parfois, ce type de code sera généré par des outils qui supportent un formalisme plus humainement compréhensible pour exprimer les divers états et les transitions entres états.

(*) Où il n’y a qu’une seule boucle où selon l’état courant et les événements détectés on aura du code pour transitionner vers un autre état. Et au milieu de tout ça on déclenche aussi des trucs observables depuis l’extérieur (lumière qui s’allume/s’éteint; LED qui affichent un truc ou un truc comme un compte à rebours, ou la température, ou…)

C’est certes un kata à savoir faire, mais il n’est pas très passionnant. Et il est prématuré de ce que l’on a vu des tes questions précédentes. Et dans tous les cas, le gros du boulot, c’est un dessin, pas du texte comme tu as pu faire.

Bonsoir à tous, après mainte tentative et une petite aide d’un ami j’ai réussi enfin à faire fonctionner mon four, cela ma permis de voir comment le code se comporte et comment écrire un Algo correcte pour pouvoir le retranscrire en code c++…. Voici le code que j’ai réalisé après mainte tentatives… (Juste pour ceux que sa intéresse).


/*
01 allumer le four
02 définir la température et le temps pour préchauffer le four
03 Si le préchauffage n'est pas terminé, continuer à préchauffer le four
04 j'ouvre le four, je mets le poulet et je referme la porte
05 définir la température et le temps pour la cuisson du poulet
06 si le temps de cuisson n'est pas terminé, je continue à chauffer le poulet.
07 une fois le temps programmé est terminé, j'ouvre le four et je sors le poulet
08 je déguste mon poulet rôti.
*/

```cpp
#include <iostream>
#include <stdlib.h>
int main()
{
    int temp = 0, minutes = 0;
    bool OnOff = false;

do
{
        std::cout <<"Veuillez allumer le four taper 1 pour allumer ou 0 pour laissez fermer : ";
        std::cin >> OnOff;



    if(OnOff == 1)
    {
       do
       {
            std::cout <<"Veuillez regler la temperature de 0 degre a 250 degre : ";
            std::cin >> temp;
            std::cout <<"Veuilles regler le temps de prechauffement : ";
            std::cin >> minutes;
       }while (temp > 250);


        while(minutes > 0 && minutes <= 60 && temp <= 250)
        {
            std::cout <<"En cours de prechauffement."<<std::endl;
            minutes --;
            std::cout <<"Il reste encore : " << minutes <<" minutes avant la fin du prechauffement." <<std::endl;

            if (minutes <= 0 && temp <= 250)
            {

                std::cout <<"Ouvrez le four mettez le poulet et re fermer la porte."<<std::endl;
               do
               {
                    std::cout <<"Veuillez entrer la nouvelle temperature 0 a 250 : ";
                    std::cin >> temp;
                    std::cout <<"Veuillez entrer le nouveau temps pour la cuisson de 0 a 60 minutes : ";
                    std::cin >> minutes;
               }while (temp >250);


                while (minutes > 0 && minutes <= 60 && temp <= 250)
                {
                    std::cout <<"En cours de cuisson."<<std::endl;
                    minutes --;
                    std::cout <<"Il reste encore : " << minutes <<" minutes avant la fin de la cuisson."<<std::endl;

                    if(minutes <= 0 && temp <= 250)
                    {
                        std::cout <<"Vous pouvez ouvrir le four et deguster votre poulet rotis!"<<std::endl;
                        exit(3);

                    }
                }
            }
        }
    }
}while(OnOff == 1);

    return 0;
}

+0 -0

Est-ce que tu peux faire la différence dans ton algo entre ce qui est simulé et ce qui doit être fourni par l’utilisateur?

As-tu une horloge interne qui vérifie le temps réel (ou simulé) et une variable qui simule la température, etc ?

PierrotLeFou

Bonsoir non je ne fais pas avec une horloge pour le moment je m’en tien à des instructions simple je n’ais pas encore appris à utilisé l’horloge cela serra pour plus tard …

+0 -0

Salut,

Ton texte et ton code sont encore très confus et emmelés… C’est dommage d’avoir complètement ignoré les conseils de plusieurs intervenants de t’attaquer à un problème mieux posé et plus simple en premier lieu… :-°

/*
01 allumer le four
02 définir la température et le temps pour préchauffer le four
03 Si le préchauffage n'est pas terminé, continuer à préchauffer le four
04 j'ouvre le four, je mets le poulet et je referme la porte
05 définir la température et le temps pour la cuisson du poulet
06 si le temps de cuisson n'est pas terminé, je continue à chauffer le poulet.
07 une fois le temps programmé est terminé, j'ouvre le four et je sors le poulet
08 je déguste mon poulet rôti.
*/

Déjà là, tes points 03 et 06 sont pour le moins curieux. Est-ce que tu saisis la différence entre ces deux propositions :

  • "si le préchauffage n’est pas terminé, continuer à préchauffer le four" ;
  • "tant que le préchauffage n’est pas terminé, continuer à préchauffer le four" ?

Ensuite, ton code a une organisation super-compliquée et difficile à suivre. Par exemple :

  • tu vérifies que la température entrée n’est pas temp > 250, mais tu ne te sers pas de cette propriété dans la suite du code avec des temp <= 250 saupoudrés un peu partout ;
  • tu vérifies que tu n’as pas temp > 250 après saisie, mais tu ne vérifies pas les autres propriétés attendues (temp >= 0 et minutes > 0 && minutes <= 60), ce qui fait que tu te traînes des tests là-dessus à des endroits bizarres ;
  • ta boucle de cuisson est située à l’intérieur de la boucle de préchauffage, alors que la cuisson n’est clairement pas une étape du préchauffage mais se produit après ;
  • similairement, la "fin" du programme qui dit que le poulet est prêt est située à l’intérieur de la boucle de cuisson alors que c’est quelque chose qui doit se produire après la cuisson.

Les deux points les plus graves sont les deux derniers, et j’ai l’impression que c’est aussi lié à la confusion que tu sembles avoir sur while et if. Au lieux d’avoir les étapes les unes après les autres comme dans ton petit texte, tu les as imbriquées dans ton code, ce qui te force à avoir pleins de tests un peu absurdes et rend le programme assez incompréhensible (et ça t’aide pas pour le rendre correct !).

Mais bref, je réitère ici le conseil que tu as déjà royalement ignoré, au-cas-où : fais des exercices plus simples et bien posés pour commencer.

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte