Sn disperata!

di il
10 risposte

Sn disperata!

Scs sn nuova qua!
forse ho trovato la soluzione al mio problema! sxo k voi mi possiate aiutare!
è x la programmazione in borland per x86...
uso blok notes x scrivere e tasm e il tlink

il mio problema da risolvere è il seguente!
il pc deve pensare un numero formato da 4 cifre tutte diverse
al gikatore vengono offerti 10 tentativi: l'utente deve inserire 4 numeri dopodichè
il pc deve indicare all utente quante cifre nella posizione corretta sono state indovinate


n pensato da pc: 2345
1234
solo il 2 è prensente nella combinazione ma non nella posione corretta: allora il pc emetterà
un messaggio chè dirà: numero 2 si trova nella sequenza ma nella posizione sbaglaita!
e continuerà qst ciclo x 10 volte

come fa il pc a pensare un numero casuale da 0 a 9?!!?
tramite il servizio 6 si genera un numero casuale, (x 4 volte!)
x non generale numeri casuali uguali si crea una tabella chiamata "uscite", composta da 10
zeri, così in ogni poasizione dello 0 corrisponde a una cifra! se si genera il 7 si punta
alla casella 7 si mette un 1 che implica che è il numero uscito; si genera poi lo 0 e va
nella tabella al punto 0 e gli metto 2, se si genera nuovamente il numero 7, dato che già
preso, prendo allora il numero successivo.


se clikko il 5,l nell indovinare, va nella tabella e vede se c'è o nn c'è il numero.
e in oltro si può verifikare se è stato indovinato nella posizione corretta
per far cio mettiamo i valori inseriti in un vettore chiamato "scelti"


es
cifre db 2,0,4,0,0,0,0,1,0,3 ---> 7092
scelti db 0,0,7,9,2 --->il primo è 0
conteg db 0 (x il primo digitato si va nel vettore cifre e si va allo 0; se vi è un
numero diverso da 0 allora il numero vi è all interno della sequenza e si
incrementa il questo contatore)
conte db 4 (se si digita il valore e si trova nella sequenza, controllo se si trova nella
giusta posizione: se x la prima volta si digita un numero che però nn si
trova nella posizione giusta comparirà un messaggio con scritto"numero nella
sequenza ma nell ordine sbagliato! mentre se è nella sequenza e pure nella
stessa posizione allora incremantiamo il contatore e si manda
a video un messagggio che dirà di aver trovato il numero giusto nella
posizione giusta...)

il pc terminerà o quando verranno terminate le 10 possibilità
o quando verrà trovato il numero casuale dall'utente in modo corretto(sia cifre che posiz)

