Ecco fatto il compitino di LC2. Erano 2 anni che per pigrizia me lo portavo dietro. Titolo dell’esercizio: “Conta maiuscole”.
E´ stato come tornare indietro di 15 anni!
Ecco testo e soluzione dell’esame.
.orig x3000 LEA R0, string JSR CONTA_MAIUS TRAP x25 string .stringz "Questa è La mia FRase" CONTA_MAIUS ; R0 *str ; R1 contatore altri caratteri ST R2, str2 ; R2 str[i] ST R3, str3 ; R3 confronto ST R4, str4 ; R4 char 'A' mod2 ST R5, str5 ; R5 char 'Z' mod2 ST R6, str6 ; R6 contatore doppie AND R1, R1, x0 ; azzerro R1 AND R6, R6, x0 ; azzerro R6 LD R4, charA ; R4 = - 'A' NOT R4, R4 ADD R4, R4, #1 LD R5, charZ ; R5 = - 'Z' NOT R5, R5 ADD R5, R5, #1 loop LDR R2, R0, #0 BRZ end ; str[i] == 0 ? ADD R3, R2, R4 BRN other ; str[i] < 'A' ? ADD R3, R2, R5 BRP other ; str[i] > 'Z' ? ADD R6, R6, #1 BR next other ADD R1, R1, #1 next ADD R0, R0, #1 BR loop end ADD R0, R6, #0 ; copio in R0 il risultato ; R1 contiene già il valore da tornare LD R2, str2 LD R3, str3 LD R4, str4 LD R5, str5 LD R6, str6 RET charA .fill x41 charZ .fill x5A str2 .fill #0 str3 .fill #0 str4 .fill #0 str5 .fill #0 str6 .fill #0 .end
Nel caso trovaste qualche errore e/o imperfezione, segnalatemela.
Ma adesso si torna al presente, ovvero al lavoro.
Aggiornamento
Per curiosità in Java avrei scritto
String str = "Questa è La mia FRase"; int upperCase = 0, others = 0; for (char ch : str.toCharArray()) { if (Character.isUpperCase(ch)) ++upperCase; else ++others; }
in C
char* str = "Questa è La mia FRase"; int u = 0, o = 0; for (; *str != 0 ; ++str) isupper(*str) ? ++u : ++o;
in Python
str = "Questa è La mia FRase" u = o = 0 for ch in str : if ch.isupper() : u += 1 else : o += 1