Ragazzi ho bisogno del vostro aiuto perche sto impazzendo con un programmino che in java sono 5 righe!!
Vi posto il codice intanto
In pratica sto facendo il test inserendo le varie permutazioni di 1, 2, 3. Se in input do 3, 2, 1, il programma mi restituisce 5 e va bene. Se invece provo a inserire 1, 2, 3, dopo l'inserimento del 2 mi stampa il risultato 3.codice:# Title: Somma dei due maggiori # Author: Dennis Aleandro Boanini # Description: Trova i due massimi fra tre numeri e ne fa la somma ################# Data segment ##################### .data numero: .asciiz "Inserisci numero --> " msg: .asciiz "La somma dei due massimi è --> " ################# Code segment ##################### .text .globl main main: li $s0, 0 # uso $s0 per memorizzare la somma dei due massimi inseriti e lo inizializzo a 0. li $s1, 0 # MAX1 uso $s1 per memorizzare il primo numero massimo e lo inizializzo a 0 li $s2, 0 # MAX2 uso $s2 per memorizzare il secondo numero massimo e lo inizializzo a 0 li $t0, 0 # uso $t0 come contatore per inserire 3 numeri loop: la $a0, numero # li $v0, 4 # mette il codice 4(print string) nel registro $v0 syscall # chiamata al sisteme che mi stampa la stringa numero dichiarata nel data segment li $v0, 5 # mette il codice 5(read integer) nel registro $v0 syscall # chiamata al sistema che mi permette di inserire in input un intero move $s3, $v0 blt $s3, $s2, Else move $s1, $s2 move $s2, $s3 add $t0, $t0, 1 # incremento il contatore di 1 bne $t0, 2, loop # se $t0 è diverso da 3 richiama loop per farmi inserire altri interi j Exit Else: blt $s3, $s1, Exit move $s1, $s3 #add $t0, $t0, 1 j loop Exit: add $s0, $s1, $s2 li $v0, 4 la $a0, msg syscall move $a0, $s0 li $v0, 1 syscall li $v0, 10 # chiude il programma syscall
Se in questa riga bne $t0, 2, loop, faccio il controllo di $t0 con 3 anziche con 2, allora anche la permutazione 1, 2, 3, mi restituisce risultato corretto, cosi come la permutazione 2, 3, 1. Mentre le permutazioni 2, 1, 3; 3, 1, 2; 1, 3, 2; Mi fanno inserire anche un quarto numero.
Mi potete spiegare dove sbaglio?
GRazie mille a tutti
EDIT:
Ho risolto. Vi posto la soluzione. Mi potete comunque dire se è fatta bene o se puo essere migliorata in qualche modo?
Grazie mille ancora a tutticodice:# Title: Somma dei due maggiori # Author: Dennis Aleandro Boanini # Description: Trova i due massimi fra tre numeri e ne fa la somma ################# Data segment ##################### .data numero: .asciiz "Inserisci numero --> " msg: .asciiz "La somma dei due massimi è --> " ################# Code segment ##################### .text .globl main main: li $s0, 0 # uso $s0 per memorizzare la somma dei due massimi inseriti e lo inizializzo a 0. li $s1, 0 # MAX1 uso $s1 per memorizzare il primo numero massimo e lo inizializzo a 0 li $s2, 0 # MAX2 uso $s2 per memorizzare il secondo numero massimo e lo inizializzo a 0 li $t0, 0 # uso $t0 come contatore per inserire 3 numeri loop: la $a0, numero # li $v0, 4 # mette il codice 4(print string) nel registro $v0 syscall # chiamata al sisteme che mi stampa la stringa numero dichiarata nel data segment li $v0, 5 # mette il codice 5(read integer) nel registro $v0 syscall # chiamata al sistema che mi permette di inserire in input un intero move $s3, $v0 blt $s3, $s2, Else move $s1, $s2 move $s2, $s3 add $t0, $t0, 1 # incremento il contatore di 1 bne $t0, 3, loop # se $t0 è diverso da 3 richiama loop per farmi inserire altri interi j Exit Else: blt $s3, $s1, Exit move $s1, $s3 add $t0, $t0, 1 bne $t0, 3, loop #j loop Exit: add $s0, $s1, $s2 li $v0, 4 la $a0, msg syscall move $a0, $s0 li $v0, 1 syscall li $v0, 10 # chiude il programma syscall


Rispondi quotando