20
16
12
4
0
$10 to $t7 if needed SsOto $s7 if needed Old Sra value Old $fp value Storage for $a3 Storage for $a2 Storage for $a1 Storage for $a0
$sp
.data
prompt: .asciiz "Proszę napisać jakiś tekst (jedna linia): "
resultstr: .asciiz "Najczęściej występujący znak w tym tekście, to " resultchar: .asciiz "X"
.text
main: li $v0, 4
la $a0, prompt syscall
jal mostfreqchar
sb $v0, resultchar
li $v0, 4
la $a0, resultstr
syscall
la $a0, resultchar syscall
# drukuj komunikat (polecenie)
# wyznacz najczęściej występujący znak
# zapisz ten znak w resultchar
# drukuj resultstr
# drukuj znak najczęściej występujący
li $v0, 10 # exit
syscall
# Funkcja mostfreąchar nie ma argumentów,
# wczytuje linię tekstu do tablicy znaków, umieszczonej na stosie,
# a następnie wyznacza najczęściej występujący znak.
# char mfc;
# char ch;
# int cnt;
# int mfccnt = 0;
# znak najczęściej występujący (rezultat)
# znak, którego wystąpienia są zliczane
# licznik występowania bieżącego znaku
# aktualnie największa liczba wystąpień
# for (int iptr = pointer_do line[0]; znak_wskazywany_przez iptr != NUL; iptr++) {
# ch = znak_wskazywany_przez iptr; # zacząć zliczać przypadki występowania tego znaku
# cnt =0; # start licznika
# for (int jptr = pointer_do line[0]; znak_wskazywany_przez jptr != NUL; jptr++) {
# if (znak_wskazywany_przez jptr == ch) cnt++; # zwiększyć licznik występowania
# >
# if (cnt > mfccnt) { # ten znak wystąpił, jak dotąd, najczęściej
# mfccnt = cnt; # zaktualizować licznik mfccnt
# mfc = ch; # zapamiętać ten znak, występujący jak dotąd, najczęściej
# >
* }
# return(mfc);