Page 1 of 2

Dec2Bin convertitore in binario in bennu

Posted: 7 Jun 2011, 16:00
by Zip
non volevo sporcare l'altro topic
ecco il nuovo sorgente
-adesso riesce a leggere i numeri con la virgola
-riesce a dirci se dopo la virgola c'e 5 o no

problema,
se metto la condizione

if virgolo=5;
binario=1;
else
binario=0;
end
misteriosamente mi dice sempre che il risultato della divisione viene con ",5" :o
edit: anzi il risultato è giusto, la variabile "virgolo" è sbagliata

ecco il sorgente se qualche anima pia (un RZZ di turno :D ) mi dice che cavolo ha sto coso ne sarei grato 8-)

source:

Code: Select all

//CONVERTITORE v.0.2

global

float numero; 
float risultato;
int virgolo;
int binario;

begin
     set_mode(320,240,16); 
     write(0,10,5,0,"dec2bin v.1 push S o D");
     write(0,10,15,0,"S=9 D=8");
	 write_var(0,210,5,0,numero);
     write_var(0,240,5,0,risultato);	
	 write_int(0,210,30,0,&virgolo);
	 write_int(0,210,40,0,&binario);
	loop
	 if (key(_s)); 
	  numero=9;
	  converti();
     end

	 if (key(_d)); 
	  numero=8;
	  converti();
     end
		
	 frame;
	end
   let_me_alone();
end


process converti()
begin
   risultato=numero/2;
   virgolo=substr(risultato,2,2); //legge la parte di float di "risultato" dopo la ","
   //punto dove doveva essere messa la condizione
end

Re: Dec2Bin convertitore in binario in bennu

Posted: 7 Jun 2011, 16:29
by gigios
Domanda rapida, vedo che usi

Code: Select all

virgolo=substr(risultato,2,2);
il quale penso serva per estrarre la 'sottostringa' partendo dal secondo carattere, quello che vorrei capire è se Bennu effettua i cast (conversioni) al volo.
Guardando il codice risultato è definito come float mentre substr agisce sulle stringa, quindi mi manca un passaggio di 'conversione', a meno che, ripeto, non venga fatto implicitamente.

edit: ma un help di Bennu 'decente' non esiste ? Magari anche offline?

Re: Dec2Bin convertitore in binario in bennu

Posted: 7 Jun 2011, 16:47
by Zip
Guardando il codice risultato è definito come float mentre substr agisce sulle stringa, quindi mi manca un passaggio di 'conversione', a meno che, ripeto, non venga fatto implicitamente.
non ne ho la piu pallida idea, vuoi vedere che è per questo che se aggiungo quella condizione sballa?
edit: ma un help di Bennu 'decente' non esiste ? Magari anche offline?
offline c'e in spagnolo, e in inglese l'elenco delle cose che ci sono dentro i moduli e basta

mentre online c'e il wiki

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 8:21
by gigios
Eccomi qui, ho fatto una prova veloce ma nella mia completa ignoranza di Bennu non riesco a par partire il tuo esempio.
Mi da errore nelle costanti usate per i tasti.
Ho guardato un esempio che usa la tastiera (esempio Medium presente nel pack 2.1) e non noto nulla di strano salvo che nella cartella è presente un file imp con all'interno, penso, i moduli da importare.
Come devo fare x creare questo files con i moduli che servono?

edit: non ho visto menu specifici (a meno che il menu settings/import plugins sia riferito a questi moduli e non ai plugin dell'editor), ho copiato brutalmente l'imp dell'esempio e ora compila.

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 8:37
by gigios
Scusa il doppio post!

Ho provato l'esempio, a parte la difficoltà di andare alla cieca con le istruzioni, ma mi sembra funzionare correttamente.
A video vedo il risultato della divisione corretta e nella linea sotto il primo valore che diventa 0 o 5 a seconda che si prema il tasto S o D come da prg.
Quello che non cambia è il valore binario in quanto non viene ancora calcolato, ma il tutto sembra funzionare... :?:

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 10:29
by Zip
edit: non ho visto menu specifici (a meno che il menu settings/import plugins sia riferito a questi moduli e non ai plugin dell'editor), ho copiato brutalmente l'imp dell'esempio e ora compila.
o fai un file generico bgdc.import come quello che hai copiato e sei sicuro, oppure crei un file .import con lo stesso nome del .prg e dovrebbe andare..
Quello che non cambia è il valore binario in quanto non viene ancora calcolato, ma il tutto sembra funzionare...
Prova ad aggiungere la parte quotata all inizio del primo post, e la metti alla fine del codice dove c'e il commento "dove doveva venire messa la condizione"
riprova il programma e vedi che fa sempre 5 e 1

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 11:16
by gigios
:oops: Mi era sfuggita la prima parte.

Ora, senza saper ne leggere ne scrivere in Bennu, ho cercato nel wiki come effettuare il modulo (ovvero avere il resto di una divisione) ed ho trovato l'operatore %.
Il problema è che ottengo un errore di compilazione, guardando nel forum ho trovato l'istruzione mod la quale effettua la stessa operazione, l'unico vincolo che le due variabili siano interi (o almeno questo è quello che ho interpretato io).

Riassunto, semplicemente per sapere se il bit deve essere 1 o 0 ho fatto così:

binario=(numeroInt mod 2);

dove numeroInt è semplicemente la tua variabile solo che l'ho definita come integer altrimenti ottengo un errore di compilazione (non ho ancora capito come cavolo convertire un tipo di dato in un altro, ovvero come fare il cast).

Così facendo sembrerebbe funzionare.

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 11:42
by Zip
mi posti tutto il codice?

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 11:47
by gigios
Questo è il tutto (considera che ci sono dentro anche parti tolte/commentate durante i test):

Code: Select all

//CONVERTITORE v.0.2

global

int numeroInt; 
float numero; 
float risultato;
int virgolo;
int binario;
begin
     set_mode(320,240,16); 
     write(0,10,5,0,"dec2bin v.1 push S o D");
     write(0,10,15,0,"S=9 D=8");
    write_var(0,210,5,0,numero);
     write_var(0,240,5,0,risultato);   
	write(0,100,30,0,"Virgolo :=>:");
    write_int(0,210,30,0,&virgolo);
	write(0,100,40,0,"Binario :=>:");
    write_int(0,210,40,0,&binario);
   loop
    if (key(_s)); 
     numero=9;
     numeroInt=9;
     converti();
     end

    if (key(_d)); 
     numero=8;
     numeroInt=8;
     converti();
     end
      
    frame;
   end
   let_me_alone();
end


process converti()
local
string resto;
int res;
float res2;
end
begin
   risultato=numero/2;
   binario=(numeroInt mod 2);
   res2=frac(risultato);
   //res=res*2;
   /*if (res=numero);
	binario=0;
   else
	binario=1;
   end
   */
    write_int(0,210,50,0,&res);
    write_var(0,210,60,0,res2);
   
   //resto=substr(risultato,2,2);
   //virgolo=substr(risultato,2,2); //legge la parte di float di "risultato" dopo la ","
   
   //punto dove doveva essere messa la condizione
/*  	if resto='5';
	 binario=1;
	else
	 binario=0;
	end
 */
 end
 
FUNCTION float frac ( float f )
PRIVATE
	int n;
BEGIN
	n = f;
	RETURN (f - n);
END
è sostanzialmente la tua versione su cui ho fatto due o tre prove veloci.... ;)

Re: Dec2Bin convertitore in binario in bennu

Posted: 8 Jun 2011, 11:56
by Zip
scusa ma queo 105696 ecc
che chiami resto cosa sarebbe?