.dsy:it. Pages (3): [1] 2 3 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Algoritmi e strutture dati (http://www.dsy.it/forum/forumdisplay.php?forumid=207)
-- Progetto "FACCIALIBRO" (http://www.dsy.it/forum/showthread.php?threadid=37551)


Posted by Benny on 30-01-2009 10:43:

Progetto "FACCIALIBRO"

Buon giorno a tutti, ho letto il testo e già ho i brividi per il terrore di cosa fare...in questo progetto, mi pare che la difficoltà maggiore stia nel riuscire a far girare tutti questi comandi..non sapendo nemmeno come mi è andato l'edilizia dell'8 e non so dove diavolo trovare il tempo per studiare teoria, ma qualcuno è riuscito a terminare uno di questi progetti?:sad:

__________________
Se non credi in te stesso, chi ci crederà?


Posted by middu on 30-01-2009 10:51:

io sto tentando di farlo. Un profilo è una struttura di due campi


Posted by johnnyd on 30-01-2009 10:51:

:D:D:D io rinominerei il progetto in FacciaCulo. :)
comunque da una prima disquisizione con un amico pare comodo usare hashmap insieme ad un grafo immaginario :D
scherzi a parte.... da dove si comincia? grrrrr

__________________
My Blog - My Photo Album


Posted by Benny on 30-01-2009 11:04:

io come per edilizia, cerco di vedere quegli oggetti o quegli elementi come le entità della teoria dei db,quindi profili e gruppi, ma ci sono cose come amici, grado di separazione e la segnalazione che devono essere piu come dei campi che come entità, credo:?...
per quanto mi riguarda riuserò ciò su cui ho sudato per l'edilizia, non vorrei buttarmi su un'altra struttura diversa, senno impazzisco, i tempi faranno schifo, ma e dura..ciao a tutti

__________________
Se non credi in te stesso, chi ci crederà?


Posted by johnnyd on 30-01-2009 11:26:

damose una mano,...volemose bene :D

http://www.dis.uniroma1.it/~leon/di...RetiSociali.ppt

ecco alcune info utili ;)

__________________
My Blog - My Photo Album


Posted by middu on 30-01-2009 11:42:

io rappresentere l'insieme dei profili mediante una lista di nodi


Posted by xSharKMaNx on 30-01-2009 12:02:

Questo lo tento anch'io sperando di capirne qualcosa:

Originally posted by Benny
io come per edilizia, cerco di vedere quegli oggetti o quegli elementi come le entità della teoria dei db,quindi profili e gruppi


Diciamo che Profilo e Gruppi possono essere due strutture, ma da qui a vederla come una teoria dei db ce ne vuole :)


ma ci sono cose come amici, grado di separazione e la segnalazione che devono essere piu come dei campi che come entità, credo:?...


Io pensavo ad un grafo orientato e il grado di separazione lo si potrebbe calcolare con l'algo di Dijkstra


per quanto mi riguarda riuserò ciò su cui ho sudato per l'edilizia, non vorrei buttarmi su un'altra struttura diversa, senno impazzisco, i tempi faranno schifo, ma e dura..ciao a tutti [/B]


Concordo, sia su i tempi, sia sul fatto che non sarà una passeggiata :)

Anche l'idea di middu non è malvagia rappresentare i profili tramite lista!

Concordo anche con jhonnyd ... damose una mano ;)

Ciao gente!

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by johnnyd on 30-01-2009 12:09:

l'hash map come la vedete per la lista dei profili?

__________________
My Blog - My Photo Album


Posted by middu on 30-01-2009 12:15:

bho
quindi si può rappresentare un profilo in questa maniera :
struct profilo
{
char *nick;
char *status;
}nodo_profilo;


Posted by johnnyd on 30-01-2009 12:17:

mentre per il fatto di dijkstra basta dare peso 1 a tutti i nodi?

__________________
My Blog - My Photo Album


Posted by middu on 30-01-2009 12:25:

La lista dei profili è secondo me rappresentata da :

struct lista_profili
{
char *nick_name;
char *status_user;
struct lista_profili *next;
};

typedef lista_profili lista_profili;


Posted by middu on 30-01-2009 12:27:

A questo punto dobbiamo creare una funzione che inserisca un nodo all'interno di una lista ordinata.


Posted by middu on 30-01-2009 12:35:

l'insieme dei profili può essere rappresentato con un albero binario???


Posted by xSharKMaNx on 30-01-2009 12:54:

Originally posted by middu
A questo punto dobbiamo creare una funzione che inserisca un nodo all'interno di una lista ordinata.


Prova un pò a vedere questo:
http://tinyurl.com/cugt94

Per i gruppi stavo pensando ma se utilizzassimo una lista doppiamente concatenata? (la sparo li)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 30-01-2009 12:56:

non va per nulla


Posted by Benny on 30-01-2009 13:01:

Io penso che ogni problema si possa risolvere in uno qualunque degli algoritmi, che esso sia hashing,grafi,alberi,lista è una questione personale, tanto quello che conta è sapere che si crea un nodo, con una sua chiave(nick,nome gruppo,ecc), lo si può buttare anche dentro la lavatrice :) io ritengo che sia una questione di complessità e di tempo adattare la struttura e le funzioni al problema attuale, personalmente userò di nuovo l'hashing, perchè lo ho già usato per il problema edilizia..comunque, non vi fate dominare tanto dalla struttura dati, io mi sto scavando la fossa per le funzioni da applicare, che devono essere case sensitive e di un certo tipo..il main diventerà più lungo delle funzioni ghghgh

PS
dimenticavo quel bel ppt sui grafi, ti ringrazio johnnyd, non è che si poteva fare vedere solo la catena alimentare?io mi trovo in difficoltà a capire quello li, vedere quello della popolazione o di internet, direi che superare la prova del telaio di wanted era una cazzata a confronto :D

__________________
Se non credi in te stesso, chi ci crederà?


Posted by Garet on 30-01-2009 13:02:

Ottimo ho letto dopo che potevo iscrivermi all'appello del 29 gennaio e così mi sono iscritto a quello del 19 febbraio e mi tocca implementare anche le funzionalità aggiuntive, grazie segreteria -__-'


Posted by johnnyd on 30-01-2009 13:45:

pre analisi....
non amo ragionare tanto quando programmo ahimè.... questa volta però mi tocca a quanto pare...

vediamo se concettualmente ci siamo:

1) una prima struttura dovrà contenere l'elenco dei profili con status
2) ogni profilo ha una rete sociale formata dai nodi (che sarebbero tutti i profili) e gli archi. il grafo quindi sarebbe costruito in base agli archi
3) un gruppo potrebbe essere un profilo particolare..... e quindi evitare una seconda struttura

ora per la gestione e il coding sono in alto mare....

__________________
My Blog - My Photo Album


Posted by johnnyd on 30-01-2009 14:05:



comunque con touchgraph possiamo farci un'idea...

__________________
My Blog - My Photo Album


Posted by hyperion on 30-01-2009 20:18:

