Homepage  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


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
Pages: [1] 2 3 4 5 
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

johnnyd
damose una mano,...volemose bene :D

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

ecco alcune info utili ;)

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)

middu
non va per nulla

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;

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

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;
};

middu
poi???

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
OK

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

middu
hai il sito
???

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
Prego gente!

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

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

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate