Autore Topic: [basic] Convertire Un Numero In Stringa  (Letto 5357 volte)

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
[basic] Convertire Un Numero In Stringa
« il: 14 Giugno 2004, 15:23:44 »
 Sto facendo delle operazioni con i numeri casuali e le stringhe. Alla fine però ho dei problemi. Chi mi aiuta a capire come funziona la conversione di un numero in una stringa? Provo a spiegarmi con l'esempio pratico.

Per prima cosa creo un numero casuale compreso in un range tra 1 e 999.999

Codice: [Seleziona]
x=int(rnd(1)*10^6)
Ovviamente questa linea mi restituisce risultati del tipo:

999999
999998
999997
...
...
...
...
5320
5319
5318
...
eccetera.

Successivamente, ho la necessità di convertire il numero precedentemente generato in una stringa, e per farlo utilizzo normalmente:

Codice: [Seleziona]
x$=str$(x)
(A questo punto sorge il problema.)

Supponiamo che il numero casuale sia di 6 cifre:

123456

la stringa corrispondente sarà:

"123456"

Ma se invece il numero generato casualmente è di 5 cifre:

12345

la stringa che viene generata sarà:

"[SPAZIO]12345"

Mentre, almeno personalmente, mi aspettavo un più logico:

"12345"

Senza spazi eccedenti.

Le domande sono due.
La prima è come mai si forma quello spazio.
La seconda è come riuscire a convertire il numero senza generare lo spazio.

Ultima cosa:
Ho trovato una soluzione che aggira il problema. IL guaio è che la routine in questione è lunga circa 20 linee di Basic: decisamente troppo per i miei gusti.

Spero che la domanda non sia di livello troppo infimo  :hail:

 :stordita:
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
[basic] Convertire Un Numero In Stringa
« Risposta #1 il: 14 Giugno 2004, 18:35:57 »
 Puoi provare così?

10 A = 12345
20 A$ = STR$(A)
30 A$ = RIGHT$(A$,(LEN(A$) - 1))

Dovrebbe funzionare... Non lo posso controllare per te perchè devo scappere! Ciauz
Ho capito di odiare le firme...

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
[basic] Convertire Un Numero In Stringa
« Risposta #2 il: 14 Giugno 2004, 22:02:56 »
Citazione da: "djwiper"
Puoi provare così?

10 A = 12345
20 A$ = STR$(A)
30 A$ = RIGHT$(A$,(LEN(A$) - 1))

Dovrebbe funzionare... Non lo posso controllare per te perchè devo scappere! Ciauz
Direi di si!
In pratica basta cancellare il primo carattere che è sempre uno spazio, giusto?
Ad ogni modo, non capisco come mai la conversione in stringa aggiunga quel famigerato "spazio".... :fagiano:  
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
[basic] Convertire Un Numero In Stringa
« Risposta #3 il: 14 Giugno 2004, 22:33:48 »
Citazione da: "Ready64"
Ad ogni modo, non capisco come mai la conversione in stringa aggiunga quel famigerato "spazio".... :fagiano:
metti -1 e capirai :=)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
[basic] Convertire Un Numero In Stringa
« Risposta #4 il: 15 Giugno 2004, 10:54:01 »
 
Citazione da: "iAN CooG/HF"
Citazione da: "Ready64"
Ad ogni modo, non capisco come mai la conversione in stringa aggiunga quel famigerato "spazio".... :fagiano:
metti -1 e capirai :=)
Già.... Hai proprio ragione! Quindi sarebbe più corretto scrivere:

10 A = 12345
20 IF A < 0 THEN GOTO 40
25 A$ = STR$(A)
30 GOTO 60
40 A$ = STR$(A)
50 A$ = RIGHT$(A$,(LEN(A$) - 1))
60 REM NUMERO CONVERTITO

giusto? Così si evita di tagliare un carattere "-" qualora il numero fosse negativo!
Ho capito di odiare le firme...

hiryu

  • Utente
  • **
  • Post: 649
    • http://hiryu.netsons.org/
  • Gioco Preferito: Wizard Of Wor
[basic] Convertire Un Numero In Stringa
« Risposta #5 il: 15 Giugno 2004, 10:56:11 »
 
Citazione
20 IF A < 0 THEN GOTO 40
dov'è il 40 nel listato??

---

ora si  ;)  
Elwood: "E' partito un pistone"
Jake: "Poi torna?"
________________________________________________________
Hiryu @ http://hiryu.netsons.org | http://www.virb.com/hiryu

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
[basic] Convertire Un Numero In Stringa
« Risposta #6 il: 15 Giugno 2004, 22:08:08 »
Citazione da: "djwiper"
20 IF A < 0 THEN GOTO 40
25 A$ = STR$(A)
30 GOTO 60
40 A$ = STR$(A)
 
Codice ridondante. Lo so, e' solo una riga, ma su 6 e' gia' una buona percentuale. Se si ignora una volta poi vengono fuori programmi inutilmente pieni di ripetizioni. ;)
20 A$ = STR$(A)
30 if a<0 then A$ = RIGHT$(A$,(LEN(A$) - 1))
 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
[basic] Convertire Un Numero In Stringa
« Risposta #7 il: 16 Giugno 2004, 10:15:32 »
Citazione da: "iAN CooG/HF"
Citazione da: "djwiper"
20 IF A < 0 THEN GOTO 40
25 A$ = STR$(A)
30 GOTO 60
40 A$ = STR$(A)
 
Codice ridondante. Lo so, e' solo una riga, ma su 6 e' gia' una buona percentuale. Se si ignora una volta poi vengono fuori programmi inutilmente pieni di ripetizioni. ;)
20 A$ = STR$(A)
30 if a<0 then A$ = RIGHT$(A$,(LEN(A$) - 1))
Giusto...
 :ciauz:  
Ho capito di odiare le firme...

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
[basic] Convertire Un Numero In Stringa
« Risposta #8 il: 16 Giugno 2004, 23:38:09 »
 il numero casuale è sempre superiore ad 1, quindi perchè fare il controllo:

IF A < 0

 :fagiano:  
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
[basic] Convertire Un Numero In Stringa
« Risposta #9 il: 17 Giugno 2004, 00:41:26 »
 Hai ragione, ma era per fare una routine generica, credo.
Tra l'altro manco me ne ero accorto dell'errore logico:
30 if a>=0 then A$ = RIGHT$(A$,(LEN(A$) - 1))
cioe': se il numero e' POSITIVO togli lo spazio sulla sinistra della stringa
Ma tutto questo non l'avevi gia' fatto per i punteggi di SpaceCrap?
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2411
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
[basic] Convertire Un Numero In Stringa
« Risposta #10 il: 17 Giugno 2004, 09:20:22 »
 
Citazione da: "iAN CooG/HF"
Hai ragione, ma era per fare una routine generica, credo.
Tra l'altro manco me ne ero accorto dell'errore logico:
30 if a>=0 then A$ = RIGHT$(A$,(LEN(A$) - 1))
cioe': se il numero e' POSITIVO togli lo spazio sulla sinistra della stringa
 
Ah, ok :)

Citazione
Ma tutto questo non l'avevi gia' fatto per i punteggi di SpaceCrap?

Qui il problema si presenta in maniera molto diversa.
L'uso dei comandi STR$, RIGHT$, LEFT$ è semplice, molto semplice, ma qui mi si presentava un problema che non sapevo risolvere nè capire, quello dello [SPAZIO] in eccesso nelle stringhe :)

Un'altra domanda sulle funzioni casuali: sono poi casuali davvero??
Ogni volta che faccio ripartire l'emulatore mi dà lo stesso numero casuale! :confused:
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
[basic] Convertire Un Numero In Stringa
« Risposta #11 il: 17 Giugno 2004, 11:19:11 »
 
Citazione
Un'altra domanda sulle funzioni casuali: sono poi casuali davvero??
Ogni volta che faccio ripartire l'emulatore mi dà lo stesso numero casuale!
Dipende dal segno del parametro di RND.
Se usi come parametro sempre un certo numero negativo,RND genera sempre lo stesso numero casuale.
Se usi come parametro sempre un certo numero positivo,ogni volta che fai ripartire il C64 viene generata una stessa sequenza di numeri casuali.
Se usi come parametro uno 0,vengono generate sequenze semi-casuali di numeri, sempre diverse tra loro.

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
[basic] Convertire Un Numero In Stringa
« Risposta #12 il: 17 Giugno 2004, 15:30:18 »
Citazione da: "Alberto"
Citazione
Un'altra domanda sulle funzioni casuali: sono poi casuali davvero??
Ogni volta che faccio ripartire l'emulatore mi dà lo stesso numero casuale!
Dipende dal segno del parametro di RND.
Se usi come parametro sempre un certo numero negativo,RND genera sempre lo stesso numero casuale.
Se usi come parametro sempre un certo numero positivo,ogni volta che fai ripartire il C64 viene generata una stessa sequenza di numeri casuali ( dipendente dallo stato dell'hardware del C64 ).
Se usi come parametro uno 0,vengono generate sequenze semi-casuali di numeri, sempre diverse tra loro.
SBONK! :confused:

Ero convinto che il seme RANDOM fosse preso dal timer di sistema!
Mi confondo con qualche altro hardware, forse?
Ho capito di odiare le firme...

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
[basic] Convertire Un Numero In Stringa
« Risposta #13 il: 17 Giugno 2004, 18:27:10 »
 
Citazione
Ero convinto che il seme RANDOM fosse preso dal timer di sistema!
Sì,ma solo nel caso di RND(0) (almeno,secondo la Guida del programmatore...  :) )

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
[basic] Convertire Un Numero In Stringa
« Risposta #14 il: 17 Giugno 2004, 18:59:10 »
 Anche il disassemblato del Kernal sembra confermare questa tesi

Codice: [Seleziona]

E0A5   A0 04      LDY #$04
E0A7   B1 22      LDA ($22),Y
E0A9   85 62      STA $62
E0AB   C8         INY
E0AC   B1 22      LDA ($22),Y
E0AE   85 64      STA $64
E0B0   A0 08      LDY #$08
E0B2   B1 22      LDA ($22),Y
E0B4   85 63      STA $63
E0B6   C8         INY
E0B7   B1 22      LDA ($22),Y
E0B9   85 65      STA $65
E0BB   4C E3 E0   JMP $E0E3