mmm..si forse per i gruppi è meglio considerarli come profili particolari,ma come rappresentare i profili?una connessione grafo risulta più appropriata visto che ci possono essere relazioni di amicizia reciproca che possono portare ad un ciclo e un albero non può avere cicli....il problema è : se devo cercare un profilo come faccio?dovrei scorrere l'array di liste di adiacenza (se si usa questa rappresentazione dei grafi) ma senza criterio,scorrerla finchè non trovo il profilo....da questo punto di vista non è un vantaggio usare i grafi..


Posted by hyperion on 30-01-2009 20:43:

Originally posted by middu
bho
quindi si può rappresentare un profilo in questa maniera :
struct profilo
{
char *nick;
char *status;
}nodo_profilo;


perchè devi usare dikstra?non basta una visita in ampiezza?già solo quella dovrebbe calcolarti la distanza verso tutti i nodi a partire da un nodo sorgente e te li mette in un array..


Posted by johnnyd on 30-01-2009 20:54:

Originally posted by hyperion
mmm..si forse per i gruppi è meglio considerarli come profili particolari,ma come rappresentare i profili?una connessione grafo risulta più appropriata visto che ci possono essere relazioni di amicizia reciproca che possono portare ad un ciclo e un albero non può avere cicli....il problema è : se devo cercare un profilo come faccio?dovrei scorrere l'array di liste di adiacenza (se si usa questa rappresentazione dei grafi) ma senza criterio,scorrerla finchè non trovo il profilo....da questo punto di vista non è un vantaggio usare i grafi..

se devi cercare un profilo, non basta cercare nell'hashmap?

__________________
My Blog - My Photo Album


Posted by hyperion on 30-01-2009 21:01:

Originally posted by johnnyd
se devi cercare un profilo, non basta cercare nell'hashmap?


si ok ma nell'hash map non hai un'array che devi scorrere?ehm...o forse non so nemmeno cosa sia una hash map...spiegami il tuo punto di vista..


Posted by nas on 31-01-2009 16:29:

ragazzi, una domanda: ma tra i comandi da implementare non esiste un comando per l'inserimento dei profili ????


Posted by hyperion on 31-01-2009 16:49:

Originally posted by nas
ragazzi, una domanda: ma tra i comandi da implementare non esiste un comando per l'inserimento dei profili ????


nick n st


Posted by nas on 01-02-2009 09:51:

Originally posted by hyperion
nick n st


grazie, non avevo visto!!!

un'altra domanda: con il comando "nick d" si cancella il profilo nick, tutte le informazioni riguardanti nick e in particolare le richieste di amicizia ricevute da nick.
Ma secondo voi bisogna eliminare anche le richieste di amicizia che nick aveva chiesto ad altri profili ???


Posted by johnnyd on 01-02-2009 09:53:

mhhh.. penso di si... le richieste di amicizia in che struttura andrebbero salvate?

__________________
My Blog - My Photo Album


Posted by hyperion on 01-02-2009 09:59:

Originally posted by nas
grazie, non avevo visto!!!

un'altra domanda: con il comando "nick d" si cancella il profilo nick, tutte le informazioni riguardanti nick e in particolare le richieste di amicizia ricevute da nick.
Ma secondo voi bisogna eliminare anche le richieste di amicizia che nick aveva chiesto ad altri profili ???


ti sei risposto da solo.. "richieste ricevute da nick" ,cioè le richieste che gli altri profili hanno ricevuto da nick cioè le richieste che nick aveva inviato agli altri profili...
è logico che se elimini le richieste in uscita,quelle in entrata (dai profili verso nick) non avranno più effetto,poichè punteranno ad un profilo che non esiste più..
almeno così è come la intendo io..


Posted by hyperion on 01-02-2009 10:02:

Originally posted by johnnyd
mhhh.. penso di si... le richieste di amicizia in che struttura andrebbero salvate?



la cosa più complicata qui è saper che struttura utilizzare..visto che c'è buisogno di una struttura dinamica (che cresce decresce nel tempo) e che mi permetta di fare dei confronti interni...queste sono le due caratteristiche per me.


Posted by nas on 01-02-2009 10:04:

Originally posted by johnnyd
mhhh.. penso di si... le richieste di amicizia in che struttura andrebbero salvate?


eh... non so ancora.... non so se metterle in una struttura a parte o se metterle su ogni profilo....


Posted by johnnyd on 01-02-2009 11:39:

Originally posted by nas
eh... non so ancora.... non so se metterle in una struttura a parte o se metterle su ogni profilo....


una richiesta di amicizia in teoria dovrebbe essere così:

amico_1
amico_2
amico_1_accettato
amico_2_accettato


o sbaglio?
se uno dei due viene meno si cancella la richiesta...

si portebbe avere una struttura a parte con tutte le richieste... magari una lista

__________________
My Blog - My Photo Album


Posted by nas on 01-02-2009 23:36:

Originally posted by johnnyd
una richiesta di amicizia in teoria dovrebbe essere così:

amico_1
amico_2
amico_1_accettato
amico_2_accettato


o sbaglio?
se uno dei due viene meno si cancella la richiesta...

si portebbe avere una struttura a parte con tutte le richieste... magari una lista


potrebbe essere....

e come avete pensato di gestire l'associazione gruppi/profilo ???


Posted by johnnyd on 02-02-2009 12:02:

secondo me:

un gruppo è un profilo particolare con flag (gruppo = 1) e i componenti del gruppo non sono altro che delle associazioni profilo - profilo... quindi gruppo con lista di adiacenza e alla fine diventa tutto un unico grafo...

potrebbe andare?

__________________
My Blog - My Photo Album


Posted by nas on 02-02-2009 13:08:

Originally posted by johnnyd
secondo me:

un gruppo è un profilo particolare con flag (gruppo = 1) e i componenti del gruppo non sono altro che delle associazioni profilo - profilo... quindi gruppo con lista di adiacenza e alla fine diventa tutto un unico grafo...

potrebbe andare?


io avevo pensato a un gruppo come struttura a parte con una struttura che punta ai suoi membri... ma forse la tua idea non è male... forse è proprio quello che voleva fare il prof....
e in questo modo si riescono a fare i vari algoritmi richiesti ???


Posted by johnnyd on 02-02-2009 13:22:

secondo me è la stessa cosa.... inoltre in questo modo si potrebbe calcolare un eventuale distanza anche profilo-gruppo per suggerire eventuali gruppi... anche se il progetto forse non lo chiede..

stasera spero di mettere mani sul codice... anche se ho tanta paura..... ehhe :D

__________________
My Blog - My Photo Album


Posted by nas on 02-02-2009 13:46:

Originally posted by johnnyd
secondo me è la stessa cosa.... inoltre in questo modo si potrebbe calcolare un eventuale distanza anche profilo-gruppo per suggerire eventuali gruppi... anche se il progetto forse non lo chiede..

stasera spero di mettere mani sul codice... anche se ho tanta paura..... ehhe :D


anche io non ho scritto ancora una linea di codice... spero di iniziare stasera... cmq è un delirio questo progetto...

