 |
nas |
| [QUOTE][i]Originally posted by iuz-lab [/i]
... |
09-02-2009 18:45 |
|
 |
nas |
.amico.
Registered: Oct 2004
Posts: 35 (0.00 al dì)
Location: milano
Corso: Informatica
Anno: 1
Time Online: 23:33:27 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by iuz-lab
io ho scelto questa soluzione (vedi allegato)..
scusate se non si capisce un c***o ma non sono un grande scrittore..
la struttura dati l'ho simile alla tua!
uso un albero RB per i nodi e liste di adiacenza per il grafo.
come hai pensato di gestire la funzionalità di "consigliare nuovi amici" ???
|
|
09-02-2009 18:45 |
|
|
|  |
 |
green.riot |
| mm, io ho fatto un grafo con liste di adiacenza or ... |
09-02-2009 22:59 |
|
 |
green.riot |
.simpatizzante.
Registered: Oct 2007
Posts: 14 (0.00 al dì)
Location: Arona Lake Major
Corso: Informatica
Anno: Primo! ;)
Time Online: 2:47:20 [...]
Status: Offline
Edit | Report | IP: Logged |
mm, io ho fatto un grafo con liste di adiacenza orientato quando una persona aggiunge un'altra finisce nel vettore degli amici. se anche l'altra persona ha il puntatore della persona che ha fatto la richiesta di amicizia allora sono amici, in caso contrario la richiesta resta sempre pendente.
ora dubbio, volevo fare un inserimento ordinato utilizzando la ricerca binaria modificata che mi restituisca il puntatore in cui fare l'inserimento. solo che sono sempre costretto a fare la scansione di tutta la lista per trovare il nickname da cercare 
esempio:
___1______2____3_____4_____5____
| andrea | azul | beta | darwin | growl |
---------------------------------------------
@cerca darwin
G->V / 2 # divido in due il numero dei vertici
nella ricerca binaria dovrei fare il numero dei vertici diviso due e poi accedere al nickname e fare un confronto .. solo che per come funsiona il grafo con il puntatore next .. non è possibile .. o forse ignoro qualcosa di banale?
l'unica soluzione è creare una struttura dati parallela per la ricerca? un vettore? una matrice?
crecasi guru c oppure sherpa algoritmi
__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)
Last edited by green.riot on 09-02-2009 at 23:13
|
|
09-02-2009 22:59 |
|
|
|  |
 |
green.riot |
| ops come non detto si può -.-'' scusate ... |
10-02-2009 00:33 |
|
 |
green.riot |
.simpatizzante.
Registered: Oct 2007
Posts: 14 (0.00 al dì)
Location: Arona Lake Major
Corso: Informatica
Anno: Primo! ;)
Time Online: 2:47:20 [...]
Status: Offline
Edit | Report | IP: Logged |
ops come non detto si può -.-'' scusate
__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)
|
|
10-02-2009 00:33 |
|
|
|  |
 |
iuz-lab |
| [QUOTE]come hai pensato di gestire la funzionalit ... |
10-02-2009 00:36 |
|
 |
