2016-09-20 3 views
0

¶ 필자는 php, javascript, c 그리고 궁극적으로 arduino에 대한 모든 언어를 사용해 보았습니다.
왜이 코드를 수행합니다
코드에 println arduino가 표시되지 않습니다? (모든 언어로)

int n = 10; 
int total = 0; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    while (n < 100) { 
    if (n % 2 != 0) { 
     if (n % 3 != 0) { 
     if (n % 4 != 0) { 
      if (n % 5 != 0){ 
      if (n % 6 != 0) { 
       if (n % 7 != 0) { 
       if (n % 8 != 0) { 
        if (n % 9 != 0) { 
        total++; 
        n++; 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
    Serial.println(total); 
} 

excecute 무엇?

+1

을'N ++'모든 조항에 해당하는 경우 오직 실행됩니다. 'n = 10'은 첫 번째 절에서 실패하므로'n'은 결코 증가하지 않고 스핀 루프 상태를 유지합니다. 이것은 코드를 적절하게 들여 쓰면 꽤 분명합니다. – Phylogenesis

+0

11은 어떨까요? 그것은 소수입니다. –

+1

그러나 'n'은 절대로 증가하지 않으므로 11로 설정되지 않습니다. – Phylogenesis

답변

2

이 때문에 당신은 당신의 코드에서 당신의

n++;

을 두는 곳이다, 그것은 가장 안쪽의 범위 내에서 배치됩니다.

시작 부분에 n = 10이므로 n % 2! = 0은 거짓이며 해당 범위 내의 모든 내용 (n ++ 포함). 절대로 불리지 않는다. 따라서 n % 2! = 0은 반복적으로 false이므로 n은 증가하지 않습니다. 따라서 코드는 무한 while 루프에서 멈춰 있기 때문에 총 인쇄량에 도달하지 못합니다.

코드에 대한 가능한 수정 사항은 다음과 같습니다. 답은 21이 될 것입니다. 그러나 이미 while 루프를 사용하고 있으므로 setup() 메서드에 넣을 수 있습니다. 그렇지 않으면 Arduino는 인쇄를 무한정 계속 유지합니다. 당신의 목표/목적으로 시작



int n = 10; 
int total = 0; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
while (n < 100) { 
    if (n % 2 != 0) { 
    if (n % 3 != 0) { 
    if (n % 4 != 0) { 
    if (n % 5 != 0){ 
     if (n % 6 != 0) { 
     if (n % 7 != 0) { 
     if (n % 8 != 0) { 
     if (n % 9 != 0) { 
      total++; 
     } 
     } 
     } 
     } 
    } 
    } 
    } 
    } 
    n++; 
} 
Serial.println(total); 
} 
..

당신이 2 ~ 9로 나눈 수없는 10에서 100 사이의 숫자를 발견하는 경우, 코드에 가능한 방법이 될 수있다 :

int n = 10; 
int total = 0; 

void setup() { 
Serial.begin(9600); 
while (n < 100) { 
    if (n % 2 != 0) { 
    if (n % 3 != 0) { 
    if (n % 4 != 0) { 
    if (n % 5 != 0){ 
     if (n % 6 != 0) { 
     if (n % 7 != 0) { 
     if (n % 8 != 0) { 
     if (n % 9 != 0) { 
      Serial.println(n); 
      total++; 
     } 
     } 
     } 
     } 
    } 
    } 
    } 
    } 
    n++; 
} 
Serial.print("Total: "); 
Serial.println(total); 
} 

void loop() { 
//Serial.println(total); 
} 

는 개인적으로, 나는 더 적은 중첩 된 IF를

를 선호

그리고 당신은 출력을 얻을 것입니다 :

11 
13 
17 
19 
23 
29 
31 
37 
41 
43 
47 
53 
59 
61 
67 
71 
73 
79 
83 
89 
97 
Total: 21 

는 도움이되기를 바랍니다.

+0

100에서 1000으로 시도하십시오. 그러나 143 개의 소수를 주어야하지만, 206을주는 것은 ... 1에서 9까지의 제수만을 계산하는 이유입니다. 주위를 둘러 볼 방법이 있습니까? –

0

코드 구조가 잘못되었습니다. 매번 루프를 통해 n을 증가시켜야합니다.

이 작동합니다 :

void loop() { 
    while (n < 100) { 
    if (n % 2 != 0) { 
     if (n % 3 != 0) { 
     if (n % 5 != 0){ 
      if (n % 7 != 0) { 
      total++; 
      } 
     } 
     } 
    } 

    n++; /* Increment needs to be at the base of the loop! */ 
    } 

    Serial.println(total); 
}