PDA

View Full Version : [C]aiutate un niubbo


lo_spettro
13-02-2004, 09:59
Salve a tutti. E' il mio primo messaggio in questo forum e spero di disturbarvi il meno possibile riguardo i miei problemi. Sono proprio all'inizio e mi servirebbe qualche consiglio da voi esperti.

Il problema è questo:

Devo fare una semplice applicazione in C che faccia in modo che quando si inserisce un numero (ad es. 12345), venga memorizzato in un file di testo l'ora e la data in cui questo numero è stato memorizzato. In più, se questo numero viene digitato due volte in un determinato arco di tempo (ad es. 24h), la seconda volta dovrebbe essere memorizzato in un file di testo a parte. Io sono arrivato soltanto a pensare come far inserire il numero:



#include <stdio.h>

int a;

int main()
{
printf("\nInserire il numero", a);
scanf("%d", &a);

return 0;
}



Oltre questo striminzito codice iniziale, non so come poter gestire il discorso dell'ora e della data.

Mi dareste una mano?

lo_spettro
13-02-2004, 10:25
Scusatemi se pongo anche un'altra domanda:

Si potrebbe fare anche in visual basic questa cosa?

In caso affermativo, come potrei cominciare visto che anche questo linguaggio lo consoco pochissimo?

dr.stein
13-02-2004, 10:45
lanciando il visual basic! :D