ma siamo solo in due a farlo.... o tutti già sanno come si fa e quindi nessuno scrive?!?!?!?!?!?!?!?


Posted by Gehur on 02-02-2009 14:24:

non siete soli ragazzi..io stò pensando di implementare il progetto usando tabelle hash, un bel casino!


Posted by johnnyd on 02-02-2009 15:31:

In questi progetti nn siam mai soli. L onnipotente ci aiuterà.

__________________
My Blog - My Photo Album


Posted by Benny on 02-02-2009 16:48:

anch'io sto usando le tabelle hash, avevo provato con il progetto edilizia con risultati disastrosi, per ora il mio progresso è la gestione del main quasi completa, con tutti quei cavolo di comandi, implementati le struct necessarie, gli inserimenti semplici, eh me ne manca di roba..ma di tempo stavolta ne ho a yose, anche se non è mai abbastanza mannaia a morte:evil:..settimana prossima vado dal prof a capire le mie cazzate
anche voi usate quel maledetto dev-c++ di merda?ah un debug che va a caso, ma perchè non c'è mai un cazzo di buono in giro...

__________________
Se non credi in te stesso, chi ci crederà?


Posted by nas on 02-02-2009 18:31:

io uso un editor di testo normale....

come avete pensato di implentare la funzionalità "segnalazione di nuovi amici" ???


Posted by middu on 02-02-2009 18:55:

io avrei in mente una cosa : un insieme di profili può essere una lista


Posted by nas on 02-02-2009 19:28:

Originally posted by middu
io avrei in mente una cosa : un insieme di profili può essere una lista


cioè? non ho capito...


Posted by middu on 02-02-2009 19:34:

un profilo è una struttura
{
char *nick_utente;
char * status_utente;
}nodo;
a questo punto per stampare l'insieme dei profili registrati posso scorrere una lista di profili e quindi ho bisogno di qualche aiuto che possa implementare una lista di profili.
quindi la lista può essere rappresentata in questa maniera :

struct nodo lista_profili
{
struct nodo profilo;
nodo lista_profilo *next;
}


Posted by middu on 02-02-2009 19:37:

nodo profilo conterra il valore del profilo e un puntatore *next che punterà al nodo successivo


Posted by xSharKMaNx on 03-02-2009 19:10:

Originally posted by johnnyd
una richiesta di amicizia in teoria dovrebbe essere così:

amico_1
amico_2
amico_1_accettato
amico_2_accettato


o sbaglio?
se uno dei due viene meno si cancella la richiesta...

si portebbe avere una struttura a parte con tutte le richieste... magari una lista


Io ho pensato una struttura dove hai
Profilo_1
Profilo_2
Legame

Profilo_1 chiede amicizia a Profilo_2 Legame = 0
Profilo_2 accetta amicizia di Profilo_1 Legame = 1

Profilo_1 e Profilo_2 sono amici

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 03-02-2009 19:15:

una domanda alquanto banale... ma quando dice:

"Il programma deve leggere dallo standard input (stdin) una sequenza di righe (separate da \n), ciascuna delle
quali corrisponde a un comando. Quando un comando è letto, deve essere eseguito immediatamente. Le operazioni
di stampa sono effettuate sullo standard output (stdout), e ogni stampa deve iniziare su una nuova
riga"

Intende un file di testo, oppure riga di comando?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 03-02-2009 20:23:

Originally posted by johnnyd
secondo me:

un gruppo è un profilo particolare con flag (gruppo = 1) e i componenti del gruppo non sono altro che delle associazioni profilo - profilo... quindi gruppo con lista di adiacenza e alla fine diventa tutto un unico grafo...

potrebbe andare?


però a questo punto che struttura creeresti?

Profilo {
char *ute_nick;
char *ute_status;
int tipo;
char *grp_titolo;
}nodo;

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 03-02-2009 20:45:

Chi di noi non ha un account su Facebook :)
Bene... provate la teoria dei grafi :)
http://nexus.ludios.net/

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by johnnyd on 03-02-2009 22:20:

Originally posted by xSharKMaNx
però a questo punto che struttura creeresti?

Profilo {
char *ute_nick;
char *ute_status;
int tipo;
char *grp_titolo;
}nodo;

no no

Profilo {
char *identificativo;
char *stato;
int tipo;
}nodo;

l'identificativo può essere il titolo del gruppo o il nick del'utente...

__________________
My Blog - My Photo Album


Posted by xSharKMaNx on 03-02-2009 22:54:

Originally posted by johnnyd
no no

Profilo {
char *identificativo;
char *stato;
int tipo;
}nodo;

l'identificativo può essere il titolo del gruppo o il nick del'utente...


Tanto vale utilizzare due strutture, una per profili ed una per gruppi

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 03-02-2009 22:59:

quindi io creo due strutture una per profilo e una per gruppo. quella di profilo conterrà due campi che non sono altro che delle stringhe e un gruppo sarà rappresentato da un 'altra struttura che conterrà una stinga per contenere il titolo del gruppo. Poi si può creare una lista per rappresentare un insieme di profili, che è richiesto da un comando oppure un albero di ricerca binaria dove ogni nodo è un profilo. é giusta l'idea???


Posted by xSharKMaNx on 03-02-2009 23:02:

si, ma manca un particolare, nella struttura dell'utente dovrai indicare a quali gruppi l'utente ha aderito

In più ricordati che in entrambe le strutture dovrai inserire un puntatore al nodo successivo

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by hyperion on 04-02-2009 11:00:

Originally posted by xSharKMaNx
si, ma manca un particolare, nella struttura dell'utente dovrai indicare a quali gruppi l'utente ha aderito

In più ricordati che in entrambe le strutture dovrai inserire un puntatore al nodo successivo


da questa scelta dipenderà poi la logica con cui implementi tutte le altre funzioni...ovvero capire come rappresentare un gruppo non è una scelta banale...conviene prima guardarsi le funzioni che agiscono sui gruppi e poi usare la struttura più appropriata...


Posted by johnnyd on 04-02-2009 11:59:

Originally posted by hyperion
da questa scelta dipenderà poi la logica con cui implementi tutte le altre funzioni...ovvero capire come rappresentare un gruppo non è una scelta banale...conviene prima guardarsi le funzioni che agiscono sui gruppi e poi usare la struttura più appropriata...

con la struttura che ho descritto prima, quando si andranno le matrici di adicenza, basterà inserire l'arco per associare gruppo e utente...

__________________
My Blog - My Photo Album


Posted by hyperion on 04-02-2009 12:07:

Originally posted by johnnyd
con la struttura che ho descritto prima, quando si andranno le matrici di adicenza, basterà inserire l'arco per associare gruppo e utente...


si giusto..perchè consideri il gruppo come se fosse un amico,un profillo normale....perchè matrice?non è meglio liste di adiacenza?


Posted by johnnyd on 04-02-2009 12:20:

si liste...scusami :)

__________________
My Blog - My Photo Album


Posted by hyperion on 04-02-2009 12:24:

Originally posted by johnnyd
si liste...scusami :)


