Угадай число в MIPS - PullRequest
0 голосов
/ 08 мая 2020

Цель состоит в том, чтобы компьютер нашел секретное число, и пользователь должен сказать компьютеру, больше оно или меньше? он работает, когда он всегда выше или всегда ниже, но не тогда, когда мне нужно ввести оба значения. Кто-нибудь знает какое-нибудь решение?

.data

prompt: .asciiz "Enter the Secret Number"
prompt2: .asciiz "\n Computer guess is: "

higherLowerorCorrect: .asciiz "\n Number is higher(h) lower(l) or correct/exit(2):" 

.text

li $v0, 4
la $a0, prompt
syscall

li $v0, 5
syscall

move $t2, $v0

li $t7, 101
li $t6, 0
li $t5, 0

loop:

move $a1, $t7
li $v0, 42
syscall


add $a0, $a0, $t6
move $t5, $a0

li $v0, 4
la $a0, prompt2
syscall

move $a0, $t5
li $v0,1
syscall

li $v0, 4
la $a0, higherLowerorCorrect #  
syscall

li $v0, 12 
syscall

beq $v0, 'l', setHigherBound ####

beq $v0, 'h', setLowerBound ####

beq $v0, 'x', exit ####


setHigherBound:
move $t7, $t5
j loop

setLowerBound:
add $t7,$t7,$t6
sub $t7, $t7, $t5
move $t6, $t5
j loop


exit:
output:

1 Ответ

1 голос
/ 08 мая 2020

То, как вы вычисляете числа, которые компьютер может угадать, мне кажется немного неправильным.

Рассмотрим следующий сценарий:

  1. Секретное число - 5. LB 0 (включительно), UB равно 101 (исключая).
    • Компьютер может угадывать числа [0, 100].
  2. Компьютер угадывает 3, что слишком мало: UB = (101 + 0-3 ) == 98, LB = 3.
    • Упс! Теперь компьютеру разрешено угадывать числа [3, 100], даже если вы уже установили, что <= 3 слишком мало. </li>
  3. Компьютер угадывает 10, что тоже высокий: UB = 10.
    • Упс! Теперь компьютер может угадывать числа [3, 12], даже если вы уже установили, что значение <= 3 слишком мало, а значение> = 10 - слишком большое.

Я бы посоветовал вам изменить свой код setLowerBound на:

setLowerBound:
addiu $t6, $t5, 1    # LB is inclusive, so set it to guess+1
j loop

И генерацию случайных чисел на:

sub $a1, $t7, $t6
li $v0, 42
syscall
add $a0, $a0, $t6   # $a0 = rand(UB - LB) + LB
...