(sembra una cazzata ma ti assicuro che il vb e' talmente semplice - all'inizio - che per cominciare a buttare giu' qualcosa basta veramente lanciarlo!)

lo_spettro
13-02-2004, 11:03
Originariamente inviato da dr.stein
lanciando il visual basic! :D

(sembra una cazzata ma ti assicuro che il vb e' talmente semplice - all'inizio - che per cominciare a buttare giu' qualcosa basta veramente lanciarlo!)


In verità non l'ho ancora acquistato perchè in molti (ed ho avuto anche conferma leggendo dei post su questo forum) mi hanno suggerito di non dedicarmi troppo ad imparare un linguaggio che poi risulti utile solo per un ambiente (windows) ma di imparare linguaggi che possano essere adatti anche per altri sistemi operativi come unix o linux. A tal proposito mi hanno suggerito c++ e java, ma, dato che ho visto che su questa sezione del forum ci sono già molte altre discussioni in merito, non entro nel merito per non finire OT.

lo_spettro
13-02-2004, 11:12
cercando su internet, forse mi spiego meglio se dico che quest'applicazione, dovrebbe assomigliare un pò alla creazione di un file LOG.

cionci
13-02-2004, 11:49
Sai lavorare sui file ?

cionci
13-02-2004, 11:51
http://cplus.about.com/library/weekly/aa042902a.htm

Bel tutorial... Guarda anche il resto...

lo_spettro
13-02-2004, 11:55
Originariamente inviato da cionci
Sai lavorare sui file ?

Sinceramente no :(

Ma sto dando uno sguardo al link che gentilmente mi hai segnalato, solo che non ci sto capendo molto, ma ci sto provando :muro:

Potresti farmi un esempio a livello di codice in modo che possa seguire meglio le guide che hai indicato?

Grazie mille!!

cionci
13-02-2004, 12:05
C'è scritto in alto "An example" ;)

lo_spettro
13-02-2004, 12:15
Prima di imparare a programmare devo necessariamente imparare a leggere! Non l'avevo visto l'esempio. Grazie!

Però ho un piccolo problema, uso un editor che si chiama dev-C++ e mi ha compilato l'esempio senza errori, però, quando lancio l'applicazione, mi appare per un secondo una schermata tipo prompt e subito scompare! Sicuramente sbaglio qualcosa...ma cosa?

Scusami se ti faccio perdere tempo!

cionci
13-02-2004, 12:20
Metti in fondo al programma questa riga:

system("Pause");

e includi stdlib in alto...

Altrimenti usa questo IDE che IMHO è migliore:

http://www.simtel.net/product.php?id=74843&SiteID=simtel.net

http://www.parinya.ca/ è il sito originale...

lo_spettro
13-02-2004, 12:32
Grazie mille!

Ora, il codice che viene fuori è questo:



#include <stdio.h>
#include <stdlib.h>

int main()
{
char ifilename[] = "h:/prova.txt";
char ofilename[] = "h:/prova.txt";
char name[30];
int idNum;
FILE *ofp, *ifp;

/* Open file for input */
ifp = fopen(ifilename,"r");

/* Read data */
fscanf(ifp,"%s %d",name,&idNum);

/* Open file for output */
ofp = fopen(ofilename,"w");

/* Write out data */
fprintf(ofp,"%d %s\n",idNum, name);

/* Close Files */
fclose(ifp);
fclose(ofp);

return 0;
system("Pause");
}



Quando lo eseguo vedo il file prova che contiene 2 serie di numeri.

Non ho modo comunque di inserire nulla.

Es.: dovrei fare in modo che se lancio "prova"

mi chieda :"inserisci il numero"(12345 per esempio)
una volta inserito il numero, dovrebbe salvarmelo in "prova.txt" in modo che io possa leggere:

"12345 , 13/02/2004 , 12.43"

E' una cosa complessa da fare secondo te o ci posso arrivare anche io?

lo_spettro
13-02-2004, 12:37
Ho già fatto un primo piccolo passo, e cioè ho capito che se alla funzione fopen setto il metodo a+, mi scrive i dati sullo stesso file senza sovrascriverli, cioè, li scrive di seguito.

cionci
13-02-2004, 12:39
Non avevi fatto prima il programma che ti chiedeva un numero ? Combinali insieme...

lo_spettro
13-02-2004, 12:42
Originariamente inviato da cionci
Non avevi fatto prima il programma che ti chiedeva un numero ? Combinali insieme...

Ehhh siii.... come se fosse facile!! :) e poi mi resta comunque il problema più grande... associare il numero alla data e l'ora!

Ora provo a "miscelare" i due codici.

Non so come ringraziarti per i sufferimenti che mi stai dando!!

cionci
13-02-2004, 12:46
Quando sei riuscito a miscelarli (la frptinf si usa come la printf) ;) ti insegno a mettere l'ora e la data...

lo_spettro
13-02-2004, 12:56
con questo codice:


#include <stdio.h>
#include <stdlib.h>


int a;
int main()
{
char ifilename[] = "c:/prova.txt";
char ofilename[] = "c:/prova.txt";
char name[30];
int idNum;
FILE *ofp, *ifp;

printf("\nInserire il numero: ", a);
scanf("%d", &a);


/* Open file for input */
ifp = fopen(ifilename,"r");

/* Read data */
fscanf(ifp,"%s %d %d",name,&idNum,&a);

/* Open file for output */
ofp = fopen(ofilename,"a+");

/* Write out data */
fprintf(ofp,"%d %d %s\n",idNum, name, a);

/* Close Files */
fclose(ifp);
fclose(ofp);

return 0;
system("Pause");
}


leggo questo nel file "prova.txt"



2293728 2293728
2293728 2293728
2293728 2293728
2293728 2293728
2293728 2293728
2293728 2293728
2293728 2293544 ÿÿÿÿ´ðcyÈŽby

lo_spettro
13-02-2004, 14:05
ho modificato così:



#include <stdio.h>
#include <stdlib.h>

int main()
{
char ifilename[] = "c:/prova.txt";
char ofilename[] = "c:/prova.txt";
int idNum;
FILE *ofp, *ifp;

/* Open file for input */
ifp = fopen(ifilename,"r");

/* Read data */
fprintf(ifp,"inserisci il numero %d", idNum);
fscanf(ifp,"%d", &idNum);

/* Open file for output */
ofp = fopen(ofilename,"a+");

/* Write out data */
fprintf(ofp,"%d",idNum);

/* Close Files */
fclose(ifp);
fclose(ofp);

return 0;
system("Pause");
}


Ma non riesco a "farmi richiedere" la variabile idNum :muro:

lo_spettro
13-02-2004, 14:14
OK!! adesso mi inserisce il numero che inserisco:


#include <stdio.h>
#include <stdlib.h>

int main()
{
char ifilename[] = "c:/prova.txt";
char ofilename[] = "c:/prova.txt";

int a, idNum;
FILE *ofp, *ifp;

/* Open file for input */
ifp = fopen(ifilename,"r");

/* Read data */
printf("inserisci il numero: ", a);
scanf("%d", &a);

/* Open file for output */
ofp = fopen(ofilename,"a+");

/* Write out data */

fprintf(ofp,"%d %d\n",idNum, a);
/* Close Files */
fclose(ifp);
fclose(ofp);

return 0;
system("Pause");
}


Grazie Cionci!!! Ora attendo per imparare a metterci la data e l'ora!!

cionci
13-02-2004, 14:25
L'esempio leggeva un file di input e lo riscriveva...
A te non serve aprire il file di input (quindi puoi eliminare ogni riferimento a ifp)...

Visto che stai facendo progressi veloci, guarda questo:

#include <time.h>
#include <stdio.h>

struct tm *newtime;
time_t aclock;

void main( void )
{
time( &aclock ); /* Get time in seconds */

newtime = localtime( &aclock ); /* Convert time to struct */
/* tm form */

/* Print local time as a string */
printf( "The current date and time are: %s", asctime( newtime ) );
}

lo_spettro
13-02-2004, 14:52
Con questo mi hai messo in crisi! Nel senso che se provo a copiarlo e a compilarlo mi dice solo:


The current date and time are: press any key to continue.......

cionci
13-02-2004, 15:00
A me funziona:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

struct tm *newtime;
time_t aclock;

void main( void )
{
time( &aclock ); /* Get time in seconds */

newtime = localtime( &aclock ); /* Convert time to struct */
/* tm form */

/* Print local time as a string */
printf( "The current date and time are: %s", asctime( newtime ) );
system("pause");
}

lo_spettro
13-02-2004, 15:13
Infatti funziona, devo imparare anche a cut-copistare!!!


adesso funge tutto così:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>


struct tm *newtime;
time_t aclock;

int main()
{
char ifilename[] = "c:/prova.txt";
char ofilename[] = "c:/prova.txt";
int a, idNum;
FILE *ofp, *ifp;


/* Open file for input */
ifp = fopen(ifilename,"r");

/* Read data */
printf("inserisci il pin: ", a);
scanf("%d", &a);

/* Open file for output */
ofp = fopen(ofilename,"a+");

/* Write out data */
time( &aclock );
newtime = localtime( &aclock );


fprintf(ofp,"%d %d %s\n",idNum, a, asctime( newtime ));
/* Close Files */
fclose(ifp);
fclose(ofp);

return 0;
system("Pause");
}


Sei un mito!!!

cionci
13-02-2004, 15:17
Elimina queste righe:

char ifilename[] = "c:/prova.txt";
....
.... *ifp;


/* Open file for input */
ifp = fopen(ifilename,"r");

....

fclose(ifp);

lo_spettro
13-02-2004, 15:23
Originariamente inviato da cionci
Elimina queste righe:

char ifilename[] = "c:/prova.txt";
....
.... *ifp;


/* Open file for input */
ifp = fopen(ifilename,"r");

....

fclose(ifp);

Ci ho provato! Ma ci dev'essere qualcosa che non va in windows(e non nel programma) dato che se le elimino, mi da:


"prova.exe ha provocato errori e sarà chiuso.......
.......creazione del registro degli errori in corso"


Infatti se compilo senza quelle righe non ottengo errori.

cionci
13-02-2004, 15:26
Ti da errori così ?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
char ofilename[] = "c:/prova.txt";
int a;
FILE *ofp;
struct tm *newtime;
time_t aclock;

/* Read data */
printf("inserisci il pin: ", a);
scanf("%d", &a);

/* Open file for output */
ofp = fopen(ofilename,"a+");

/* Write out data */
time( &aclock );
newtime = localtime( &aclock );


fprintf(ofp,"%d %s\n", a, asctime( newtime ));
/* Close Files */
fclose(ofp);

system("Pause");
return 0;
}