no non ti scusO!!ora sarai obbligato a morire di morte lenta e dolorosa facendo progetti di algoritmi per tutti gli studenti di info finchè vivrai!!!

XD

chiuso OT


Posted by xSharKMaNx on 04-02-2009 13:08:

Un concetto che mi sfugge...
All'inizio bisognerà creare un grafo vuoto, ma quanti vertici gli passo?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by johnnyd on 04-02-2009 13:19:

Originally posted by xSharKMaNx
Un concetto che mi sfugge...
All'inizio bisognerà creare un grafo vuoto, ma quanti vertici gli passo?

mhhh... tutti i profili? :)

__________________
My Blog - My Photo Album


Posted by xSharKMaNx on 04-02-2009 13:21:

Originally posted by johnnyd
mhhh... tutti i profili? :)


No questo è chiaro... ma all'inizio io creo il grafo vuoto, posso anche dichiarare 0 vertici ?

Poi nel momento in cui digito da riga di comando comincio ad inserire i nodi.

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by johnnyd on 04-02-2009 13:33:

penso di si, a meno che non fai come myspace... crei il primo utente TOM che sarà amico di tutti :)

__________________
My Blog - My Photo Album


Posted by xSharKMaNx on 04-02-2009 13:34:

perfetto :)
Grazie caro!

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 04-02-2009 22:06:

Maledetto C e la sua non gestione di stringhe!

Nel momento in cui bisognerà testare cosa scrive l'utente come reperite la stringa ?

Utilizzare la getchar e grazie isSpace inserire in 3/4 array di char le varie stringhe?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by green.riot on 05-02-2009 00:12:

urka

ciao a tutti anche io sto tentando di fare questo progetto anche se sarebbe meglio studiare un algoritmo per vincere le scommesse ai cavalli..

al momento io ho creato le seguenti strutture..


struct profile {
int ID;
char nickname[20];
char status[20];
int friends[100];
int groups[100];
};

struct group {
int ID;
char title[20];
int friends[100];
};

struct profile profiles[100];
struct group groups[100];


mi sto concentrando sul primo comando quello dell'inserimento profilo / modifica status e devo dire che sono bloccato alla ricerca di un profilo già esistente.

per l'inserimento pensavo di aggiungere ogni profilo in un vettore ordinato, così posso utilizzare la ricerca binaria.

vedendo il vostro codice mi sa che manca qualche puntatore.. stavo provando a passare l'indirizzo del vettore ad una funzione di ricerca ma con scarsi risultati.. non riesco ad accedere ai campi ;-/

critiche e suggerimenti sono ben accetti, avete in mente metodi più semplici per risolvere il problema?

conoscete programmatori ninja?

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by Gehur on 05-02-2009 07:40:

adesso non so come tu voglia implementare le varie strutture, ma ti posso dire (ad un primo sguardo senza ragionarci) di riguardare quello che hai fatto, le variabili(all'interno delle strutture) devono avere dimensione dinamica, non va bene dargli una dimensione fissa, secondo me ti conviene dare un ochhio alle soluzioni di progetti vecchi


Posted by xSharKMaNx on 05-02-2009 08:06:

Re: urka

Originally posted by green.riot
ciao a tutti anche io sto tentando di fare questo progetto anche se sarebbe meglio studiare un algoritmo per vincere le scommesse ai cavalli..

al momento io ho creato le seguenti strutture..

mi sto concentrando sul primo comando quello dell'inserimento profilo / modifica status e devo dire che sono bloccato alla ricerca di un profilo già esistente.

per l'inserimento pensavo di aggiungere ogni profilo in un vettore ordinato, così posso utilizzare la ricerca binaria.

vedendo il vostro codice mi sa che manca qualche puntatore.. stavo provando a passare l'indirizzo del vettore ad una funzione di ricerca ma con scarsi risultati.. non riesco ad accedere ai campi ;-/

critiche e suggerimenti sono ben accetti, avete in mente metodi più semplici per risolvere il problema?

conoscete programmatori ninja?


I puntatori mancanti che dici sono i puntatori che indicano i nodi seguenti di una lista di adiacenza, questo ovviamente se si prende la strada di utilizzare grafi e liste di adiacenze.

Come ti ha detto Gehur fai attenzione, in quanto la traccia del progetto dice espressamente che nickname dell'utente e status del gruppo devono avere dimensione arbitraria.

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by green.riot on 05-02-2009 09:17:

uuu

ok.. mi sa che ho fatto un bel casino.. ;-( questa sera provo a sistemare tutto.

ma quindi fatemi capire .. voi aggiungete alla struttura un nodo cioè un puntatore per accedere ai dati.. giusto?

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by Benny on 05-02-2009 13:06:

Originally posted by xSharKMaNx
Maledetto C e la sua non gestione di stringhe!

Nel momento in cui bisognerà testare cosa scrive l'utente come reperite la stringa ?

Utilizzare la getchar e grazie isSpace inserire in 3/4 array di char le varie stringhe?


ciao, io ho quasi risolto quel problema, che mi sono posto come primo scoglio, ho usato un paio di funzioni che sono na bellezza...il mio problema purtroppo ora è risolvere un'inizializzazione di un puntatore a char, mi spiego:
se io creo con
char *cmd1;
mi darà errore perchè non istanzio(si fa schifo:() la locazione del puntatore.
e ho fatto in questo modo:
char *cmd1 = malloc(sizeof(char));
il problema è che i stanno sempre fuffe incomprensibili e non le riesco a levare, quindi fa cacchiate..mo devo vedere se riesco a fare in un altro modo..o diventa problematica la questione

__________________
Se non credi in te stesso, chi ci crederà?


Posted by Benny on 05-02-2009 13:15:

oooooolllllllleeeeee, risolto..ecco con questo in poche ore finiro di gestire tutti i comandi e potro fare del testing, siii finalmente si ragiona

__________________
Se non credi in te stesso, chi ci crederà?


Posted by middu on 05-02-2009 15:26:

benny dimmi una cosa : io ho per il momento creato queste strutture : struct profilo
{
char *nome_utente;
char *status_utente;

};

struct gruppo
{
char *titolo_gruppo;
};


Posted by middu on 05-02-2009 15:26:

poi???


Posted by Benny on 05-02-2009 15:36:

purtroppo devo abbassare l'euforia, perchè il prof mi ha vietato una funzione..ora ti rispondo middu
dunque, quelle che hai creato sono solo le strutture fondamentali, ovvero che cavolo ci sta dentro profilo e gruppo.
ora devi scegliere che struttura dati implementare:
in ognuna di queste avrai da usare sicuramente dei puntatori, che saranno puntatori di tipo oggetto che hai creato tu es
dentro la struct profilo
profilo *nomepuntatore

e lo stesso per gruppo

gruppo *puntatore

ovviamente la scelta di quanti e quali puntatori dipende dalla struttura
io uso l'hash, per gli alberi dovrebbe essere
profilo *left
profilo *right
profilo *father
dipende da cosa decidi di fare..

__________________
Se non credi in te stesso, chi ci crederà?


Posted by hyperion on 05-02-2009 15:43:

Originally posted by Benny
purtroppo devo abbassare l'euforia, perchè il prof mi ha vietato una funzione..ora ti rispondo middu
dunque, quelle che hai creato sono solo le strutture fondamentali, ovvero che cavolo ci sta dentro profilo e gruppo.
ora devi scegliere che struttura dati implementare:
in ognuna di queste avrai da usare sicuramente dei puntatori, che saranno puntatori di tipo oggetto che hai creato tu es
dentro la struct profilo
profilo *nomepuntatore

e lo stesso per gruppo

gruppo *puntatore

ovviamente la scelta di quanti e quali puntatori dipende dalla struttura
io uso l'hash, per gli alberi dovrebbe essere
profilo *left
profilo *right
profilo *father
dipende da cosa decidi di fare..



di a tutti cosa il prof ti ha vietato di fare cosi magari potrebbe essere utile a tutti gli altri..grassie!


Posted by middu on 05-02-2009 15:45:

io vorrei fare una lista per contenere tutti i profili. Quindi devo crearmi una struttura che mi rappresenti il profilo come ti avevo scritto prima, poi mi devo creare un nodo che deve rappresentare il nodo della lista. Come dato dovrà quindi verrà inserito un profilo e un nodo puntatore.


Posted by middu on 05-02-2009 16:04:

poi avrei intenzione di mettere un puntatore ad una lista che servirà da traino per accedere all'insieme di membri che appartengono ad un determinato gruppo.


Posted by Benny on 05-02-2009 16:11:

middu una cosa tipo questa...
struct profilo
{
char *nome_utente;
char *status_utente;
profilo *next;
};
poi ti creerai ciò che ti serve nel main..
rispondo a hyperion:
usavo la funzione gets(char *c);
praticamente con questo gioiellino buttavo in c tutto quello che si scriveva fino all'invio, ovviamente il prof la ha vietata(deprecata) :)
lui consiglia sempre getchar, io non ce la faccio e uso scanf, ma ho dei problemi con le stringhe di caratteri, porca miseria

__________________
Se non credi in te stesso, chi ci crederà?


Posted by hyperion on 05-02-2009 16:56:

Originally posted by Benny
middu una cosa tipo questa...
struct profilo
{
char *nome_utente;
char *status_utente;
profilo *next;
};
poi ti creerai ciò che ti serve nel main..
rispondo a hyperion:
usavo la funzione gets(char *c);
praticamente con questo gioiellino buttavo in c tutto quello che si scriveva fino all'invio, ovviamente il prof la ha vietata(deprecata) :)
lui consiglia sempre getchar, io non ce la faccio e uso scanf, ma ho dei problemi con le stringhe di caratteri, porca miseria


eh si perchè nel testo del progetto scrive che deve essere ANSI compatibile...altrimenti in fase di compilazione su diversi compilatori (quello del prof che dovrà testartelo) magari non funge!
cmq domanda da un milione di dollari...ma se si usa un grafo per rappresentare i nodi (profili) al momento della creazione del grafo bisogna specificare il numero di nodi che il grafo ha e crearli il problema è che il testo del progetto dice non si può fare assunzioni sul numero massimo di profili (cioè bisogna non imporre dei vincoli)...idee?


Posted by green.riot on 05-02-2009 17:03:

ho letto su alcuni forum che gets è sconsigliata per un problema di buffer overflow .. io sto usando fgets.. si potrà usarla?! è come gets ma in un parametro aggiungi il limite massimo da leggere

per come creare la struttura spero di avere una rivelazione come la piccola pastorella ha avuto dalla Madonna a Lourdes

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by xSharKMaNx on 05-02-2009 18:48:

anch'io sto utilizzando fgets, per quanto riguarda il problema delle stringhe in input ho risolto utilizzando strtok.

In questa maniera si ha la possibilità di suddividere la stringa in input in più "token", i risultati gli inserite all'interno di un vettore, il primo elemento del vettore [0] conterrà la parola chiave, se è system significa che bisognerà eseguire un comando di sistema, altrimenti bisognerà eseguire un comando di profilo!

Buon Lavoro gente... e che Dio ci illumini! (devo anche vedere alcuni punti di teoria santa claus)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 05-02-2009 19:10:

OK


Posted by middu on 05-02-2009 19:23:

a questo punto mi creo delle funzioni che mi permettono di inserire un profilo attraverso una lista. Un gruppo sarà qualcosa di simile . Una struttura che conterrà anche una lista di tutti i profili presenti ed iscritti in un determinato gruppo


Posted by Gehur on 05-02-2009 19:24:

anche io oggi mi sono scontrato col main..cavolo è davvero un bel casino, si comunque sto progetto è bello lungo, io devo implementare un sacco di funzioni

per la cronaca come strutture dati uso hash, liste e alberi..
mi sta aiutando parecchio l'esempio sulle tabelle hash che si trova sul sito algoteam, l'implementazione di un dizionario


Posted by middu on 05-02-2009 19:43:

hai il sito
???


Posted by hyperion on 05-02-2009 19:50:

Originally posted by middu
hai il sito
???


comunque per me la soluzione migliore è una lista!!!!fai una lista di tutti i profili disordinata e bohm!!non sarà efficiente ma pazienza XD


Posted by xSharKMaNx on 05-02-2009 19:55:

Prego gente!

http://www.algoteam.dsi.unimi.it/im...codici/hash.txt

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 05-02-2009 20:00:

Originally posted by hyperion
comunque per me la soluzione migliore è una lista!!!!fai una lista di tutti i profili disordinata e bohm!!non sarà efficiente ma pazienza XD


L'importante è che sia efficiente per riuscire a passare l'esame :)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 05-02-2009 20:02:

quindi i profili li si crea con una tabella hash quindi???


Posted by xSharKMaNx on 05-02-2009 20:07:

Originally posted by middu
quindi i profili li si crea con una tabella hash quindi???


è una scelta che dovrai prendere tu, come si dice "tutte le strade portano a RoccaCannuccia" :)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 05-02-2009 20:08:

quindi la struttura del profilo è questa:

struct profilo
{ /* rappresenta un profilo della lista */
char *nick_name; /* punta alla parola che identifica il nome utente */
char *staus_utente /* punta alla parola che identifica lo status dell'utente */
struct element *next; /* prossimo elemento della lista */
struct element *prev; /* elemento precedente */
};


Posted by xSharKMaNx on 05-02-2009 20:10:

Ma cosa stai utilizzando? Grafi

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by middu on 05-02-2009 20:13:

sto guardando quello che hai linkato. però penso che sia sbagliato !!!!


Posted by middu on 05-02-2009 20:13:

come dici di farlo???


Posted by middu on 05-02-2009 20:16:

pardon :
struct profilo
{
/* rappresenta un profilo della lista */
char *nick_name; /* punta alla parola che identifica il nome utente */
char *staus_utente /* punta alla parola che identifica lo status dell'utente */
struct element *next; /* prossimo elemento della lista */
};


Posted by Gehur on 05-02-2009 20:16:

io sto provando a fare il progetto con le hash quasi esclusivamente per risolvere in maniera efficiente la funzione consiglia nuovi amici..

se voi avete trovato una soluzione efficiente con le liste o coi grafi o altro usate quelle..per dire qui parlate di grafi, io non ci ho pensato minimamente(e non perchè ineficciente, non mi è venuto in mente)


Posted by hyperion on 05-02-2009 20:16:

ma usando grafi non c'è il problema nell'allocazione del'array di puntatori?perchè deve essere di una dimensione data però non so quanti profili avro!!


Posted by middu on 05-02-2009 20:20:

i profili come possono essere rappresentati in tabelle hash???


Posted by hyperion on 05-02-2009 20:23:

Originally posted by middu
i profili come possono essere rappresentati in tabelle hash???



ma con la tabella hash (dalla definizione) hai un numero di chiavi che vengono associate alla tavola hash con un indice...la funzione hash determine a quale indice associare quale chiave!il vantaggio è che nel caso medio in tempo praticamente costante puoi effettuare ricerche,inserimenti e cancellazioni....in effetti mi chiedo come vedere il progetto in temrini di tabella hash...non è cosi intuitivo forse come usare un grafo..però magari è meglio


Posted by middu on 05-02-2009 20:36:

lo so io ho fatto una cosa del genere :
struct profilo
{ /* rappresenta un profilo della lista */
char *nick_name; /* punta alla parola che identifica il nome utente */
char *staus_utente; /* punta alla parola che identifica lo status dell'utente */
struct element *next; /* prossimo elemento della lista */

};

/* una funzione che mi crea dinamicamente un vettore di char che contiene
la parola nick_name e restituisce un puntatore al vettore creato */

char *crea_nick(char *word)
{
char *w;
w= calloc(strlen(word),sizeof(char));
strcpy(w,word);
return w;
}


Posted by middu on 05-02-2009 20:38:

la funzione cosa fa data una parola che rappresenta il nick, crea un array di caratteri che dovrà contenere una parola che rappresenta il nome utente


Posted by green.riot on 06-02-2009 01:12:

ho letto http://www.algoteam.dsi.unimi.it/im...codici/hash.txt

ma copio dal testo:


Si noti che per realizzare una tabella hash e' fondamentale che la dimensione
della tabella possa essere modificata a piacere senza dover modificare la
definizione della funzione hash. In questo caso basta cambiare il valore di
HASHSIZE e ricompilare il programma.

#define HASHSIZE 5000 /* dimensione della tabella hash */


quindi non ho la possibilià aggiungere 5001 profili, ma dovrò in ogni caso ricompilare i sorgenti per farlo .. -.-'' o sbaglio?

a questo punto meglio i grafi .. la soluzione delle liste mi sembra inefficiente

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by middu on 06-02-2009 08:20:

siccome devo avere dei nomi utenti univoci devo ho creato una funzione che permette di verificare se il nome o nick di un utente è uguale lessograficamente ad uno di dei nick presenti in lista. E' giusto come ragionamento???


Posted by hyperion on 06-02-2009 08:22:

Originally posted by green.riot
ho letto http://www.algoteam.dsi.unimi.it/im...codici/hash.txt

ma copio dal testo:



quindi non ho la possibilià aggiungere 5001 profili, ma dovrò in ogni caso ricompilare i sorgenti per farlo .. -.-'' o sbaglio?

a questo punto meglio i grafi .. la soluzione delle liste mi sembra inefficiente


esatto.!se è cosi allora non puoi fare assunzioni sul numero di profili....ma anche nella creazion di un grafo devi specificare il numero di nodi per alocare l'array di puntatori!!un grafo dinamico non l'ho mai visto..


Posted by darkshadow on 06-02-2009 09:00:

 

Raga qui state andando in paranoia totale inutilmente!


@ green.riot


se proprio vuoi usare le tabelle hash metti come HASHSIZE MAX_INT cosi vai sul sicuro tanto + profili di quelli non puoi inserire visto che è il limite degli interi.

Forse ti starai chiedendo "ma non è spreco di spazio definire la hash table con MAX_INT" in realtà non sprechi molto spazio perchè se non contiene nessun elemento la tua tabella ha solo dei puntatori!! quindi direi che lo spreco è minimo.


@ hyperion


prima di tutto non so dove avete visto che per creare un grafo bisogna indicare il numero di vertici che conterrà. mah!!
qui ci sono un sacco di progetti (tra i quali i miei) che fanno uso di grafi a volontà :D , e ti assicuro che non è necessario sapere il numero di nodi del grafo.


@ per tutti

Tabelle hash o grafi?
dipende di come vi trovate meglio.
inoltre con le tabelle hash avete il limite imposto dal tipo di dati intero mentre con i grafi non avete nessun limite ( tranne che quello della memoria RAM :D )


ciao e buon progetto a tutti!!



DS.

__________________
by Ð@rk§h@ÐØw


Posted by xSharKMaNx on 06-02-2009 10:03:

Grazie dark per il contributo ;)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by johnnyd on 06-02-2009 10:23:

dark avanzi una birra

__________________
My Blog - My Photo Album


Posted by nas on 06-02-2009 18:35:

leggendo i vostri post mi sono venuti 2 dubbi:
1 - ma i comandi bisogna leggerli da tastiera o file ????
2 - come avete pensato di fare l'algoritmo per suggerire nuovi amici a un utente ???


Posted by green.riot on 06-02-2009 20:45:

Red face

grazie dark per i suggerimenti, ritorno sui miei passi vai di grafo con liste

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by Benny on 06-02-2009 21:35:

scusate, ma io sono da giorni che impazzisco per l'input, sto input di lunghezza arbitraria, mi sta facendo schizzare le vene fuori dalla testa..da tutte le prove che ho potuto fare, non posso ottenere piu di tanto, al max 4 o 5 parole dipende dall'archiettura della cpu e anche la loro lunghezza non e mica infinita..ora che ho raggiunto lo scopo, proseguiro, che di test ce ne sono e il tempo non e eterno ragazzi/e tutto questo mi ricorda statistica, e ne devo buttare di sangue come disse qualcuno..

__________________
Se non credi in te stesso, chi ci crederà?


Posted by middu on 07-02-2009 08:39:

io avrei intenzione di crearmi una lista per i profili e per i gruppi un grafo, dove ogni gruppo punterà alla lista di tutti i profili che sono iscritti a quel gruppo


Posted by nas on 07-02-2009 10:47:

Originally posted by nas
leggendo i vostri post mi sono venuti 2 dubbi:
1 - ma i comandi bisogna leggerli da tastiera o file ????
2 - come avete pensato di fare l'algoritmo per suggerire nuovi amici a un utente ???


nessuno che mi risponde ???


Posted by hyperion on 07-02-2009 10:53:

Originally posted by nas
nessuno che mi risponde ???


1)da tastiera..anche perchè è specificato stdinput nel testo del progetto
2)dipende che strutture dati usi...


Posted by nas on 07-02-2009 11:08:

Originally posted by hyperion
1)da tastiera..anche perchè è specificato stdinput nel testo del progetto
2)dipende che strutture dati usi...


grazie!
uso un grafo fatto con un albero RB e liste di adiacenza


Posted by elex1984 on 07-02-2009 17:36:

Ciao raga,
come siete messi con il progetto??? Io direi male :-(


Posted by green.riot on 07-02-2009 18:27:

allora benvenuto sei dei nostri :-)

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by Gehur on 07-02-2009 21:40:

pure io vi faccio compagnia..ho il progetto che mi sfonda la memoria cavolo, ed è solo prima funzione di inserimento..siamo spacciati..


Posted by BeppeGoal on 07-02-2009 21:45:

Quesito tecnico... ma se uno tenta il progetto del 18, e (grattatina) non andasse bene, può fare quello dell'8 marzo anche se il progetto non differisce di molto? (beh insomma...)
Secondo voi?
Grazie e buon lavoro a tutti!


Posted by Gehur on 07-02-2009 22:02:

anche io ci ho pensato, credo di si comunque


Posted by middu on 08-02-2009 21:14:

Io ho in mente di rappresentare un gruppo con un grafo. Ogni nodo del grafo conterrà la descrizione del gruppo e un puntatore ad una lista ordinata che conterrà tutti i profili iscritti in quel gruppo. L'idea vi piace ??? Per il momento è questa la mia idea del gruppo. Per contenere tutti i profili, invece ho pensato di utilizzare una lista ordinata. é Buona l'idea???


Posted by iuz-lab on 09-02-2009 02:15:

io ho scelto questa soluzione (vedi allegato)..

scusate se non si capisce un c***o ma non sono un grande scrittore..


Posted by Gehur on 09-02-2009 14:14:

si ma poi riesci ad implementare il tutto?? io ho problemi con l'inserimento del profilo nella tabella hash, ho anche capito il problema ma non riesco a risolverlo, e dire che è una cavolata(e il tempo stringe!)


Posted by nas on 09-02-2009 18:45:

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" ???


Posted by green.riot on 09-02-2009 22:59:

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 :shock:

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)


Posted by green.riot on 10-02-2009 00:33:

ops come non detto si può -.-'' scusate

__________________
Tutti gli uomini sono mortali.
Socrate era mortale.
Dunque, tutti gli uomini sono Socrate.
(Woody Allen)


Posted by iuz-lab on 10-02-2009 00:36:

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..


Posted by Benny on 10-02-2009 10:55:

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à?


Posted by Gehur on 10-02-2009 11:24:

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


Posted by Benny on 10-02-2009 13:20:

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à?


Posted by darkshadow on 10-02-2009 13:25:

 
magari farlo puntare a NULL??

__________________
by Ð@rk§h@ÐØw


Posted by Benny on 10-02-2009 22:24:

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à?


Posted by darkshadow on 10-02-2009 22:30:

 

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


Posted by iuz-lab on 10-02-2009 22:47:

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?!?!)


Posted by iuz-lab on 10-02-2009 23:02:

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..


Posted by Joy88 on 11-02-2009 11:45:

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*


Posted by darkshadow on 11-02-2009 12:04:

 
ma perchè ti 6 fatto la VM?? guarda che c'è gcc anche per winzokz!!

__________________
by Ð@rk§h@ÐØw


Posted by Joy88 on 11-02-2009 12:08:

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*


Posted by darkshadow on 11-02-2009 12:41:

 
sul sito di aguzzoli c'è gcc per win. decomprimi la cartella e poi da riga di comando vai nella cartella e digiti gocs che ti setta le variabili d'ambiente e poi il resto è uguale a gcc in linux.

__________________
by Ð@rk§h@ÐØw


Posted by Joy88 on 11-02-2009 12:49:

Ti ringrazio Darkshadows!!!
Adesso ci provo..!!
Ti citerò nei ringraziamenti del progetto!!!
:cool:
ihihih!!!

__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."

*Dante*


Posted by Benny on 11-02-2009 23:38:

iuz-lab ci ho capito poco di tutto quello che hai detto, anche perchè io prima usavo l'originale gets e il prof me lo aveva vietato, cosi sono passato alla scanf, e tutto andava bene ma siccome devo prendere un input con spazi bianchi e quindi ho usato strcat per aggiungerli, mi fa un casino non indifferente..in pratica credo che con la scanf il puntatore venga sovrascritto normalmente, ma nel caso io usi la strcat, sovrascriva solo l'ultimo puntatore, e presto si riempira del tutto lasciando il vecchio contenuto quasi intatto...continuo a provare a ripulire il puntatore, ma perdo tempo per sta cosa..
ti ringrazio per l'interesse, pero non posso copiare il tuo codice o il prof mi fa il culo quando lo vede

__________________
Se non credi in te stesso, chi ci crederà?


Posted by iuz-lab on 12-02-2009 02:15:

allora vedo di essere piu' chiaro..

l'obiettivo è dividere una stringa in modo particolare.. nello specifico (per nick n st):
<spazi bianchi> <nick> <spazi bianchi> <char 'n'> <spazi bianchi> <st>

per farlo il c ti mette a disposizione diverse funzioni utili.. gets e strtok sono quelle che ci interessano..

char *gets(char *s);
Reads next line from stdin into s. Replaces terminating newline with '\0'. Returns s, or NULL on end-of-file or error.
e qui ci troviamo di fronte al problema dell'overflow che puoi risolvere usando readstring (ammesso che io abbia capito quello che dovrebbe fare readstring.. magari mi sto' sbagliando) o la funzione che ho postato o una funzione equivalente..

char* strtok(char* s, const char* ct);
A sequence of calls to strtok returns tokens from s delimited by a character in ct. Non-NULL s indicates the first call in a sequence. ct may differ on each call. Returns NULL when no such token found.
questa funzione è una manna per leggere stringhe del tipo nick n st..
in pratica la prima volta che la chiamiamo gli passiamo come primo parametro il nome della stringa da esaminare e nelle successive chiamate gli passiamo NULL, mentre come secondo parametro gli indichiamo un set di caratteri che funzionano da delimitatori..

per esempio:

code:
char *string = "123 456 789"; char *part; part = strtok(string, " "); do { printf("-- %s --\n", part); } while (part = strtok(NULL, " ") != NULL);


stamperà:
code:
-- 123 -- -- 456 -- -- 789 --


questo pero' non è il comportamento che volevamo.. per noi dopo il secondo token "tutto fa brodo"..
ma strtok ci mette in condizione di cambiare i caratteri delimitatori del token ad ogni chiamata..
quindi possiamo scrivere un codice del tipo:
code:
char *string = "bob n i hate facebook"; char *nickname, *action, *status; nickname = strtok(string, " "); action = strtok(NULL, " "); status = strtok(string, ""); // NOTA CHE NON HO DATO ALCUN CARATTERE DELIMITATORE printf("--%s--", nickname); printf("--%s--", action); printf("--%s--]", status);


visto che nell'ultima chiamata a strtok non ho messo delimitatori strtok mi ritornerà il resto della stringa (che è il comportamento desiderato)..

quindi l'ouput sarà:
code:
--bob-- --n-- -- i hate facebook--


ora, come puoi vedere, siamo vicinissimi alla soluzione.. dico vicinissimi perchè cambiare il set di delimitatori nella terza strtok ci ha fatto prendere come stringa di status " i hate facebook" (nota lo spazio iniziale) invece di "i hate facebook"..

per risolvere puoi usare la funzione strspn..
size_t strspn(const char* cs, const char* ct);
Return length of prefix of cs consisting entirely of characters in ct.

questa funzione non te la spiego.. perchè iniziano a sanguinarmi gli occhi :-D ma la puoi sfruttare per scriverti una funzione ltrim in C..

ricapitolando:
code:
char *line; char *nick, *status, *action, *string1; while(line = gets() != NULL) { // qui usa una funzione sicura ma equivalente a gets string1 = strtok(line, " "); // questo è il primo token (non so come chiamarlo finche //non conosco l'azione da intraprendere.. //e questo lo posso capire solo esaminando il secondo token nello switch) action = strtok(NULL, " "); switch(action[0]) { // ... case 'n': nick = string1; // adesso che so che la funzione è 'n' ho capito che il // primo token rappresentava il nickname status = strtok(NULL, ""); // qui ci finirà "status" con eventuali spazi iniziali // elimino gli spazi iniziali (e magari anche finali) da status // faccio le mie sporche operazioni con nick e status break; // ... } }


spero di essere stato sufficientemente chiaro (dubito)..

ciao,
iuz


Posted by iuz-lab on 12-02-2009 02:20:

Originally posted by Benny io prima usavo l'originale gets e il prof me lo aveva vietato, cosi sono passato alla scanf [/B]


sia gets che scanf soffrono degli stessi problemi.. vanno evitate entrambe :-P

se le usi non sei in grado di rispettare il vincolo del progetto che dice "non devono esistere limiti alla lunghezza massima di una stringa" o qualcosa del genere (il succo comunque era quello)..

scriviti una funzione gets sicura e sei a posto..

ne trovi mille implementazioni gia' pronte in rete (probabilmente anche nei progetti passati) oltre quella che ho gia' lasciato nel post di ieri (era ieri?!?)..


Posted by xSharKMaNx on 12-02-2009 08:05:

Grande iuz-lab ... è esattamente ciò che ho fatto ;)
ma la fgets si potrà utilizzare ?

ieri sera leggendo tutti i i punti del progetto ho notato:


Per semplicità si suppone che l’input sia sempre conforme alle specifiche delle Tabelle 1,2,3 e 4, per cui
non è necessario controllare la correttezza dell’input. Per leggere l’input si usino le funzioni standard
ANSI C getchar() e/o scanf().

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Joy88 on 12-02-2009 09:17:

Ragazzi io sto implementando tutto tramite liste..
Ma avete pensato a come fare per i gradi di separazione?? :?
Non so proprio dove sbatter la testa..

__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."

*Dante*


Posted by Gehur on 12-02-2009 09:57:

be io conto tutti gli amici che ho, e ci levo 1..

quindi se ho 3 mici nella lista amici, il grado di separazione sarà 2, se ho solo 1 amico, sarà infinito..

il fatto è che non sono sicuro di aver capito la specifica :D

ma qualcuno è riuscito a finirlo il progetto??


Posted by Joy88 on 12-02-2009 10:03:

No aspetta x il grado di separazione io l'ho inteso così:
A amico di B amico di C amico di D
tra A e B il grado è 1
tra A e C il grado è 2
tra A e D il grado è 3

se avessi:
A amico di B amico di C amico di D e E amico di F
tra A e E il grado è infinito
tra A e F il grado è infinito
:shock:
..Ho capito male io??? :?

__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."

*Dante*


Posted by Gehur on 12-02-2009 10:29:

quindi tu dici se non sono amici grado infinito,altrimenti se sono amici conta quante persone ci sono tra loro 2

e bo..io non ho capito molto bene il testo, dovrei rileggerlo ma adesso sono in sbatta per far funzionare il tutto correttamente, al max il grado di separazione lo ricalcolo, non mi sembra il problema più grosso..


Posted by Joy88 on 12-02-2009 10:35:

Originally posted by Joy88
No aspetta x il grado di separazione io l'ho inteso così:
A amico di B amico di C amico di D
tra A e B il grado è 1
tra A e C il grado è 2
tra A e D il grado è 3

se avessi:
A amico di B amico di C amico di D e E amico di F
tra A e E il grado è infinito
tra A e F il grado è infinito
:shock:
..Ho capito male io??? :?


Ma guarda che nel mio esempio A è amico di B ma NON di C e D..
Per quello mi sembra difficile.. tutti gli amici di A hanno grado 1 gli amici degli amici di A (che non sono miei amici) hanno grado 2, gli amici degli amici degli amici di A (non miei amici) hanno grado 3 ecc..
Ho paura di una funzione ricorsiva infinita!!!!
:twisted:

__________________
"Amor, ch’a nullo amato amar perdona, mi prese del costui piacer sì forte che, come vedi, ancor non m’abbandona."

*Dante*


Posted by Gehur on 12-02-2009 11:39:

io alla prima lettura l'avevo interpretata così:
system ! nick nick2
nick e nick 2 devono essere amici, se sono amici conta quante persone ci sono nella lista amici di nick, se è presente solo nick2 fai grado infinito..

ripeto dovrei rileggerla visto che ho dubbi su come l'ho compresa


Posted by iuz-lab on 12-02-2009 16:01:

Originally posted by xSharKMaNx
ma la fgets si potrà utilizzare ?


beh, se usata bene, fgets è sicura.. mentre scanf no..

visto che il docente aveva proibito l'uso di fgets (non è che la abbia proprio proibita.. ma tant'è) io ho (come vedi dai post precedenti) scritto una funzione safe_gets che lavora con stringhe di lunghezza arbitraria e funziona grazie alla funzione getchar (che, al contrario di fgets, il docente dice di usare)

comunque non credo sia un problema.. meglio una fgets di una scanf..


Posted by nas on 13-02-2009 08:27:

ragazza ma è sufficiente che il progetto compilato con
gcc -o faccialibro faccialibro.c
non dia nessun errorre o warning o bisogna compilarlo con le opzioni -ansi e -pedantic e quindi
gcc -o -ansi -pedantic faccialibro faccialibro.c

???????


Posted by nas on 13-02-2009 08:28:

Originally posted by nas
ragazza ma è sufficiente che il progetto compilato con
gcc -o faccialibro faccialibro.c
non dia nessun errorre o warning o bisogna compilarlo con le opzioni -ansi e -pedantic e quindi
gcc -o -ansi -pedantic faccialibro faccialibro.c

???????

uhm... volevo dire ragazzi!


All times are GMT. The time now is 03:15. Pages (3): [1] 2 3 »
Show all 417 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.