2 votes

pile interactive qui peut avoir une case à cocher et sélectionner les options de la pile

J'essaie de créer un modèle fonctionnel de pile dans lequel l'utilisateur peut sélectionner la pile. s1 o s2 et peut effectuer des opérations telles que push y pop .

<html>
<head>
  <title>Stack With Constructor </title>
</head>
<body>
  <div>Stack </div>
  <div>
    <p id="p1">
      stack
    </p>
    <input type="checkbox" name="stack1" value="s1">s1
    <br>
    <input type="checkbox" name="stack2" value="s2">s2
    <br>
    <textarea id="tdisplay"></textarea>
  </div>
  <textarea id="tpush"></textarea>
  <button onclick="doJob()">push</button>
  <button onclick="doJob1()">pop</button>
  <textarea id="tpop"></textarea>

  <script>
    function myfunction() {
      if (document.getElementById("stack1") == true) {
        var s1 = new MyStack();
      }
      if (document.getElementById("stack2") == true) {
        var s2 = new MyStack();

      }
    }
  </script>

  <script>
    function push(v) {
      if (this.st === 0) {
        console.log("Stack Overflow");
      } else {
        this.st = this.st - 1;
        this.stk[this.st] = v;
        document.getElementById("tdisplay").value = this.print();;
      }
    }

    function pop() {
      if (this.st === 10) {
        console.log("Stack Underflow");
      } else {
        document.getElementById("tdisplay").innerHTML = "";
        var temp = this.stk[this.st];
        this.st = this.st + 1;

        return temp;
      }
    }

    function print() {
      console.log("Printing Stack");
      return this.stk.reduce((acc, cv, i, arr, ) => {
        console.log(cv);
        return (i) ? acc + " " + "\n" + cv : cv;
      }, '');
    }

    function MyStack() {
      this.st = 10;
      this.stk = new Array(10);
      this.push = push;
      this.pop = pop;
      this.print = print;
    }

    function doJob() {
      var x = document.getElementById("tpush").value;
      s1.push(x);

      document.getElementById("tpush").value = "";
    }

    function doJob1() {
      var y = s1.pop();
      document.getElementById("tpop").value = y;
      document.getElementById("tdisplay").value = s1.print();
    }
  </script>

</body>

</html>

Je rencontre les problèmes suivants :

  1. Je ne parviens pas à obtenir le résultat pour pop valeur. Cela signifie que lorsque j'appuie sur le bouton de pop, je dois obtenir les éléments restants du tableau.

  2. Je ne sais pas comment utiliser la méthode des cases à cocher. Cela signifie que lorsque je sélectionne s1 la case à cocher doit être créée s1 et je peux effectuer des opérations sur cette pile, de même que pour la pile s2 .

Le résultat devrait être des fonctions de navigateur appropriées pour la pile interactive afin qu'elle puisse fonctionner comme dans les étapes suivantes :

  1. Sélection de l'utilisateur s1 o s2 pile
  2. S'il choisit s1 ils peuvent alors fonctionner pour toutes les opérations de s1 .
  3. L'utilisateur peut basculer entre s2 et peut effectuer toutes les opérations.

J'ai des problèmes avec la fonction pop et la case à cocher.

1voto

Programmerrrrr Points 50

Cela vous aidera à prendre la bonne direction :

Ce que j'ai remarqué :

  1. Utilisation incorrecte de la valeur booléenne de la case à cocher. (utiliser .checked).
  2. En outre, les noms des cases à cocher étaient stack1/2 et non id(s).

    <body>
    <div>Stack</div>
    <div>
        <p id="p1">
            stack
        </p>
        <input type="checkbox" id="stack1" value="s1">s1
        <br>
        <input type="checkbox" id="stack2" value="s2">s2
        <br>
        <textarea id="tdisplay"></textarea>
    </div>
    <textarea id="tpush"></textarea>
    <button onclick="doJob()">push</button>
    <button onclick="doJob1()">pop</button>
    <textarea id="tpop"></textarea>
    
    <script>
        var s1, s2;
    
        function myfunction() {
            if (document.getElementById("stack1").checked == true) {
                console.log('myFunction called!');
                s1 = new MyStack();
            }
            if (document.getElementById("stack2").checked == true) {
                s2 = new MyStack();
            }
        }
    
        function push(v) {
            if (this.st === 0) {
                console.log("Stack Overflow");
            } else {
                this.st = this.st - 1;
                this.stk[this.st] = v;
                document.getElementById("tdisplay").value = this.print();
                ;
            }
        }
    
        function pop() {
            if (this.st === 10) {
                console.log("Stack Underflow");
            } else {
                document.getElementById("tdisplay").innerHTML = "";
                var temp = this.stk[this.st];
                this.st = this.st + 1;
    
                return temp;
            }
        }
    
        function print() {
            console.log("Printing Stack");
            return this.stk.reduce((acc, cv, i, arr, ) = > {
                console.log(cv);
            return (i) ? acc + " " + "\n" + cv : cv;
        },
            ''
        )
            ;
        }
    
        function MyStack() {
            this.st = 10;
            this.stk = new Array(10);
            this.push = push;
            this.pop = pop;
            this.print = print;
        }
    
        function doJob() {
            console.log('push pressed!');
    
            myfunction();
            console.log(s1);
            var x = document.getElementById("tpush").value;
            s1.push(x);
    
            document.getElementById("tpush").value = "";
        }
    
        function doJob1() {
            console.log('pop pressed!');
            var y = s1.pop();
            document.getElementById("tpop").value = y;
            document.getElementById("tdisplay").value = s1.print();
        }
    </script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X