iuz-lab |
.amico.
Registered: Feb 2006
Posts: 38 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 7:09:25 [...]
Status: Offline
Edit | Report | IP: Logged |
come hai pensato di gestire la funzionalità di "consigliare nuovi amici" ???
non mi ricordo bene a cosa ho pensato.. comunque è una cosa del genere..
supponendo di voler consigliare amici al profilo P..
creo una lista di possibili amici di P popolando una lista con tutti gli amici degli amici di P (nessun nodo duplicato e nessun amico di P dovra' finire in questa lista)..
e poi la scorro e per ogni nodo vado alla ricerca di almeno 3 amici che sono presenti nella lista degli amici di P..
se ci sono 3 amici lo consiglio, altrimenti no..
|
|
10-02-2009 00:36 |
|
|
|  |
 |
Benny |
| Ciao a tutti, qualcuno di voi mi saprebbe dire com ... |
10-02-2009 10:55 |
|
 |
Benny |
.fedelissimo.
Registered: May 2003
Posts: 48 (0.01 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 12:49:02: [...]
Status: Offline
Edit | Report | IP: Logged |
Ciao a tutti, qualcuno di voi mi saprebbe dire come diavolo si resetta una stringa(puntatore char) in questo malefico linguaggio?
le sto provando tutte il problema mio è che uso scanf e strcat che concatena due puntatori stringa, ma all'iterazione successiva il puntatore è quasi pieno e non fa un tubo o fa cazzate..
aggiungere un \0 non fa nulla, anzi da errore
non è bello come java quindi non si può fare stringa=""
funzioni standard non ci sono
fare free e riallocare non fa una mazza
insomma o mi metto io a grattare i dischi magnetici per pulire la stringa o non si da una mossa sta maledetta stringa...
io ancora devo fare un casino di roba e mi sento come prince of persia solo che ho una clessidra piu piccola anche se devo consegnare il 9 marzo
__________________
Se non credi in te stesso, chi ci crederà?
|
|
10-02-2009 10:55 |
|
|
|  |
 |
Gehur |
| il tuo problema è leggere una la stringa di input ... |
10-02-2009 11:24 |
|
 |
Gehur |
.grande:maestro.
Registered: Apr 2006
Posts: 519 (0.07 al dì)
Location: Milano
Corso: Informatica
Anno:
Time Online: 3 Days, 0:41:42 [...]
Status: Offline
Edit | Report | IP: Logged |
il tuo problema è leggere una la stringa di input??
per esempio nick n nick2
comunque se ti può essere utile e se ho capito il problema:
char* stringa = calloc(30,sizeof(char));
ti crea una stringa di 30 caratteri, se non bastano basta fare realloc
string = (char*)realloc(string, (i+1)*sizeof(char));
sui vari progetti vecchi c'è la funzione readstring che fa questo
|
|
10-02-2009 11:24 |
|
|
|  |
 |
Benny |
| no gehur il problema e leggere system ? nick1 nick ... |
10-02-2009 13:20 |
|
 |
Benny |
.fedelissimo.
Registered: May 2003
Posts: 48 (0.01 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 12:49:02: [...]
Status: Offline
Edit | Report | IP: Logged |
no gehur il problema e leggere system ? nick1 nick2 gruppo
dove gruppo puo avere degli spazi bianchi, e in generale in tutti i comandi dove ci sta o gruppo o status che implicano spazi bianchi..
provero a vedere questa readstring..
comunque nel realloc, si estende la stringa corrente, io devo renderla di nuovo vuota
ovvero dopo un comando il puntatore e sporco del vecchio comando, se io ne immettessi un altro, lo metterebbe in coda fino al totale riempimento o a delle schifezze...
i passi sono:
comando carattere qualcosa gruppo(o status)
le stringhe sono piene
devo renderle vuote(gruppo=vuoto)
grazie
controllero quella funzione
__________________
Se non credi in te stesso, chi ci crederà?
|
|
10-02-2009 13:20 |
|
|
|  |
 |
darkshadow |
|  
... |
10-02-2009 13:25 |
|
 |
darkshadow |
Are You From The Past?

Registered: Jul 2007
Posts: 485 (0.07 al dì)
Location: Milano
Corso: Informatica Magistrale
Anno: 1
Time Online: 13 Days, 13:38:56 [...]
Status: Offline
Edit | Report | IP: Logged |
 
magari farlo puntare a NULL??
__________________
by Ð@rk§h@ÐØw
|
|
10-02-2009 13:25 |
|
|
|  |
 |
Benny |
| gia fatto, quando alla prossima iterazione ci risc ... |
10-02-2009 22:24 |
|
 |
Benny |
.fedelissimo.
Registered: May 2003
Posts: 48 (0.01 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 12:49:02: [...]
Status: Offline
Edit | Report | IP: Logged |
gia fatto, quando alla prossima iterazione ci riscrivo sopra, riscriverei su un puntatore a null, quindi errore ecc...
__________________
Se non credi in te stesso, chi ci crederà?
|
|
10-02-2009 22:24 |
|
|
|  |
 |
darkshadow |
|  
... |
10-02-2009 22:30 |
|
 |
darkshadow |
Are You From The Past?

Registered: Jul 2007
Posts: 485 (0.07 al dì)
Location: Milano
Corso: Informatica Magistrale
Anno: 1
Time Online: 13 Days, 13:38:56 [...]
Status: Offline
Edit | Report | IP: Logged |
 
cmq non capisco a cosa ti serve azzerare la stringa. quando ti serve basta ke la fai punatre a la nuova stringa.
__________________
by Ð@rk§h@ÐØw
|
|
10-02-2009 22:30 |
|
|
|  |
 |
iuz-lab |
| per leggere una riga del tipo nick n st dove nick ... |
10-02-2009 22:47 |
|
 |
iuz-lab |
.amico.
Registered: Feb 2006
Posts: 38 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 7:09:25 [...]
Status: Offline
Edit | Report | IP: Logged |
per leggere una riga del tipo nick n st dove nick non ha spazi mentre st si potete fare in questo modo..
code:
line = gets();
nickname = strtok(line, " ");
command = strtok(NULL, " ");
status = strtok(NULL, "");
quando prendo status il secondo parametro è lasciato intenzionalmente vuoto..
per capire meglio, il mio codice fa' una cosa del genere..
code:
[cut]
#define BLK " \t"
[cut]
cmd->w0 = cmd->w1 = cmd->w2 = NULL;
cmd->w0 = s_strtok(line, BLK);
if (cmd->w0 == NULL) {
// uscita con errore
}
cmd->w1 = s_strtok(NULL, BLK);
if (cmd->w1 == NULL) {
// uscita con errore
}
if (strlen(cmd->w1) != 1) {
// uscita con errore
}
switch (cmd->w1[0]) {
[cut]
case 'n':
free(cmd->w1);
cmd->w2 = s_strtok(NULL, "");
cmd->w1 = s_trim(cmd->w2, BLK);
if (cmd->w1 != NULL) {
cmd->action = USR_CH_STATUS;
return cmd;
}
[cut]
dove s_strtok è l'equivalente di strtok riscritto da me per non aver problemi di overflow e s_trim è una funzione sempre riscritta da me per non aver problemi di overflow e che rimuove tutti i caratteri del secondo parametro dalla testa e dalla coda del primo parametro..
in pratica io ho creato una funzione parse() che prende in input una linea e ritorna una struttura "command" che contiene un int action (che indica quale tipo di azione deve essere svolta) e tre stringhe (che contengono, a seconda dell'operazione richiesta, tutte le stringhe necessarie.. per esempio: se l'azione è "n" allora conterranno nome nick e status)..
se volete posto il codice completo della mia funzione parse.. ma credo che la elimineranno dal forum (visto che dovrebbe essere proibito aiutarsi con pezzi di codice) (anche se è possibile utilizzare codice trovato in rete e nei progetti precedenti.. mah?!?! ha senso?!?!)
|
|
10-02-2009 22:47 |
|
|
|  |
 |
iuz-lab |
| giusto per chiarire le idee a chi ne ha bisogno..
... |
10-02-2009 23:02 |
|
 |
iuz-lab |
.amico.
Registered: Feb 2006
Posts: 38 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 7:09:25 [...]
Status: Offline
Edit | Report | IP: Logged |
giusto per chiarire le idee a chi ne ha bisogno..
per gestire input di lunghezza arbitraria si usano le funzioni malloc, realloc, free, getchar..
esempio per la memoria (lettura di 9 caratteri):
code:
int i;
char *str;
str = malloc((size_t) 10); // allocazione dello spazio per 9 caratteri (piu' 1 per il '\0')
for (i = 0; i < 9; i++) { // leggo 9 caratteri
str[i] = getchar();
}
str[9] = '\0'; // metto il carattere di fine stringa (non servirebbe ma è sempre bene)
// codice che elabora la mia stringa
free(str); // libero la memoria allocata all'inizio
visto che readstring è gia' disponibile online non credo che postare la mia funzione possa essere considerato contro i termini del progetto..
mia funzione equivalente di readstring:
code:
static int __eofflag = 0;
char *s_gets ()
{
char *line;
int i, s = 16;
char c;
if (__eofflag) {
return NULL;
}
line = malloc(sizeof(char) * s);
for (i = 0; 1; i++) {
if (i + 1 >= s) {
s *= 2;
line = realloc(line, s);
}
c = getchar();
switch (c) {
case '\n':
line[i] = '\0';
return line;
case EOF:
__eofflag = 1;
if (i == 0) return NULL;
line[i] = '\0';
return line;
default:
line[i] = c; break;
}
}
questa funzione legge una intera stringa da stdin e ritorna un puntatore a questa.. non ha problemi di overflow e fa soltanto log_2(n) riallocazioni (dove n è la lunghezza della stringa).. l'unico svantaggio è che se n è di poco superiore ad una potenza di 2 si spreca "un'po'" di spazio (ma è trascurabile visto per cosa dovrebbe essere usata)..
sarebbe migliorabile ulteriormente ma diventerebbe illeggibile..
|
|
10-02-2009 23:02 |
|
|
|  |
 |
Joy88 |
| Ciao!
... |
11-02-2009 11:45 |
|
 |
Joy88 |
.consigliere.
Registered: Jan 2008
Posts: 101 (0.02 al dì)
Location: ~Milano
Corso: Informatica
Anno: 3°
Time Online: 1 Day, 10:27:00: [...]
Status: Offline
Edit | Report | IP: Logged |
Ciao!
ragazzi qui il progetto va male.......!!!
Ora sono alle prese con il nick c...... mah.... ho seri dubbi.....
Domanda:
Mi sono fatta una virtual machine x linux dato che uso windows solo che mi mancano le librerie.. anche quelle standard x il gcc!!
quindi non funziona niente.. quindi chiedo a voi guru di linux: sapete dove posso scaricarle e dove le devo mettere???
__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."
*Dante*
|
|
11-02-2009 11:45 |
|
|
|  |
 |
darkshadow |
|  
... |
11-02-2009 12:04 |
|
 |
darkshadow |
Are You From The Past?

Registered: Jul 2007
Posts: 485 (0.07 al dì)
Location: Milano
Corso: Informatica Magistrale
Anno: 1
Time Online: 13 Days, 13:38:56 [...]
Status: Offline
Edit | Report | IP: Logged |
 
ma perchè ti 6 fatto la VM?? guarda che c'è gcc anche per winzokz!!
__________________
by Ð@rk§h@ÐØw
|
|
11-02-2009 12:04 |
|
|
|  |
 |
Joy88 |
| Ho scritto con il Dev C++ ma dalle lezioni di lab ... |
11-02-2009 12:08 |
|
 |
Joy88 |
.consigliere.
Registered: Jan 2008
Posts: 101 (0.02 al dì)
Location: ~Milano
Corso: Informatica
Anno: 3°
Time Online: 1 Day, 10:27:00: [...]
Status: Offline
Edit | Report | IP: Logged |
Ho scritto con il Dev C++ ma dalle lezioni di lab ho scoperto che alcune cose sono incompatibili con il gcc.. ad esempio la getch(); che equivale alla system ("PAUSE")..
quindi ho dedotto che non stavo scrivendo in ANSI C...
In ogni caso.. su windowz cosa devo fare?? i comandi son gli stessi????
__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."
*Dante*
|
|
11-02-2009 12:08 |
|
|
|  |
 |
| All times are GMT. The time now is 09:03. |
|
|
 |
|
 |
|
|
|  |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|