lo_spettro
13-02-2004, 15:31
ora non più :cry: divento matto!!! :muro:

Meglio così!

Davvero non so come ringraziarti! Mi rendo conto che se tu o altri avessero scritto direttamente tutto il codice (cosa che speravo all'inizio!!! :p ) sicuramente non avrei capito quel poco che è stato scritto! Grazie!

lo_spettro
13-02-2004, 15:54
Sarebbe molto più difficile far scrivere su un file excel anzichè su di un file di testo?

cionci
13-02-2004, 20:22
Molto ;) Puoi accontetarti di importare il file di testo in excel successivamente...

Ah...usa le tabluazioni per dividere i campi...viene meglio...
Il carattere di tabulazione in C è \t...

fprintf(ofp,"%d\t%s\n", a, asctime( newtime ));

lo_spettro
14-02-2004, 14:31
Originariamente inviato da cionci
Molto ;) Puoi accontetarti di importare il file di testo in excel successivamente...

Ah...usa le tabluazioni per dividere i campi...viene meglio...
Il carattere di tabulazione in C è \t...

fprintf(ofp,"%d\t%s\n", a, asctime( newtime ));


Capito il discorso per excel e dei tabulatori.

Ora, supponiamo che il numero da inserire sia fisso, tipo un pin, mi daresti qualche suggerimento su come far in modo che se il numero digitato non è quello richiesto, il programma mi chieda l'inserimento corretto?

