Come trovo le posizioni pari in una stringa?

di il
2 risposte

Come trovo le posizioni pari in una stringa?

L'esercizio che devo fare è questo:
Scrivere un programma Assembly(8086) che calcola la somma delle cifre in posizione pari in una sequenza di valori interi positivi,
assumendo di considerare valori a singola cifra.

A tal fine, realizzare i seguenti passi:
1. Leggere da tastiera una stringa di max 10 caratteri;
2. Creare un ciclo in cui, per ciascun carattere della stringa in posizione pari -
- si effettua la conversione nel carattere nel valore numerico corrispondente
- si somma il valore ottenuto alla somma parziale;
3. Al termine del ciclo, calcolare il prodotto tra la somma risultante e la lunghezza effettiva della stringa;
4. Se il risultato della moltiplicazione è maggiore di 100, visualizzare il messaggio 'Risultato maggiore di 100', altrimenti visualizzare il messaggio 'Risultato minore di 100'.

Ma come faccio a vedere se un carattere è in posizione pari?

2 Risposte

  • Re: Come trovo le posizioni pari in una stringa?

    Cosa sarà la "posizione" nel tuo codice?
  • Re: Come trovo le posizioni pari in una stringa?

    Allora io ho una stringa del tipo 2 4 7 6 3 e in teoria devo puntare solo sulle posizioni pari e contare quante sono, ma non riesco a capire come fare. Ho già una soluzione ma vorrei capire piuttosto che copiare. La soluzione è questa ma non ho capito perchè nel ciclo punta ad un carattere e vede se è pari, in questo caso vede se il carattere numerico è pari ma non la posizione,o no?
    sono un pò confusa
    ORG 100h
    
    Acquisizione MACRO var1
    LEA DX,var1
    MOV Ah,0Ah
    INT 21h
    ENDM
    
    Stampa MACRO var2
    LEA DX,var2
    MOV AH,09h
    INT 21h
    ENDM
    
    Stampa MSGACQ
    Acquisizione Stringa
    
    MOV SI,0
    MOV CH,0
    MOV CL,Stringa[1]
    
    ciclo:
    MOV AH,0
    MOV AL,SI+2
    MOV BL,2
    DIV BL
    
    CMP AH,0
    JE pari
    JMP continua
    
    pari:
    MOV BH,Stringa[SI+2]
    SUB BH,'0'
    ADD Somma,BH
    
    continua:
    INC SI
    LOOP ciclo
    
    MOV BL,Somma
    CALL Moltiplico
    
    RET
    
    Stringa DB 11,?,11 DUP ('$')
    MSGACQ DB 'Inserisci Stringa $'
    a_capo DB 13,10,'$'
    Somma DB 0
    MSG1 DB 'Maggiore$'
    MSG2 DB 'Minore$'
    
    Moltiplico PROC
    MOV AL,BL
    MOV BH,Stringa[1]
    MUL BH
    
    CMP AX,100
    JAE maggiore
    JB minore
    
    maggiore:
    Stampa MSG1
    JMP fine
    
    minore:
    Stampa MSG2
    
    fine:
    RET
    ENDP 
Devi accedere o registrarti per scrivere nel forum
2 risposte