10 Risposte

  • Re: Sn disperata!

    X generare numeri casuali devi usare un piccolo algoritmo che come input vuole il seme! (numero iniziale) solitamente x questo si usa leggere il timer di sistema. www.joecastle.it/GOL
  • Re: Sn disperata!

    Ok x generare numeri casuali so cm si fa! il punto è...cm si fanno a generare 4 numeri diversi tra di loro!?!?!?!
  • Re: Sn disperata!

    I numeri che generi inseriscili in un vettore. Prima di inserire il numero però verifica con un ciclo se non è presente nel vettore.
    Per curiosità mi puoi mostrare il codice di come generi i numeri casuali?.
  • Re: Sn disperata!

    Overflow ha scritto:


    i numeri che generi inseriscili in un vettore. Prima di inserire il numero però verifica con un ciclo se non è presente nel vettore.
    Per curiosità mi puoi mostrare il codice di come generi i numeri casuali?.
    t ho creato un programma che genera numeri casuali... quando premi invio vedrai sullo skermo il numero che ha generato
    ivviamente devi avere xo il tasm e il tlink x trasformarlo in file oggetto e poi in eseguibile!!

    dati segment
    divisori db 100,10,1
    bloccato db 0
    contatore db 0
    ritardo equ 5000
    dati ends

    istruzioni segment
    assume ds:dati, cs:istruzioni, ss:ripostiglio
    vai: mov ax,dati
    mov ds,ax
    mov ax,ripostiglio
    mov ss,ax
    lea ax,fineripostiglio
    mov sp,ax

    controlla: mov ah,6
    mov dl,255
    int 21h
    je nonpremuto
    cmp al,13
    je fine
    cmp al,'a'
    jne sotto
    cmp bloccato,0
    jne blocca
    sotto: mov bloccato,1
    jmp controlla
    blocca: mov bloccato,0
    jmp controlla

    nonpremuto: cmp bloccato,0
    je controlla
    inc contatore
    mov cx,3
    mov bx,0
    mov al,contatore
    divisione: mov ah,0
    div divisori[bx]
    mov dx,ax
    add dl,30h
    mov ah,2
    int 21h
    mov al,dh
    inc bx
    loop divisione
    mov dl,13
    mov ah,2
    int 21h

    mov cx,ritardo
    su: mov si,cx
    mov cx,0
    ripeti: loop ripeti
    mov cx,si
    loop su

    jmp controlla

    fine: mov ax,4c00h
    int 21h
    istruzioni ends


    ripostiglio segment stack
    dw 50 dup(?)
    fineripostiglio label word
    ends
    end vai
  • Re: Sn disperata!

    Overflow ha scritto:


    i numeri che generi inseriscili in un vettore. Prima di inserire il numero però verifica con un ciclo se non è presente nel vettore.
    Per curiosità mi puoi mostrare il codice di come generi i numeri casuali?.
    come faccio a mettere nel vettore un numero generato casualmente?
  • Re: Sn disperata!

    Con questo codice puoi controllare se un numero (AX) é già presente nel vettore: cld; mov di,offset vettore; mov cx,4; repnz scasw ds:; //zf=0 se numero già presente
  • Re: Sn disperata!

    Crei un array, in un loop (indice dell'array è il registro bx) muovi il valore del registro che contiene il numero generato nell'array:
    numeri è un vettore.
    mov numeri[bx],ax ;nel caso ax contiene il numero generato causalmente
  • Re: Sn disperata!

    joecastle ha scritto:


    con questo codice puoi controllare se un numero (AX) é già presente nel vettore: cld; mov di,offset vettore; mov cx,4; repnz scasw ds:; //zf=0 se numero già presente

    lol ekko qua qll k sn riuscita a fare fin ora:
    lea dx,indicazione
    mov ah,9
    int 21h

    reimposta: mov bx,0
    vai: mov ah,6
    mov dl,255
    int 21h
    je nonprem
    cmp al,13
    je premuto
    nonprem: inc bx
    cmp bx,9
    jbe sotto
    mov bx,0
    sotto: jmp vai
    premuto: cmp usciti[bx],0
    je continua inc bx jmp premuto
    continua: mov al,contatore
    lea dx,valore
    mov ah,9
    int 21h
    inc contatore
    cmp contatore,4
    jbe reimposta
    ;******************** TENTATIVI ********************

    mov cx,10
    tentativo: push cx
    mov cx,4

    ora mi fermo qui ... xkè qui un altro problema...
    voglio inserire 4 numeri(infatti ho impostato un ciclo x4v)
    metto un contatore = 1
    creo un vettore chiamato---> inseriti db 10 dup(0)
    se digito cm primo valore 7
    il puntatore SI di inseriti andrà in posizione 7, e metterà il valore di cont(inizialmente 1)
    incremento contatore
    se digito cm secondo valore 9
    il puntatore SI di inseriti andrà in posizione 7, e metterà il valore di cont(2)
    incremento contatore e così via.....
    cm faccioo!?!?
    se puoi scriverlo il codice con commenti preferisco!
  • Re: Sn disperata!

    Con questa routine puoi creare una matrice di NN elementi byte contenente numeri univoci (qualcuno sà se esiste un debugger per DOS che supporta il modo protetto?):
    cld; xor bx,bx; mov di,offset usciti; _do: call crea_numero_casuale; mov cx,NN; pusha; repnz scasb ds:; popa; jz $+5; mov [bx+di],al; inc bx; cmp bx,cx; jb _do
  • Re: Sn disperata!

    joecastle ha scritto:


    con questa routine puoi creare una matrice di NN elementi byte contenente numeri univoci (qualcuno sà se esiste un debugger per DOS che supporta il modo protetto?):
    cld; xor bx,bx; mov di,offset usciti; _do: call crea_numero_casuale; mov cx,NN; pusha; repnz scasb ds:; popa; jz $+5; mov [bx+di],al; inc bx; cmp bx,cx; jb _do
    le matrici nn le ho ankora fatte!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte