반응형
문제
명령을 실행하는 소프트웨어를 작성하라. 명령은 다음과 같이 mov, add, sub, jn0, prt로 구성되면 move sum 0는 sum 변수에 0을 삽입하고, add sum i는 sum 변수에 i 값을 더하면 sub n 1은 n 변수의 값을 1 감소시키고, jn0 n 3은 변수 n의 값이 0이 아니면 3 번째 명령(실제 4번째 줄)으로 돌아가도록 처리하고, prt sum 0은 sum 변수의 값을 출력하고 프로그램을 종료한다. prt에서 마지막 0은 특별한 의미가 없다. go는 지금까지 입력한 프로그램을 처음부터 실행하도록 하는 지시어이다.
참고로, 실행 예시에서 첫 번재 프로그램은 5에서 15까지 더하는 프로그램이다.
예시 답안
수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.
>> mov sum 0
>> mov i 5
>> mov n 10
>> add sum i
>> add i 1
>> sub n 1
>> jn0 n 3
>> prt sum 0
>> go
[ptr sum 0]
I:15 SUM:95 N:0
출력할 결과는 95. 프로그램 실행 끝
>> mov n 100
>> mov m 20
>> add n m
>> sub n 5
>> prt n 0
>> go
[prt n 0]
M:20 N:115
출력할 결과는 115. 프로그램 실행 끝
>>
소스 코드
(한번만 실행되게 만들었습니다.)
import java.util.*;
class ControlProgram{
ArrayList<String> excution = new ArrayList<String>();
ArrayList<String> temp = new ArrayList<String>();
HashMap<String,Integer> var = new HashMap<String,Integer>();
ArrayList<String> num = new ArrayList<String>();
String [] alpha= {"a","b","c","d","e","f","g",
"h","i","j","k","l","n","m","o",
"p","q","r","s","t","u","v","w","x","y","z"};
public ControlProgram() {
Scanner s = new Scanner(System.in);
System.out.println("수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.");
while(true) {
System.out.print(">> ");
String temp1 = s.next();
if(temp1.equals("go"))
break;
String temp2 = s.next();
String temp3 = s.next();
s.nextLine();
excution.add(temp1);
temp.add(temp2);
num.add(temp3);
}
run();
s.close();
}
private boolean Compare(String s) {
for(int i = 0;i<alpha.length;i++)
{
if(s.contains(alpha[i]))
return true;
}
return false;
}
private void run() {
int count = 0;
while(true) {
switch(excution.get(count)) {
case "mov":
if(Compare(num.get(count))) // 알파벳 포함 여부
var.put(temp.get(count),var.get(num.get(count)));
else // 알파벳이 아니라 정수형이면
var.put(temp.get(count), Integer.parseInt(num.get(count)));
count++;
break;
case "add":
if(Compare(num.get(count))) // 알파벳 포함 여부
var.replace(temp.get(count), var.get(temp.get(count))+var.get(num.get(count)));
else
var.replace(temp.get(count), var.get(temp.get(count))+Integer.parseInt(num.get(count)));
count++;
break;
case "sub":
if(Compare(num.get(count))) // 알파벳 포함 여부
var.replace(temp.get(count), var.get(temp.get(count))-var.get(num.get(count)));
else
var.replace(temp.get(count), var.get(temp.get(count))-Integer.parseInt(num.get(count)));
count++;
break;
case "jn0":
int k;
if(Compare(num.get(count)))
k = var.get(num.get(count));
else
k = Integer.parseInt(num.get(count));
if(var.get(temp.get(count)) != 0)
count = k;
else
count++;
break;
case "prt":
if(Compare(num.get(count)))
System.out.println("[ptr "+ temp.get(count) +" "+ var.get(num.get(count)) +"]");
else
System.out.println("[ptr "+ temp.get(count) + " " + num.get(count) + "]");
Set<String> keys = var.keySet();
Iterator<String> it = keys.iterator();
for(int i =0;i<var.size();i++)
{
String t = it.next();
System.out.print(t.toUpperCase()+":"+var.get(t)+" ");
}
System.out.println();
System.out.println("출력할 결과는 "+ var.get(temp.get(count))+". 프로그램 실행 끝");
return;
}
}
}
}
public class Main13 {
public static void main(String[] args){
new ControlProgram();
}
}
반응형
'명품 JAVA 프로그래밍' 카테고리의 다른 글
명품 JAVA 프로그래밍 8장 실습문제 11 (0) | 2021.12.13 |
---|---|
명품 JAVA 프로그래밍 8장 실습문제 10 (0) | 2021.12.13 |
명품 JAVA 프로그래밍 10장 실습문제 1 (0) | 2021.12.11 |
명품 JAVA 프로그래밍 9장 실습문제 8 (0) | 2021.12.11 |
명품 JAVA 프로그래밍 9장 실습문제 7 (0) | 2021.12.11 |