首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HLA中,an和运算符连接有两个条件的with循环。将C++转换为HLA

在HLA中,an和运算符连接有两个条件的with循环。将C++转换为HLA
EN

Stack Overflow用户
提问于 2021-10-24 19:52:59
回答 1查看 107关注 0票数 1

我想将我的程序从c++转换(或手动编译)到HLA。程序读取输入的数字。然后减去3和10或只有10,确定该值是以零结尾还是以3结尾。连续三个这样的数字赢了比赛!一个不以这些数字结尾的值会输掉游戏。

我不知道如何在HLA中用AND和运算符连接两个条件来执行while循环。

代码语言:javascript
复制
while ((iend != 1) && (iscore < 3))

这是我用C++编写的完整代码,我想把它翻译成HLA:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main() {
  int inum;
  int iend = 0;
  int iscore = 0;
  int icheckthree; //To check if it ends in 3
  int icheckzero; //To check if it ends in zero

  while ((iend != 1) && (iscore < 3)) {
    cout << "Gimme a number: ";
    cin >> inum;

    //Case 1: ends in three
    icheckthree = inum - 3;
    while (icheckthree > 0) {
      icheckthree = icheckthree - 10;
      if (icheckthree == 0) {
        cout << "It ends in three!" << endl;
        iscore++;
      }
    }

    icheckzero = inum;
    while (icheckzero > 0) {
      icheckzero = icheckzero - 10;
    }
    //Case 2: ends in zero
    if (icheckzero == 0) {
      cout << "It ends in zero!" << endl;
      iscore++;
    }
    //Case 3: Loose the game
    else {
      if (icheckzero != 0) {
        if(icheckthree != 0) {
          iend = 1;
        }
      }
    }
    
    if (iend == 1) {
      cout << "\n";
      cout << "Sorry Charlie!  You lose the game!" << endl;
    }
    else if (iscore == 3) {
      cout << "\n";
      cout << "You Win The Game!" << endl;
    } else {
      cout << "Keep going..." << endl;
      cout << "\n";
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-24 20:10:22

使用逻辑转换。

例如,声明:

代码语言:javascript
复制
if ( <c1> && <c2> ) { <do-this-when-both-true> }

可翻译为:

代码语言:javascript
复制
if ( <c1> ) {
    if ( <c2> ) {
        <do-this-when-both-true>
    }
}

这两个构造是等价的,但后者不使用连接。

while循环可以按以下方式转到if-goto标签:

代码语言:javascript
复制
while ( <condition> ) {
    <loop-body>
}

代码语言:javascript
复制
Loop1:
    if ( <condition> is false ) goto EndLoop1;
    <loop-body>
    goto Loop1;
EndLoop1:

接下来,分别使用一个if语句,该语句涉及一个连词的反转,&&,如下所示:

代码语言:javascript
复制
if ( <c1> && <c2> is false ) goto label;

又名

代码语言:javascript
复制
if ( ! ( <c1> && <c2> ) ) goto label;

简化如下:

代码语言:javascript
复制
if ( ! <c1> || ! <c2> ) goto label;

这是德摩根的逻辑定律,它将否定与连接和分离联系起来。

最后,上述分离可以很容易地简化(类似于上面的连接简化)如下:

代码语言:javascript
复制
   if ( ! <c1> ) goto label;
   if ( ! <c2> ) goto label;

如果while循环的条件是连接(&&),则可以将上述转换放在一起创建条件退出分离序列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69700258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档