Sheeep (Normal User)
Newbie
Messaggi: 1
Iscritto: 06/02/2014
|
Salve,
ho scritto un programma che cerca, all'interno di un array, il valore massimo e il valore minimo dei numeri contenuti in esso.
La grandezza dell'array non è definita, bensì viene scelta dall'utente al momento dell'esecuzione del programma.
Una volta stabilita la grandezza attraverso una serie di cicli l'utente inserisce i valori (N INTERI).
Esempio esecuzione
Inserisci la grandezza: 5
### Creo un array grande 5 ###
Inserisci i valori:
a[0] = n
a[1] = m
..
a[5] = z
##### Inserisco i valori nelle caselle disponibili dell'array appena creato #####
Ora. Lo script funziona correttamente per i numeri interi, io vorrei convertirlo per i numeri floating point.
Esempio
grandezza array: 3 (n intero)
Valori array:
a[0] = 13.3 (n float)
a[1] = 143.543
a[2] = 500.232
###########################################
Codice
Codice sorgente - presumibilmente Altri Linguaggi |
.data
array: .word 0 #Inizializzo l'array
grandezza: .asciiz "Inserisci la grandezza (n intero) : "
elementi: .asciiz "Inserisci gli elementi : "
max: .asciiz "Il valore massimo: "
min: .asciiz "\nIl valore minimo: "
.text
.globl main
main:
li $v0, 4
la $a0, grandezza
syscall
li $v0, 5 #Prendo la grandezza dell'array
syscall
move $t0, $v0
move $t1, $v0
li $v0, 4
la $a0, elementi
syscall
la $t3, array
### Prima ricerca se ho solo un elemento allora il primo è uguale all'ultimo quindi stampo ###
prima_ricerca:
beq $zero, $t0, risultato_prima_ricerca_1_1
li $v0, 5
syscall
sw $v0, 0($t3)
addi $t3, $t3, 4
addi $t0, $t0, -1
j prima_ricerca
risultato_prima_ricerca_1_1:
lw $t3, array
la $s0, array
move $s1,$t3
move $s2,$t3
###Seconda ricerca se la grandezza dell'array è > 1 ###
seconda_ricerca:
beq $t1,$zero, risultato_generale # t1 contiene la grandezza del array
slt $t0, $s1, $t3 # Se il valore massimo s1 è minore del valore dell'array t3 allora sposto il numero in t0
beq $t0 ,$zero, proseguo_ricerca #Quindi continuo con la ricerca per il minimo
move $s1, $t3 # Altrimenti sposto il valore t3 nel max $s1
proseguo_ricerca:
slt $t0, $t3, $s2 # Se il valore dell'array t3 è minore di s2 allora sposto tutto in t0
beq $t0 ,$zero, trovato #Trovato
move $s2,$t3 #Sposto il valore t3 nel max
j trovato
trovato:
addi $s0, $s0, 4
lw $t3, 0($s0)
addi $t1, $t1 ,-1
j seconda_ricerca
risultato_generale:
li $v0, 4
la $a0, max
syscall
li $v0, 1
move $a0, $s1
syscall
li $v0, 4
la $a0, min
syscall
li $v0, 1
move $a0, $s2
syscall
exit:
li $v0, 10
syscall # end of program
|
Qualcuno mi può dare una mano? Ultima modifica effettuata da Sheeep il 06/02/2014 alle 11:35 |