Newsgroup: it.comp.lang.pascal
Titolo: Aiutino...

Allora, io sto facendo un programma mooolto elementare in pascal.
Quello che ho postato qualche gg fa, col random.
Io avevo intenzione di fargli memorizzare tutti i numeri che il
"giocatore" usa, in modo che, se quello usa lo stesso per più volte,
il programma possa farglielo notare.
Io avrei pensato di far scrivere un file (per es. DATA.DAT) dove
venivano salvati tutti i numeri.
Ho però dei problemi su:
-"svuotare" il file o almeno cancellarlo
-fare una ricerca all'interno di esso per vedere se il numero è già
stato utilizzato.
Sapreste aiutarmi?
Grazie e ciao.
P.S. Quale è il comando per pulire lo schermo :-) Mi sono dimenticato!
Ma bisogna dirgli qualcosa prima, per esempio uses x?
Paolo Perini
pe...@freemail.it
Ricordate di usare l'indirizzo sovrastante
quando mi rispondete via e-mail.
"Non ho bisogno delle riviste! La mia vista divina
mi permette di vedere chi fa la doccia e chi si
cambia!" - il dio KaiohShin

Per pulire lo schermo usa CLRSCR
--
------------
Visit My Page
http://www.geocities.com/Area51/Zone/7650


 Ma bisogna dirgli qualcosa prima, per esempio uses x?
Uses Crt ;
Bye Bye Niki.
--
Automatic posted from 
ro...@virtual.zia.ms.it
 [195.103.158.42]
via Mailgate Server - 
http://www.mailgate.org

poi procedere al confronto...
Scusa, non ho capito molto bene, potresti per favore rispiegarmelo?
Magari con un esempio.


...
Io ti proporrei una seconda soluzione più tecnica ed efficiente.
Visto che i numeri che si possono inserire sono 1..1000 io dichiarerei un
array di 1000 boolean.
Se viene inserito il numero i basta controllare se il boolean dell'array in
posizione i vale true o false.
In pratica, puoi inizializzare tutti i boolean dell'array a false. Quando
viene inserito il numero i metti v[i]=true (se hai chiamato v l'array di
boolean).
Non appena viene introdotto un numero j non devi far altro che vedere se
v[j] vale true o false per sapere se è già stato inserito o meno.
In questo modo eviti la scrittura di un file (operazione comunque lenta) ed
hai la risposta con un solo accessa alla variabile v[i].
Possiamo discutere invece dell'occupazione di memoria: i numeri ora sono
solo 1000, se fossero 10 milioni?
Sicuramente non andrebbero bene nessuna delle due possibilità: un file
sarebbe troppo lungo e lento da leggere; la memoria richiesta per un array
di 10 milioni di boolean è troppa.
In tal caso sarebbero necessarie altre strategie.
-----
  Alessandro Caproni
 
cap...@cifra.it
 
cap...@cli.di.unipi.it
    home page: 
http://www.cli.di.unipi.it/~caproni/intro.html


Visto che bel programmino che hai ideato (seppure sembra tanto stupido)!!
Appena avrai finito la 1.1, sarà ora di metterci un po' di grafica (v. 2.0),
dopodiché ti impari anche le liste ed i puntatori!! :-))
Ciao e a presto per la ver. 3.0 :-)))
Emanuele Cesena
d.a.m...@iol.it
ICQ n° #10570672
"Un generatore di numeri casuali non puo' essere scelto a caso", Knuth

In tal caso sarebbero necessarie altre strategie.
Non puoi incuriosirmi così! Almeno accennami qualcosa :-)
'zzie e 'ao!
Paolo Perini
pe...@freemail.it
 - attach to 
lau...@digibank.it


Ciao e a presto per la ver. 3.0 :-)))
Sono già quasi alla 1.7!



Liste, ragazzo... liste :-)
Emanuele Cesena
d.a.m...@iol.it
ICQ n° #10570672
"La classe dei motociclisti si divide in 2: quelli che sono caduti... e
quelli che cadranno"

c'č altro modo?
Un metodo piů efficiente č
fillchar(v, 1000*sizeof(boolean), byte(false)); { versione portabile }
ovvero
fillchar(v, 1000, 0); { versione non portabile }
Andrea Laforgia
----------------------------------------------------------------------
Sto facendo il militare.....vi rispondo tra una o due settimane !!! :)


Ahi ahi ahi :-)
Chiedilo alla tua prof :-)))
bye


solo 1000, se fossero 10 milioni?
Se fossero 10 milioni (supponiamo da 1 a 10 milioni) si potrebbe utilizzare un
file contenente 10 milioni di bit, (settati a 0 o 1 a seconda dei casi "false" o
"true") e quindi lungo 10.000.000 / 8 = 1.250.000 byte ovvero 1,2 Mb.
La velocità di accesso al file è garantita da una procedura di salto mediante
spostamento del puntatore al file.
L'algoritmo per ogni numero da aggiornare è 
BYTE_DA_LEGGERE = numero DIV 8
RESTO = numero MOD 8
if (RESTO <> 0) then 
begin
   POSIZIONE_FILE = BYTE_DA_LEGGERE 
   POSIZIONE_BIT = 1 shl (8 - RESTO)
end
else 
begin
   POSIZIONE_FILE = BYTE_DA_LEGGERE - 1
   POSIZIONE_BIT = 1 
end
apri il file in modo R/W
sposta_puntatore(POSIZIONE_FILE)
leggi_byte(BYTE_LETTO)
if NUOVO_VALORE_BIT = 0 then 
   BYTE_LETTO = BYTE_LETTO and POSIZIONE_BIT
else
   BYTE_LETTO = BYTE_LETTO or POSIZIONE_BIT
 
sposta_puntatore(POSIZIONE_FILE)
scrivi_byte(BYTE_LETTO)
chiudi il file


"true") e quindi lungo 10.000.000 / 8 = 1.250.000 byte ovvero 1,2 Mb.
Spero stiate tutti scherzando quando dite che la soluzione dell'array
sarebbe più efficente. Per non parlare del file!!! 1,2 MB per memorizzare il
numero da cercare???? Ti becchi un integer per il memo e via andare.
Au revoir.
Sito: 
http://www.geocities.com/timessquare/chasm/5651
E-Mail: 
bor...@hotmail.com

 ecc.
e i:=detect; dove lo metti? Prima dell'initgraph!!!



detect è una costante = 0... quindi è inutile :-)
Emanuele Cesena
d.a.m...@iol.it
ICQ n° #10570672
"Il proiettile che arriva ha sempre la precedenza"


Scusa!? Un integer?? Mi sa che non hai capito bene... semmai un milione di
bit... ma in 16 non ce la fai :-)



Metti che la variabile è sporca... così gli dai una bella pulitina. Sempre
meglio non rischiare!


Preferisco mettere i:=0; (piů veloce) oppure direttamente i:=9; j:=2; (cosě
non ci sono problemi di incomprensione :-)
E poi la grafica la inizializzo sempre con var pulite :-)
Emanuele Cesena
d.a.m...@iol.it
ICQ n° #10570672
"Il proiettile in arrivo ha diritto di precedenza"

Ti becchi un integer per il memo e via andare.
Soggetto ? Predicato ? Complemento ?  
Andrew Cleverland
-----------------
Disse il saggio "Avìta parè bbell sop 'o marm !"...