SW 배움터/앱인벤터2

앱인벤터2 강좌 9: for each 블럭을 이용한 덧셈

kusson 2017. 1. 25. 00:03
반응형
728x170

 일반적으로  C나 자바등 프로그램을 처음 배우는 사람들은 1부터 100까지 더하는 프로그램을

짜보고는 하는데 앱인벤터에서도 1부터 100까지 더하는 프로그램을 쉽게 짜 볼 수 있다.

 먼저 일반적인 프로그램에서 1부터 100까지 더하는 프로그램을 보자 

 

for (int i = 1; i <= 100; i++) {    ; i의 초기값을 1로 주고 100까지 1씩 증가 시킨다.
sum += i;                             ; sum = sum + i 와 같다. 두수를 더하고 그 더한수에 1씩 증가된
}                                          값을 계속 더해간다.

 

위와 같이 for 반복문을 사용해 100번을 더해서 원하는 값을 얻는다.

 

위의 로직을 앱인벤터에서도 그대로 쓸 수 있다.

 

 

 먼저 디자이너 에디터에 위와 같이 임의의 숫자를 입력할 텍스트 박스 하나를 배치하고 그 밑에 for each 블럭과 

while 반복문을 사용하기 위한 버튼을 배치 시킨다. 각각의 버튼 밑에는 계산한 결과를 보기 위한 텍스트 라벨을

배치한다. Notifier1은 텍스트 박스에 숫자를 입력하지 않았을때 경고 메시지를 띄우기 위한 요소이다.

 

 

 

 이 에디터 블럭에 사용할 세개의 전역변수를 선언한다. sum은 합계를 의미하고 loopCount는 for each 반복문을 몇번 돌았는지

세기위한 카운터 숫자이다. 맨위의 일반 프로그램에서 i 로 표시 되었던 변수와 동일한 역할이다. N은 텍스트 박스에 입력된

숫자를 입력받기 위한 변수이다. 내가 얼마까지 더하기 원하는지 그 숫자를 의미한다.

  addStartButton 이벤트 블럭속의 if문을 보자. 텍스트 박스에 아무런 숫자를 넣지 않으면 "숫자를 입력하세요"란 경고 메시지가

뜬다. 숫자가 입력되면 Sum 과 loopCount변수를 0으로 재설정한다. 이것은 텍스트 박스에 숫자를 재입력하고 다시 addStartButton 을 

누를때 두수를 0으로 재설정하기 위한 변수 선언이므로 반드시 재 설정 해 주어야 한다. N은 텍스트 박스에 입력된 임의의 숫자를

받는 변수이다.

  변수 설정이 끝났으면 for each 블럭을 이용해서 N 만큼 반복 처리하는 루틴을 처리한다. 1부터 N까지 1씩 무엇을 처리하라고

하는데 for each 블럭 안에 그 내용을 기술한다. 처음 for each문이 돌면 loopCount를 0에서 1로 증가 시키고 Sum = Sum + 1을

처리한다. Sum의 초기값이 0이므로 0 + 1 을 계산한 값을 다시 Sum에 대입해 루프가 한번 돌면loopCount=1, Sum = 1이 입력된다.

루프를 2번째 돌면 loopCount는 2가 되고 sum = 1 + 2, 즉 Sum = 3 의 값이 입력된다. 3번째 루프를 돌게 되면 loopCount = 3이 되고,

 Sum = 3 + 3 즉 Sum = 6이 된다.

이렇게 N-1 번 루프를 돌게 되면 loopCount = N이 되고 마지막 숫자 N을 Sum에 더하고 결과를 다시 Sum에 입력한다.

 

 

 위의 for each블럭은 변수들이 세로로 나열되어 있는데 앞그림의  가로로 나열된 블럭과 똑같은 역할이다. for each 블럭위에 마우스를

위치시키고 오른쪽 버튼을 클릭하면 메뉴가 열리는데 그 중 External Inputs를 선택하면 변수들이 세로로 나열되는 형태가 되고,

Inline Inputs을 선택하면 변수들이 가로로 나열되는 형태가 된다. 각자 편한대로 선택하면 된다.

 

 

 

이제 while 반복문을 이용하는 블럭을 보자. while 반복문은 조건절을 비교해서 참이면 계속 루프를 돌고 거짖이 되면 루프를 빠져

나오는 형태가 되기 때문에 for each 반복 루프보다는 조금 까다롭다. 그러나 루틴을 잘 따라가 보면 그렇게 어렵지는 않다.

 먼저 whileLoopCount가 입력된 임의의 숫자 N 보다 큰지 작은지를 비교해서 같아지기 전까지 반복한다. for each 블럭에서

Sum으로 표시되었던 변수는 혼돈의 염려를 없애기 위해 total이란 이름으로 변경했으므로 유의한다.

 나머지는 앞의 for each 블럭안의 사항과 같으므로 생략하고 whileLoopCount가 숫자 N과 같아지면 루프를 빠져 나오면서

결과를 resultLabel에 표시한다.

 

 

 

                               

 

10, 100, 1000의 숫자를 직접 입력해서 저의 스마트 폰으로 출력시켜본 스크린샷이다. 원하는 대로 잘 작동되고

있음을 알 수 있다.

 

 

 

반응형
그리드형