Stavo cominciando a provarci da solo studiando la condizione IF, ma non so se sia la strada più corretta.

lo_spettro
14-02-2004, 14:41
Un'ultima cosa.... ho scaricato l'IDE che mi avevi suggerito ma non mi dà nessuna possibilità di compilare, nel senso che quando vado sul menù "Build", non ho la possibilità di scegliere nemmeno una voce :(

fpucci
14-02-2004, 14:41
Originariamente inviato da lo_spettro
Ora, supponiamo che il numero da inserire sia fisso, tipo un pin, mi daresti qualche suggerimento su come far in modo che se il numero digitato non è quello richiesto, il programma mi chieda l'inserimento corretto?

Stavo cominciando a provarci da solo studiando la condizione IF, ma non so se sia la strada più corretta.

Banalmente:

se il dato è una stringa numeria, usa:
if (strcmp (pin_inserito, pin_da_confrontare) == 0) {
OK
} else {
NOT OK
}
altrimenti:
if (pin_inserito == pin_da_confrontare) {
OK
} else {
NOT OK
}

maxithron
14-02-2004, 14:43
Originariamente inviato da lo_spettro
Un'ultima cosa.... ho scaricato l'IDE che mi avevi suggerito ma non mi dà nessuna possibilità di compilare, nel senso che quando vado sul menù "Build", non ho la possibilità di scegliere nemmeno una voce :(


Probabilmente perchè ti sei scaricato solo l'editor. Sul sito c'è anche la versione Full che comprende tutto.

P.S.: quest'applicazione sulla quale stai lavorando, è per studio o per lavoro? (non sentirti obbligato a rispondere....è solo una mia curiosità).

cionci
14-02-2004, 14:50
Devi creare un progetto prima di compilare ;) File->Nuovo...

lo_spettro
14-02-2004, 15:18
Originariamente inviato da fpucci
Banalmente:

se il dato è una stringa numeria, usa:
if (strcmp (pin_inserito, pin_da_confrontare) == 0) {
OK
} else {
NOT OK
}
altrimenti:
if (pin_inserito == pin_da_confrontare) {
OK
} else {
NOT OK
}

Quindi stavo sulla strada giusta pensando ad un "IF". Queste istruzioni dovrei quindi, se ho ben capito, metterle subito dopo la printf:


printf("inserisci il pin: ", a);
scanf("%d", &a);


Solo che al posto di pin_inserito devo sostituire la mia variabile "a" mentre al posto di pin_da_confrontare, devo creare una costante?

lo_spettro
14-02-2004, 15:20
Originariamente inviato da maxithron
P.S.: quest'applicazione sulla quale stai lavorando, è per studio o per lavoro? (non sentirti obbligato a rispondere....è solo una mia curiosità).


No, è solo per studio, non sono per niente ancora in grado di lavorare con la programmazione. :)

lo_spettro
14-02-2004, 15:42
ho provato così:


printf("inserisci il pin: ", a);
scanf("%d", &a);
if(strcmp(a, pin) == 0)
{
printf("\nPin accettato!\n");
}
else
{
printf("\nPIN ERRATO\n");
}


ma il compilatore mi restituisce questo messaggio:


`strcmp' undeclared (first use this function)


Però,a parte questo, in questo modo credo che mi confronti soltanto i due valori ma poi li scrive lo stesso sul file anche se sono diversi :muro:

lo_spettro
14-02-2004, 15:51
così va meglio:


if(a == pin)
{
printf("\nPin accettato!\n");
}
else
{
printf("\nPIN ERRATO\n");

}


ma sono sicuro che dopo l'ultima printf ci debba essere un'altra istruzione che mi faccia tornare all'inserimento del pin, una "return qualcosa" :what:

cionci
14-02-2004, 16:02
Se "a" è un intero non serve strcmp...

do
{
printf("inserisci il pin: ", a);
scanf("%d", &a);
if(a == pin)
{
printf("\nPin accettato!\n");
}
else
{
printf("\nPIN ERRATO\n");
}
}while(a != pin);

Comunque se ti studi il corso che ti ho passato ne parlano del while...

lo_spettro
14-02-2004, 16:08
Originariamente inviato da cionci
Comunque se ti studi il corso che ti ho passato ne parlano del while...

In effetti sto trovando più risposte su quel sito che non nel libro che sto leggendo:



Programmare in C - Guida Completa
Editore - Apogeo
Autori - Peter Aitken & Bradley Jones



Non che sia colpa degli autori ovviamente :p ma del sottoscritto!!

lo_spettro
14-02-2004, 17:20
sono ancora a rompere....

Dato che non dispongo di un database come access, cosa potrei utilizzare per importare il file di testo in un archivio?

il file di testo esce così:



12345 Sat Feb 14 16:09:53 2004

12345 Sat Feb 14 16:10:29 2004

12345 Sat Feb 14 16:51:19 2004

12345 Sat Feb 14 17:07:30 2004



dove 12345 è il codice che si è inserito.

Adesso il pin è una costante, ma come dovrei dichiararlo se fosse invece un valore compreso tra un intervallo di numeri?

cioè, voglio dire che quest'applicazione mi serve per capire come assegnare, ad un gruppo di utenti che utilizzano tutti lo stesso computer, il pin. E' logico però che non avranno mai un pin identico e quindi mi chiedo come creare un intervallo di pin validi cioè accettabili dal programma. Mica posso definire n costanti? oppure è l'unico modo possibile?

cionci
14-02-2004, 17:22
Con un if e due costanti...pensa un po' come fare...

cionci
14-02-2004, 17:23
Per importare sul DB...puoi farlo anche tramite Access o Excel... Credo che entrambi (sicuramente Excel), possono importare file di testo...

lo_spettro
14-02-2004, 17:31
Originariamente inviato da cionci
Con un if e due costanti...pensa un po' come fare...

Se ho ben capito il tuo splendido suggerimento, mi basterebbe fare una cosa tipo:



int min = 1000
int max = 10000

e poi passare all'IF

if (min < 1000 || max > 10000)

scrivo l'istruzione per interrompere il programma



In maniera molto "primitiva", era questo che mi suggerivi?

cionci
14-02-2004, 17:35
Più che altro così:

if (a < min || a > max)

lo_spettro
14-02-2004, 17:37
Originariamente inviato da cionci
Più che altro così:

if (a < min || a > max)


Ma sei un grande!!!

Scusa se te lo chiedo ma da quanti anni sei programmatore?

lo_spettro
14-02-2004, 17:41
E poi... :doh: ora capisco la stupidaggine che ho scritto!

Avendo definito min e max come costanti, non c'è nessun modo per poter gestire un IF che contempli che i loro valori siano maggiori o minori di loro stessi!!

fpucci
14-02-2004, 17:43
Originariamente inviato da lo_spettro
ho provato così:


printf("inserisci il pin: ", a);
scanf("%d", &a);
if(strcmp(a, pin) == 0)
{
printf("\nPin accettato!\n");
}
else
{
printf("\nPIN ERRATO\n");
}



La strcmp() va usata solo per comparazione tra stringhe.



Originariamente inviato da lo_spettro
ma il compilatore mi restituisce questo messaggio:


`strcmp' undeclared (first use this function)



In cima al tuo file sorgente devi scrivere:
#include <string.h>

Comunque vedo che hai risolto utilizzando le variabili di tipo intero... Ok lo stesso!

lo_spettro
14-02-2004, 17:46
Originariamente inviato da fpucci
La strcmp() va usata solo per comparazione tra stringhe.

In cima al tuo file sorgente devi scrivere:
#include <string.h>



