 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
Progetto "FACCIALIBRO" Clicca QUI per vedere il messaggio nel forum |
Benny |
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: |
middu |
io sto tentando di farlo. Un profilo è una struttura di due campi |
johnnyd |
: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 |
Benny |
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 |
middu |
io rappresentere l'insieme dei profili mediante una lista di nodi |
xSharKMaNx |
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! |
johnnyd |
l'hash map come la vedete per la lista dei profili? |
middu |
bho
quindi si può rappresentare un profilo in questa maniera :
struct profilo
{
char *nick;
char *status;
}nodo_profilo; |
johnnyd |
mentre per il fatto di dijkstra basta dare peso 1 a tutti i nodi? |
middu |
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; |
middu |
A questo punto dobbiamo creare una funzione che inserisca un nodo all'interno di una lista ordinata. |
middu |
l'insieme dei profili può essere rappresentato con un albero binario??? |
xSharKMaNx |
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) |
Benny |
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 |
Garet |
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 -__-' |
johnnyd |
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.... |
johnnyd |

comunque con touchgraph possiamo farci un'idea... |
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.. |
hyperion |
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.. |
johnnyd |
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? |
hyperion |
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.. |
nas |
ragazzi, una domanda: ma tra i comandi da implementare non esiste un comando per l'inserimento dei profili ???? |
hyperion |
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 |
nas |
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 ??? |
johnnyd |
mhhh.. penso di si... le richieste di amicizia in che struttura andrebbero salvate? |
hyperion |
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.. |
hyperion |
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. |
nas |
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.... |
johnnyd |
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 |
nas |
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 ??? |
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? |
nas |
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 ??? |
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 |
nas |
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?!?!?!?!?!?!?!? |
Gehur |
non siete soli ragazzi..io stò pensando di implementare il progetto usando tabelle hash, un bel casino! |
johnnyd |
In questi progetti nn siam mai soli. L onnipotente ci aiuterà. |
Benny |
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... |
nas |
io uso un editor di testo normale....
come avete pensato di implentare la funzionalità "segnalazione di nuovi amici" ??? |
middu |
io avrei in mente una cosa : un insieme di profili può essere una lista |
nas |
Originally posted by middu
io avrei in mente una cosa : un insieme di profili può essere una lista
cioè? non ho capito... |
middu |
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;
} |
middu |
nodo profilo conterra il valore del profilo e un puntatore *next che punterà al nodo successivo |
xSharKMaNx |
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 |
xSharKMaNx |
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? |
xSharKMaNx |
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; |
johnnyd |
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... |
xSharKMaNx |
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 |
middu |
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??? |
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 |
hyperion |
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... |
johnnyd |
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... |
hyperion |
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? |
johnnyd |
si liste...scusami :) |
hyperion |
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 |
xSharKMaNx |
Un concetto che mi sfugge...
All'inizio bisognerà creare un grafo vuoto, ma quanti vertici gli passo? |
johnnyd |
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? :) |
xSharKMaNx |
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. |
johnnyd |
penso di si, a meno che non fai come myspace... crei il primo utente TOM che sarà amico di tutti :) |
xSharKMaNx |
perfetto :)
Grazie caro! |
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? |
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..
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? |
Gehur |
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 |
xSharKMaNx |
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. |
green.riot |
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? |
Benny |
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 |
Benny |
oooooolllllllleeeeee, risolto..ecco con questo in poche ore finiro di gestire tutti i comandi e potro fare del testing, siii finalmente si ragiona |
middu |
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;
}; |
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.. |
hyperion |
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! |
middu |
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. |
middu |
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. |
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 |
hyperion |
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? |
green.riot |
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 |
xSharKMaNx |
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) |
middu |
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 |
Gehur |
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 |
hyperion |
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 |
xSharKMaNx |
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 :) |
middu |
quindi i profili li si crea con una tabella hash quindi??? |
xSharKMaNx |
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" :) |
middu |
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 */
}; |
xSharKMaNx |
Ma cosa stai utilizzando? Grafi |
middu |
sto guardando quello che hai linkato. però penso che sia sbagliato !!!! |
middu |
come dici di farlo??? |
middu |
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 */
}; |
Gehur |
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) |
hyperion |
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!! |
middu |
i profili come possono essere rappresentati in tabelle hash??? |
hyperion |
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 |
middu |
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;
} |
middu |
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 |
green.riot |
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 |
|
|
|
|