Ecco perchè mi dava quell'errore!! Scusami ma non lo sapevo. Mi spiace ma son proprio agli inizi. Grazie infinite!

fpucci
14-02-2004, 17:48
Originariamente inviato da lo_spettro
Ecco perchè mi dava quell'errore!! Scusami ma non lo sapevo. Mi spiace ma son proprio agli inizi. Grazie infinite!

No problem, spero di esserti stato d'aiuto ad aumentare la tua conoscenza :-)

lo_spettro
15-02-2004, 01:23
l'ho implementato così e sembra funzionare:



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
char ofilename[] = "c:/C_Testing/prova.txt";
int a;
int min = 1000;
int max = 5000;
FILE *ofp;
struct tm *newtime;
time_t aclock;

/* Leggo il file */
do
{
printf("inserisci il pin: ", a);
scanf("%d", &a);
if(a < min || a > max)
{
printf("\nPin errato!\n");
}
else
{
printf("\nPIN accettato\n");
}
}while(a < min || a > max);



/* Apro il file per l'output */
ofp = fopen(ofilename,"a+");

/* Scrivo i dati sul file */
time( &aclock );
newtime = localtime( &aclock );


fprintf(ofp,"%d\t %s\t\n", a, asctime( newtime ));
/* Chiudo il file */
fclose(ofp);

system("Pause");
return 0;
}



In questo caso però, mi viene a mancare un valore di riscontro:

Se prima avevo definito la costante:


int pin = 12345


avevo un valore esatto con cui confrontare il pin. Ora, invece, mi basterebbe sapere l'intervallo dei valori min e max per inserire un qualsiasi pin valido. E se volessi fare in modo che il pin che viene inserito, debba essere confrontato con qualche tipo di dato in possesso dell'utente? che so, un floppy, una chiave usb, un dispositivo seriale, eccetera?

maxithron
15-02-2004, 23:42
Originariamente inviato da lo_spettro
In questo caso però, mi viene a mancare un valore di riscontro:

Se prima avevo definito la costante:


int pin = 12345


avevo un valore esatto con cui confrontare il pin. Ora, invece, mi basterebbe sapere l'intervallo dei valori min e max per inserire un qualsiasi pin valido. E se volessi fare in modo che il pin che viene inserito, debba essere confrontato con qualche tipo di dato in possesso dell'utente? che so, un floppy, una chiave usb, un dispositivo seriale, eccetera?

Mi sa che stai correndo un pò troppo in merito ai "dispositivi" esterni.

Tieni presente che potresti provare a "pensare" ad un altro metodo, ovvero potresti fare in modo che il pin da inserire, debba rientrare non soltanto tra i valori min e max ma che l'intervallo che intercorre tra questi due valori debba generare una certa quantità di combinazioni di valori accettabili. Di conseguenza, non avresti problemi ad "assegnare" ad ogni utente un pin che risponda a tale criterio di verità. Personalmente ti consiglierei questa soluzione, primo perchè ti farà sforzare di più le meningi, e poi perchè quello che avevi in mente sui dispositivi esterni, è tranquillamente fattibile in decine di modi, ma dovresti prima approfondire anche altri aspetti del linguaggio.

fpucci
16-02-2004, 10:04
Originariamente inviato da lo_spettro
E se volessi fare in modo che il pin che viene inserito, debba essere confrontato con qualche tipo di dato in possesso dell'utente? che so, un floppy, una chiave usb, un dispositivo seriale, eccetera?

Se il file si trova su un dispositivo esterno, puoi accedere al dispositivo esattamente come ti crei il tuo file di log.
Un achiave USB, correttamente installata ed inserita, non fa altro che aggiungerti un drive removibile (di solito D:\), mentre il floppy lo vedi come A:\, mente la seriale la vedi come COM1: oppure COM2: In tutti casi, devi accedervi con una open() e poi con una read() (o funzioni similari)

Bye

lo_spettro
16-02-2004, 11:03
Siete meravigliosi ragazzi! Davvero, in questi pochi giorni che sono iscritto a questo forum, leggendo anche i 3d di altri utenti sto imparando sempre più cose! :D

Tornando al problema, e considerando i suggerimenti dell'utente maxithron e dell'utente fpucci, allora:

Che dritta mi dareste per sviluppare una funzione che generi dei valori accettabili all'interno dell'intervallo delle costanti MIN e MAX?

E poi, volendomi fare del male :p, potrei andare oltre e fare in modo che non solo il valore debba essere riscontrato all'interno di MIN e MAX, ma anche con il dispositivo esterno che, se non ho inteso male quello che mi ha suggerito fpucci, dovrei trattarlo semplicemente come se fosse un file sul quale posso leggere o scrivere dati.

Se invece non ho capito quello che avete detto, potreste spiegarmelo meglio?

GRAZIEEEE!!! :D

cionci
16-02-2004, 11:10
Originariamente inviato da lo_spettro
se non ho inteso male quello che mi ha suggerito fpucci, dovrei trattarlo semplicemente come se fosse un file sul quale posso leggere o scrivere dati.
Dipende...non è sempre così semplice...
Su Linux è praticamente così...su Windows non è detto...

Prima di tutto potresti generare un pin più lungo e stabilire in maniera matematica quali pin sono validi e quali no...

Che ne so... Un maniera banalissima è stabilire che i pin debbano essere tutti multipli di una lista di numeri... Che so...3 e 17...
Oppure che usando il pin come paramentro di una funzione questa rispetti date specifiche ;)

lo_spettro
16-02-2004, 11:15
Originariamente inviato da cionci
Dipende...non è sempre così semplice...
Su Linux è praticamente così...su Windows non è detto...


Purtoppo il mondo Linux non lo conosco affatto, ma appena avrò i soldi per comprare un nuovo HD cercherò di installarlo.



Prima di tutto potresti generare un pin più lungo e stabilire in maniera matematica quali pin sono validi e quali no...

Che ne so... Un maniera banalissima è stabilire che i pin debbano essere tutti multipli di una lista di numeri... Che so...3 e 17...
Oppure che usando il pin come paramentro di una funzione questa rispetti date specifiche ;)

Questo concetto che se non erro è + o - quello che suggeriva maxithron, al momento non riesco nemmeno ad immaginare come svilupparlo :cry:

cionci
16-02-2004, 11:25
Per i multipli è facile...

Utilizza l'operatore % (modulo)... Ti rende il resto di una divisione intera...

Se (a % 17) == 0 allora a è un multiplo di 17...
Se (a % 17) == 0 && (a % 3) == 0 allora a è un multiplo di 17 e di 3...

Questa comunque è una cosa molto semplice...

Per creare i pin nond evi far altro che usare l'operazione inversa...cioè puoi crearli in moltiplicando un numero per 3 e 17...

Ad esempio ti puoi prendere data, ora e minuto e moltiplicarle per 3 e 17...

Ad esempio:

1602041119 * 3 * 17 e ti da il pin... Anche se ti viene un numero un po' grossino... Oppure semplicemente usare un numero progressivo e moltiplicarlo per 3 e 17... A partire da 100 e poi su su...magari aggiungendo 3 per ogni pin creato (almeno i numeri sono meno vicini)...

Ma ci sono tanti modi...tutto sta nell'inventarseli ;)

lo_spettro
16-02-2004, 11:33
Originariamente inviato da cionci

Ma ci sono tanti modi...tutto sta nell'inventarseli ;)

Ma ti giuro che a me non manca la fantasia !!! Mi manca la conoscenza e l'esperienza necessaria per metterla in pratica!! :cry:

Quanti anni ci vogliono??? (io ho cominciato 2 settimane fa)

cionci
16-02-2004, 11:46
Hai già fatto tanto... Devi prima prendere un po' di mano con il linguaggio...

Prova a fare il controllo del modulo...e prova a fare anche la funzioen che genera i pin in base ad un numero in ingresso...

lo_spettro
17-02-2004, 01:29
Originariamente inviato da cionci
Hai già fatto tanto... Devi prima prendere un po' di mano con il linguaggio...

Prova a fare il controllo del modulo...e prova a fare anche la funzioen che genera i pin in base ad un numero in ingresso...


mi daresti qualche dritta in più? :)

maxithron
19-02-2004, 10:37
Originariamente inviato da lo_spettro
mi daresti qualche dritta in più? :)

Se leggi bene il post dove ti parla del %, ti accorgerai che ti ha già detto tutto.. ;)