.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 Bloom on 22-02-2009 13:45:

Io lo consegno a marzo perche lavorando non ho molto tempo per studiare


Posted by Shaper on 22-02-2009 13:46:

Originally posted by Bloom
Ma non è più semplice avere un albero rb per i profili e per ogni profilo avere una lista di adiacenza?
Oppure anche accoppiata grafo/liste può andare bene secondo me


Beh, io l'avevo pensato così perchè, dal momento che dovrò scansire piuttosto spesso la lista di amici, usando un abero rb velocizzerei l'operazione...
Però in alternativa potrei anche fare una albero per i profili e, separatamente, un array con liste di adiacenza, contenente puntatori ai nodi del grafo..
Però anche in questo modo mi pare un po' contorto..

__________________
Eidolon64|Blog


Posted by Bloom on 22-02-2009 13:48:

Beh...il progetto è un pochetto contorto :-D


Posted by hyperion on 22-02-2009 13:50:

Originally posted by Joy88
Sì forse hai ragione..
per ogni profilo faccio una lista di amici..
così la lista rientrerebbe come campo del profilo..
Mi sembra + facile..!!!
Grazie!!
Bloom com'è andato il tuo progetto???


per l'albero delle amicizie fai esattamente quello che faresti se usassi una lista di adiacenza...come ha detto già bloom hai il tuo nodo e nel nodo un puntatore all'albero delle amicizie del nodo...
se usi le liste fai lo stesso..solo che invece che avere un puntatore ad un rb hai un puntatore ad una lista


Posted by hyperion on 22-02-2009 13:51:

Originally posted by Shaper
Beh, io l'avevo pensato così perchè, dal momento che dovrò scansire piuttosto spesso la lista di amici, usando un abero rb velocizzerei l'operazione...
Però in alternativa potrei anche fare una albero per i profili e, separatamente, un array con liste di adiacenza, contenente puntatori ai nodi del grafo..
Però anche in questo modo mi pare un po' contorto..


dikstra non ti serve secondo me....al massimo potresti usarlo assegnando ad ogni collegamento tra nodi peso unitario...cioè sarebbe un inutile spreco e ti complichi di più la vita...fai una semplice bfs!


Posted by Shaper on 22-02-2009 13:51:

Originally posted by Bloom
Beh...il progetto è un pochetto contorto :-D


Sì, effettivamente non si cava sangue dalle rape! :D
Alla fine fino ad ora io l'ho fatto esattamente nel modo che hai consigliato a Joy un paio di post fa, adesso devo solo capire come infilarci quel maledetto grado di separazione!! :evil:

__________________
Eidolon64|Blog


Posted by hyperion on 22-02-2009 13:55:

Originally posted by Joy88
Ho un albero x i profili..
e x ogni nick voglio fare un albero degli amici di nick (ponendo nick come radice)..
Bloom esattamente quello che hai detto..!!
Però come posso accedere ad un albero con radice pietro +ttosto che uno con radice carlo??

..in alternativa.. dici di fare in un altro modo??


i tuoi nodi avranno un campo puntatore ad un Rb generico....quando crei cioè aggiungi un profilo,crei il nodo nell rb principale e poi allochi lo spazio per i sottoalberi!
tipo:

void crea_profilo{

.......


rbtree* albero_amicici = nuovo_albero();

.......

}

dove nuovo_albero crea un nuovo rb e restituisce puntatore alla radice...in questo modo il tuo campo albero_amicici di ogni nodo/profilo punterà ad una radice di un sottoalbero



quindi facendo uan ricerca nel rb principale ottieni il profilo tizio..e per scorrere il sottoalbero degli amici semplicemente sai che hai un campo alber_amici che punta al sottoalbero delle amicizie...le operazioni normali come inserimento/cancellazione di un amico le fai utilizzando come radice proprio albero_amicici


Posted by Gehur on 22-02-2009 15:13:

Originally posted by Joy88
Ho un albero x i profili..
e x ogni nick voglio fare un albero degli amici di nick (ponendo nick come radice)..
Bloom esattamente quello che hai detto..!!
Però come posso accedere ad un albero con radice pietro +ttosto che uno con radice carlo??

..in alternativa.. dici di fare in un altro modo??


io non userei nick come radice dell'albero amici, quando inserisci un nuovo profilo metti il campo amici a NULL, quando devi inserire un nuovo amico, come radice avrai il campo amici del profilo,ovviamente amici deve essere un tipo nodo albero

quando dovrai cercare un amico di nick, basta fare una ricerca partendo da nick->amici..sempre usando strcmp visto che sono stringhe


Posted by Shaper on 22-02-2009 18:57:

Originally posted by Gehur
io non userei nick come radice dell'albero amici, quando inserisci un nuovo profilo metti il campo amici a NULL, quando devi inserire un nuovo amico, come radice avrai il campo amici del profilo,ovviamente amici deve essere un tipo nodo albero

quando dovrai cercare un amico di nick, basta fare una ricerca partendo da nick->amici..sempre usando strcmp visto che sono stringhe


..o in alternativa il campo amici è un puntatore a un albero contenente gli amici dell'utente nick. Io di primo acchito l'ho pensato così..

__________________
Eidolon64|Blog


Posted by hyperion on 22-02-2009 19:02:

Originally posted by Shaper
..o in alternativa il campo amici è un puntatore a un albero contenente gli amici dell'utente nick. Io di primo acchito l'ho pensato così..


per forza..che tu lo faccia con liste o alberi..


Posted by Shaper on 22-02-2009 19:10:

Originally posted by hyperion
per forza..che tu lo faccia con liste o alberi..


Sì certo, ho detto una cosa piuttosto inutile, era solo una puntualizzazione sul tipo del campo.. Il concetto comunque è chiaro..:-D

__________________
Eidolon64|Blog


Posted by Gehur on 22-02-2009 19:48:

ecco si,è quello che intendevo

piuttosto qualcuno mi sa dire cosa serve il campo predecessore nell'algoritmo di visita grafo in ampiezza bfs.. ho buttato una bozza in C dell'algoritmo presente sul libro a pg 455, ma non ho usato il capo pigreco, non ne vedo l'utilità..


Posted by Bloom on 23-02-2009 08:23:

Ciao A tutti,
nell'input di esempio del progetto c'è scritto "System" a posto di "system".
Ho mandato un'email al professore e mi ha detto che tutti i comandi iniziano con la lettera minuscola(quindi "system")

Ciao
Laura


Posted by Shaper on 23-02-2009 08:40:

Originally posted by Bloom
Ciao A tutti,
nell'input di esempio del progetto c'è scritto "System" a posto di "system".
Ho mandato un'email al professore e mi ha detto che tutti i comandi iniziano con la lettera minuscola(quindi "system")

Ciao
Laura


Grazie dell'avvertimento! :approved:

__________________
Eidolon64|Blog


Posted by Bloom on 23-02-2009 08:44:

Originally posted by Shaper
Grazie dell'avvertimento! :approved:


di nada
Dovere :-D


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

Originally posted by Gehur
ecco si,è quello che intendevo

piuttosto qualcuno mi sa dire cosa serve il campo predecessore nell'algoritmo di visita grafo in ampiezza bfs.. ho buttato una bozza in C dell'algoritmo presente sul libro a pg 455, ma non ho usato il capo pigreco, non ne vedo l'utilità..



allora come fai ad incrementare la distanza?!dovrai implementare una cosa del genere....visita la lista amici di X se Y non è visitato allora metti in coda e aincrementa la sua distanza cioè distanza_di_y = distanza_di_X + 1.........


Posted by Gehur on 23-02-2009 09:29:

adesso lo riguardo


Posted by Gehur on 23-02-2009 10:52:

ma io la distanza la incremento..non è che predecessore mi seve se voglio costruire l'abero??

comunque ci sto ancora ragionando


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

Originally posted by Gehur
ma io la distanza la incremento..non è che predecessore mi seve se voglio costruire l'abero??

comunque ci sto ancora ragionando


ho visto ora lo pseudocodice sul libro...no quel pigreco è sostanzialmente inutile...almeno che tu non necessiti di distinguere i nodi visitati da quelli non visitati...ma per quest'applicazione non ne vado l utilità..hai ragione!il libro distingue anche tra nodi bianchi grigi e neri...ma non è cosi fondamentale!basta che li consideri visitati/non visitati...
in realtà io pensavo che ti riferissi alla variabile che usa per incrementare la distanza..quella si riferisce al predecessore e ti serve perchè altrimenti non incrementi un bel nulla.


Posted by Gehur on 23-02-2009 11:08:

a ok ok, adesso vediamo di implementarlo :D


Posted by Shaper on 23-02-2009 11:57:

Scusate, ho un problema con la funzione strcpy().
Quando compila mi da questo warning:

faccialibro.c:380: warning: incompatible implicit declaration of built-in function 'strcpy'

L'ho usata per esempio in questa funzione:

void status_mod(element *ele, char *str){
strcpy(ele->status, str);
}

Nonostante questo mi sembra che funzioni tutto regolarmente, ma se mi da quel warning qualcosa di storto ci dev'essere...
Anche a voi da questo problema?

Ah, compilo con gcc attraverso NetBeans per Mac

__________________
Eidolon64|Blog


Posted by Gehur on 23-02-2009 12:02:

be ele è di tipo element, str è di tipo char..

la strcpy copia da stringa a stringa(da char a char)


Posted by hyperion on 23-02-2009 12:13:

Originally posted by Shaper
Scusate, ho un problema con la funzione strcpy().
Quando compila mi da questo warning:

faccialibro.c:380: warning: incompatible implicit declaration of built-in function 'strcpy'

L'ho usata per esempio in questa funzione:

void status_mod(element *ele, char *str){
strcpy(ele->status, str);
}

Nonostante questo mi sembra che funzioni tutto regolarmente, ma se mi da quel warning qualcosa di storto ci dev'essere...
Anche a voi da questo problema?

Ah, compilo con gcc attraverso NetBeans per Mac




prova ad usare un puntatore di appoggio

char* w;


ele->status = strcpy(w,str);


Posted by Gehur on 23-02-2009 12:34:

Originally posted by Gehur
be ele è di tipo element, str è di tipo char..

la strcpy copia da stringa a stringa(da char a char)


ops,ho letto male, mi sono confuso con la dichiarazione della funzione


Posted by Shaper on 23-02-2009 15:42:

Originally posted by hyperion
prova ad usare un puntatore di appoggio

char* w;


ele->status = strcpy(w,str);

Niente, ho provato come hai detto ma il risultato è identco: fa quello che deve fare ma mi da un warning.
Tra l'altro non è un problema di tipi o specfico di quella parte di codice: ho provato a dichiarare due variabili char[] e a fare strcpy() fra di loro e mi da lo stesso warning..

Boh, a sto punto non so che fare, sembra che sia un problema proprio della funzione.. :?

__________________
Eidolon64|Blog


Posted by Joy88 on 24-02-2009 10:10:

Solito quesito mattutino:

amico* trovaAmico(amico *a, char *nick)
{
amico *app = malloc(sizeof(amico));
app = a;
while(app!=NULL)
{
if (strcmp(nick, app->nome)==0)
return app;
app = app -> next;
}
return NULL;
}
Mi va in segmentation fault (strano eh!) alla strcmp nonostante abbia rincontrollato che il tipo amico abbia veramente un campo nome.. ovviamente char..

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

*Dante*


Posted by hyperion on 24-02-2009 10:43:

Originally posted by Joy88
Solito quesito mattutino:

amico* trovaAmico(amico *a, char *nick)
{
amico *app = malloc(sizeof(amico));
app = a;
while(app!=NULL)
{
if (strcmp(nick, app->nome)==0)
return app;
app = app -> next;
}
return NULL;
}
Mi va in segmentation fault (strano eh!) alla strcmp nonostante abbia rincontrollato che il tipo amico abbia veramente un campo nome.. ovviamente char..



no..non credo ti vada in segmentation per la strcmp in sè...quanto piuttosto secondo me sta accedendo a qualcosa di "vuoto"
non mi convince amico* app = malloc(sizeof(amico));

prova solo con
amico *app;
app = a;

e poi usa app normalmente per scorrere...come hai fatto...


Posted by Joy88 on 24-02-2009 10:51:

Ho provato come dicevi tu ma non cambia niente.. e debuggando mi va in seg fault sulla strcmp...

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

*Dante*


Posted by hyperion on 24-02-2009 10:56:

Originally posted by Joy88
Ho provato come dicevi tu ma non cambia niente.. e debuggando mi va in seg fault sulla strcmp...



la strcmp è giusta...se tu dici che app ha un campo nome di tipo char allora non c'è nulla di sbagliato nella strcmp per me..il problema secondo me sorge quando legge quel app->nome va in segmentation perchè evidentemente punta a qualcosa verso cui non dovrebbe puntare...e quindi non riesce a leggere il tuo campo...
procediamo per passi...quell' a che cos'é?la radice del sottoalbero delle amicizie?


Posted by Johnny88 on 24-02-2009 14:51:

hai provato ad usare valgrind?

è un ottimo tool che ti permette di visualizzare gli errori di allocazione di memoria e i memory leak.


Posted by Bloom on 24-02-2009 17:47:

Originally posted by Joy88
Solito quesito mattutino:

amico* trovaAmico(amico *a, char *nick)
{
amico *app = malloc(sizeof(amico));
app = a;
while(app!=NULL)
{
if (strcmp(nick, app->nome)==0)
return app;
app = app -> next;
}
return NULL;
}
Mi va in segmentation fault (strano eh!) alla strcmp nonostante abbia rincontrollato che il tipo amico abbia veramente un campo nome.. ovviamente char..

se chiedi di stampare il nome dell'amico a lo stampa?


Posted by Bloom on 24-02-2009 17:50:

Originally posted by Bloom
se chiedi di stampare il nome dell'amico a lo stampa?


Se si fai prima del while:
app->amico=a->amico;


Posted by Johnny88 on 25-02-2009 10:40:

Originally posted by Shaper
Scusate, ho un problema con la funzione strcpy().
Quando compila mi da questo warning:

faccialibro.c:380: warning: incompatible implicit declaration of built-in function 'strcpy'

L'ho usata per esempio in questa funzione:

void status_mod(element *ele, char *str){
strcpy(ele->status, str);
}

Nonostante questo mi sembra che funzioni tutto regolarmente, ma se mi da quel warning qualcosa di storto ci dev'essere...
Anche a voi da questo problema?

Ah, compilo con gcc attraverso NetBeans per Mac


ma string.h l'hai incluso?


Posted by Shaper on 25-02-2009 10:52:

Originally posted by Johnny88
ma string.h l'hai incluso?


..ops! :oops:
Chiedo venia, sono proprio fuso! :D

__________________
Eidolon64|Blog


Posted by Joy88 on 25-02-2009 12:14:

Originally posted by Bloom
se chiedi di stampare il nome dell'amico a lo stampa?


cmq no, non lo stampa..
Dietro consigli l'ho cambiato in questo modo:

amico* trovaAmico(amico* a, char *nick)
{
adiacenza* temp = malloc(sizeof(adiacenza));
temp->adiacente=a;
printf ("Ecco qui: %s\n", temp->adiacente->nome);
while(temp!=NULL)
{

if (strcmp(temp->adiacente->nome, nick)==0)
return temp->adiacente;
temp = temp -> next;
}
return NULL;
}

Inutile dire che il segfault ora va sulla printf e se la togliessi va sulla strcmp...

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

*Dante*


Posted by Johnny88 on 25-02-2009 12:50:

se sviluppi con linux prova ad usare valgrind che ti dice il perchè e il dove di una segmentation fault


Posted by Joy88 on 25-02-2009 13:14:

Uso il dev c in ambiente windows.........

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

*Dante*


Posted by Johnny88 on 25-02-2009 13:30:

ah ok, ma voi per il cammino minimo che algoritmo usate?


Posted by darkshadow on 25-02-2009 14:15:

Originally posted by Joy88
cmq no, non lo stampa..
Dietro consigli l'ho cambiato in questo modo:

amico* trovaAmico(amico* a, char *nick)
{
adiacenza* temp = malloc(sizeof(adiacenza));
temp->adiacente=a;
printf ("Ecco qui: %s\n", temp->adiacente->nome);
while(temp!=NULL)
{

if (strcmp(temp->adiacente->nome, nick)==0)
return temp->adiacente;
temp = temp -> next;
}
return NULL;
}

Inutile dire che il segfault ora va sulla printf e se la togliessi va sulla strcmp...


se posti come se sono fatte le strutture amico e adiacenza magari ti posso dare una mano

ciao

__________________
by Ð@rk§h@ÐØw


Posted by Bloom on 25-02-2009 15:17:

Originally posted by Joy88
cmq no, non lo stampa..
Dietro consigli l'ho cambiato in questo modo:

amico* trovaAmico(amico* a, char *nick)
{
adiacenza* temp = malloc(sizeof(adiacenza));
temp->adiacente=a;
printf ("Ecco qui: %s\n", temp->adiacente->nome);
while(temp!=NULL)
{

if (strcmp(temp->adiacente->nome, nick)==0)
return temp->adiacente;
temp = temp -> next;
}
return NULL;
}

Inutile dire che il segfault ora va sulla printf e se la togliessi va sulla strcmp...


Prova dopo temp->adiacente=a;
temp->adiacente->nome=a->nome
e poi la printf


Posted by Gehur on 25-02-2009 16:27:

allora ragazzi, andiamo con calma..ripartiamo da zero...se il seg faul è sulla printf vuol dire che temp->adiacente->nome ha contenuto random, oppure che temp->adiacente ha contenuto random, quindi

io come inizio stamperei a ed il suo contentuto (presumo a->nome)

poi se levi la printf, ti entra nel ciclo while? ti esegue l'if?? presumo di si visto che dici l'errore ti si sposterebbe sulla strcmp..cioè sul contenuto di temp->adiacente..


Posted by Gehur on 25-02-2009 16:30:

Johnny88 io uso visita in ampiezza di un grafo..


Posted by Joy88 on 25-02-2009 19:28:

Posto le mie strutture amico e adiacenza.. e confido nel tuo aiuto darkshadow!!
typedef struct adiacenza
{
struct amico* adiacente;
struct adiacenza* next;
struct adiacenza* prev;
} adiacenza;

typedef struct amico
{
char *nome;
struct adiacenza *adiacenza;
struct amico *next,*prev;
int visited;
int stato_amicizia;
}amico;

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

*Dante*


Posted by Johnny88 on 25-02-2009 19:32:

Originally posted by Gehur
Johnny88 io uso visita in ampiezza di un grafo..


Ma sei sicuro che la visita in ampiezza possa calcolare un cammino minimo?


Posted by Gehur on 25-02-2009 20:00:

be certo..la visita in ampiezza calcola il cammino minimo da un nodo a tutti gli altri nodi raggiungibili..ma non hai il libro??


Posted by darkshadow on 25-02-2009 20:00:

Originally posted by Joy88
Posto le mie strutture amico e adiacenza.. e confido nel tuo aiuto darkshadow!!
typedef struct adiacenza
{
struct amico* adiacente;
struct adiacenza* next;
struct adiacenza* prev;
} adiacenza;

typedef struct amico
{
char *nome;
struct adiacenza *adiacenza;
struct amico *next,*prev;
int visited;
int stato_amicizia;
}amico;


allora prima di tutto:

typedef struct amico
{
char *nome;
struct adiacenza *adiacenza;
struct amico *next,*prev;
int visited;
int stato_amicizia;
}amico;

secondo me il compilatore fa confusione con la dichiarazione in grassetto perchè hai sia la struttura che la variabile con lo stesso nome (adiacenza)

poi non è necessario che fai:

adiacenza* temp = malloc(sizeof(adiacenza));
temp->adiacente=a;


devi fare soltanto...

adiacenza* temp;
temp->adiacente=a;


questo è quello ke mi viene in mente per ora.

ciao.

__________________
by Ð@rk§h@ÐØw


Posted by Shaper on 25-02-2009 20:00:

Originally posted by Johnny88
Ma sei sicuro che la visita in ampiezza possa calcolare un cammino minimo?


Sì sì, lo fa, guarda a pag. 460 del Cormen.
Certo, da qui a implementarlo ce ne vuole, infatti io ci sto ancora sbattendo la testa! :evil:

__________________
Eidolon64|Blog


Posted by Gehur on 25-02-2009 20:15:

vi do una dritta che mi è stata molto utile per fare l'algoritmo BFS:

Pseudo-codifica dell'algoritmo:

per ogni vertice u di G diverso dalla sorgente s ripeti:
colore(u) = bianco
d(u) = infinito
pi(u) = null
end

colore(s) = grigio
d(s) = 0
pi(s) = null

Q = {s}

fintanto che la coda Q non e` vuota ripeti:
sia u il primo elemento estratto dalla coda Q
per ogni vertice v adiacente ad u ripeti:
se colore(v) = bianco allora
colore(v) = grigio
d(v) = d(u) + 1
pi(v) = u
aggiungi v alla coda Q
end
end
colore(u) = nero
end

Marco Liverani (liverani@mat.uniroma3.it)


Posted by darkshadow on 25-02-2009 20:22:

 

raga la visita BFS c'è anche nei vecchi progetti

come del resto tutto quello ke serve per fare questo progetto.

__________________
by Ð@rk§h@ÐØw


Posted by Joliet Jake on 26-02-2009 00:26:

sono condannato o no?

Ciao a tutti, arrivo purtroppo solo ora come potrete vedere da un altra discussione appena aperta.. volevo chiedervi francamente se secondo voi iniziando domani a man bassa il progetto e leggendomi tutto quello che avete postato finora ho qualche possibilità di farcela oppure il progetto è così complicato che non ce la posso fare comunque..

Un'altra cosa: ho seguito bene le lezioni di Aguzzoli ma non sono riuscito a ripassarmi i suoi appunti (400 pagine!!!!), ho solo i miei delle lezioni.. ora se ripasso il C con i suoi appunti (se nn ricordo male circa 200 pagine) poi secondo voi posso iniziare subito il progetto e spiluccare da quegli appunti le parti dell'implementazione delle strutture che mi servono o mi è indispensabile prima vedermi tutte le 400 e passa pagine con relativi esempi? e magari farmi pure gli esercizi dei laboratori?

Ditemi che ne pensate sinceramente..

__________________
In Blues We Trust


Posted by Johnny88 on 26-02-2009 09:00:

Originally posted by Shaper
Sì sì, lo fa, guarda a pag. 460 del Cormen.
Certo, da qui a implementarlo ce ne vuole, infatti io ci sto ancora sbattendo la testa! :evil:


Ah ok grazie, l'ho chiesto perchè io ho studiato quasi solo sulle dispense di goldwurm e quando parla della visita in ampiezza non dice che si ottengono dei cammini minimi.


Posted by Shaper on 26-02-2009 09:14:

Re: sono condannato o no?

Originally posted by Joliet Jake
Ciao a tutti, arrivo purtroppo solo ora come potrete vedere da un altra discussione appena aperta.. volevo chiedervi francamente se secondo voi iniziando domani a man bassa il progetto e leggendomi tutto quello che avete postato finora ho qualche possibilità di farcela oppure il progetto è così complicato che non ce la posso fare comunque..

Un'altra cosa: ho seguito bene le lezioni di Aguzzoli ma non sono riuscito a ripassarmi i suoi appunti (400 pagine!!!!), ho solo i miei delle lezioni.. ora se ripasso il C con i suoi appunti (se nn ricordo male circa 200 pagine) poi secondo voi posso iniziare subito il progetto e spiluccare da quegli appunti le parti dell'implementazione delle strutture che mi servono o mi è indispensabile prima vedermi tutte le 400 e passa pagine con relativi esempi? e magari farmi pure gli esercizi dei laboratori?

Ditemi che ne pensate sinceramente..


Guarda ti dirò che, una volta capito come realizzare un paio di funzioni complesse, il progetto in sè e per sè non è così difficile (alcuni degli anni passati mi sono sembrati molto peggio). Il problema è C: io ero completamente a digiuno di C e le lezioni di labortorio non le ho seguite con sufficiente attenzione, quindi ora mi blocco continuamente perchè magari so quello che devo fare ma mi perdo dietro puntatori, allocazione della memoria eccetera...
Quindi direi che (mio parere assolutamente personale), se hai già dimestichezza con C e magari, vedendo il progetto e questa discussione, te ne viene già in mente la struttura, penso che tu ce la possa fare. Viceversa se devi ancora metterti a studiare e non padroneggi ancora il linguaggio la vedo un po' dura...

Io personalmente ho iniziato una settimana e mezza fa e gran parte del tempo l'ho speso per prendere confidenza con C, e ora comincio decisamente a sentire il fiato sul collo (anche perchè il prof, come evidenziato da Joy, non si accontenta di un programma che "funzioni", ma vuole anche che sia efficiente e ottimizzato e questo vuol dire ulteriori giorni, dopo averlo finito, spesi per limaro e snellirlo..)

Io comunque mi metterei a lavorarci in ogni caso: tanto prima o poi lo dovrai dare questo esame e l'esercizio che farai adesso per apprendere il linguaggio e studiare la struttura del progetto di servirà sicuramente, anche solo per costruirti la forma mentis necessaria...

In bocca al lupo! :approved:

__________________
Eidolon64|Blog


Posted by Shaper on 26-02-2009 09:16:

Originally posted by Johnny88
Ah ok grazie, l'ho chiesto perchè io ho studiato quasi solo sulle dispense di goldwurm e quando parla della visita in ampiezza non dice che si ottengono dei cammini minimi.


Ti consiglio caldamente di usare anche e soprattutto il libro: è infinitamente più chiaro delle dispense di Goldwurm!

__________________
Eidolon64|Blog


Posted by Joy88 on 26-02-2009 09:48:

Niente, Darkshadows. Non va.
Sono un po' demoralizzata.. son 3 gg che ci sto su...
ho cambiato il nome come mi avevi consigliato ma non c'è niente da fare..
ho provato a fare anche una printf ("%s", temp->adiacente->nome); ma non va.. non riesco ad accedere..

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

*Dante*


Posted by hyperion on 26-02-2009 09:55:

Originally posted by Joy88
Niente, Darkshadows. Non va.
Sono un po' demoralizzata.. son 3 gg che ci sto su...
ho cambiato il nome come mi avevi consigliato ma non c'è niente da fare..
ho provato a fare anche una printf ("%s", temp->adiacente->nome); ma non va.. non riesco ad accedere..


joy...in fase di creazione del profilo hai allocato lo spazio per la lista ?
il campo adiacenza all'interno della struct amico in realtà dovrebbe essere la testa di una lista (inizialmente vuota)...in fase di creazione del profilo devi aggiungere una cosa del genere... adiacenza = nuovalista() in modo che adiacenza punta sempre ad un'area di memoria allocata eventualmente vuota..mi chiedo allora come fai ad inserire amici nelle rispettive liste amici...mi sembra assurdo che non ti acceda...


Posted by Johnny88 on 26-02-2009 10:04:

:-o Grazie per il consiglio.

Mi sa che mi dovrò implementare una coda:(


Posted by Shaper on 26-02-2009 10:44:

Scusate, una piccola domanda: ma voi utilizzate tutti una lista per rappresentare gli amici di un contatto? Perchè io, come ho già detto, sto usando un albero rb, per velocizzre le operazioni di ricerca degli amici, ma non vorrei avere problemi ad implementare la solita BFS (non mi ci sono ancora messo seriamente, ma avere un albero invece di una lista dovrebbe complicare un po' le cose, o no?) :?

__________________
Eidolon64|Blog


Posted by hyperion on 26-02-2009 11:13:

Originally posted by Shaper
Scusate, una piccola domanda: ma voi utilizzate tutti una lista per rappresentare gli amici di un contatto? Perchè io, come ho già detto, sto usando un albero rb, per velocizzre le operazioni di ricerca degli amici, ma non vorrei avere problemi ad implementare la solita BFS (non mi ci sono ancora messo seriamente, ma avere un albero invece di una lista dovrebbe complicare un po' le cose, o no?) :?


no...l'unica cosa che cambia è che per una lista usi uno scorrimento...per un Rb un'attraversamento inordine,postordine,preordine....poi per il resto è uguale


Posted by Joliet Jake on 26-02-2009 16:08:

Re: Re: sono condannato o no?

Originally posted by Shaper
Guarda ti dirò che, una volta capito come realizzare un paio di funzioni complesse, il progetto in sè e per sè non è così difficile (alcuni degli anni passati mi sono sembrati molto peggio). Il problema è C: io ero completamente a digiuno di C e le lezioni di labortorio non le ho seguite con sufficiente attenzione, quindi ora mi blocco continuamente perchè magari so quello che devo fare ma mi perdo dietro puntatori, allocazione della memoria eccetera...
Quindi direi che (mio parere assolutamente personale), se hai già dimestichezza con C e magari, vedendo il progetto e questa discussione, te ne viene già in mente la struttura, penso che tu ce la possa fare. Viceversa se devi ancora metterti a studiare e non padroneggi ancora il linguaggio la vedo un po' dura...

Io personalmente ho iniziato una settimana e mezza fa e gran parte del tempo l'ho speso per prendere confidenza con C, e ora comincio decisamente a sentire il fiato sul collo (anche perchè il prof, come evidenziato da Joy, non si accontenta di un programma che "funzioni", ma vuole anche che sia efficiente e ottimizzato e questo vuol dire ulteriori giorni, dopo averlo finito, spesi per limaro e snellirlo..)

Io comunque mi metterei a lavorarci in ogni caso: tanto prima o poi lo dovrai dare questo esame e l'esercizio che farai adesso per apprendere il linguaggio e studiare la struttura del progetto di servirà sicuramente, anche solo per costruirti la forma mentis necessaria...

In bocca al lupo! :approved:


grazie :( devo assolutamente farcela se no non posso chiedere la tesi :( mi darò ultra-da fare.. detto ciò vi do

__________________
In Blues We Trust


Posted by Gehur on 26-02-2009 17:22:

scusate ragazzi ma voi gli alberi red black gli avete creati da zero???

io stò provando ad implementare gli alberi, ma l'iserimento non avviene correttamente, nel senso che la radice dell'albero è sempre NULL

be ho capito l'errore, io nel main gli passo rootG, nella insert però non facevo rootG = r dove r è la nuova radice..


Posted by Gehur on 27-02-2009 14:29:

ho un problema con i red black..
inserisco nodo c, è la radice, colore nero
inserisco b, colore rosso
inserisco a, colore rosso--->errore nella fix insert, perchè lui esegue un confronto su un campo che non esiste..riga 4 delllo pseudo codice a pagina 237
in pratica va nel ramo destro, ma non esiste ramo destro..come posso fare??


Posted by Bloom on 27-02-2009 14:31:

Su algoteam ci sono delle implemetazioni perfettamente funzionanti.
perchè non provi a guardare?
Fammi sapere


Posted by Gehur on 27-02-2009 15:00:

ho guardato ma non mi piacciono, non mi ci trovo..per ora ho provato ad implementarle a modo mio, che poi in pratica io non uso root e nil, il funzionamento è lo stesso.. rifaccio la domanda in un altra maniera + chiara credo
come funziona l''iserimento in un red black di:
f c a...
allora inserisco f, l'albero è vuoto-->radice nera
c, albero pieno, c < f, sinistra-->rosso
a, albero pieno, a < f, sinistra; a < c, sinistra--->rosso--->fix insert
errore..

ma a te te li inserisce senza problemi f c a?? chiedo perchè mi sembra un errore congenito della fix insert, anche quella presente su algoteam


Posted by Bloom on 27-02-2009 15:05:

Io non ho avuto alcun problema con gli rb di algoteam....
E' sempre andato tutto liscio....strano....Guarda le esercitazioni del prof aguzzoli,magari trovi qualcosa di piu chiaro.
Magari il tuo è un problema di puntatori


Posted by Gehur on 27-02-2009 15:10:

si è un problema di puntatori, ma sulle soluzioni proposte non è considerato, se guardi il tuo codice alla riga4/5 della fix insert trovarai una cosa del genere

if(x->up == x->up->up->left) {
y = x->up->up->right;
il problema è che x->up->up->right, cioè il ramo destro della radice, non esite se si inseriscono nell' ordine f c a..per questo ti ho chiesto di provare..


Posted by Gehur on 27-02-2009 18:18:

per la cronaca quello su algoteam funziona correttamente grazie all'uso delle sentinelle


Posted by Joy88 on 01-03-2009 14:19:

Sono arrivata a implementare la visita BFS..
ho una difficoltà xò..
Io ho all'interno di ogni nodo del mio albero RB un grafo (fatto da liste di adiacenza) x le amicizie.....
quando chiamo la funzione x la visita BFS gli passo l'albero, e i due profili di cui voglio calcolare il percorso..
è giusto secondo voi?! va bene fare una BFS?
solo che poi mi è difficile calcolare il grado... devo scorrere l'albero e nel frattempo scorrere la lista di ogni nodo?!
Avete consigli?!
thanks...

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

*Dante*


Posted by Shaper on 01-03-2009 15:45:

Originally posted by Joy88
Sono arrivata a implementare la visita BFS..
ho una difficoltà xò..
Io ho all'interno di ogni nodo del mio albero RB un grafo (fatto da liste di adiacenza) x le amicizie.....
quando chiamo la funzione x la visita BFS gli passo l'albero, e i due profili di cui voglio calcolare il percorso..
è giusto secondo voi?! va bene fare una BFS?
solo che poi mi è difficile calcolare il grado... devo scorrere l'albero e nel frattempo scorrere la lista di ogni nodo?!
Avete consigli?!
thanks...


Io non l'ho ancora implementata, ma a occhio e considerando i post passati direi che è la soluzione migliore e anch'io pensavo di passarle i due nodi e l'albero...
Adesso devo mettermi anch'io a pensarci su, perchèil codice su algoteam mi sembra abbia bisogno di essere adattato un bel po'...

Comunque credo che sia la direzione giusta..

__________________
Eidolon64|Blog


Posted by hyperion on 01-03-2009 15:49:

Originally posted by Shaper
Io non l'ho ancora implementata, ma a occhio e considerando i post passati direi che è la soluzione migliore e anch'io pensavo di passarle i due nodi e l'albero...
Adesso devo mettermi anch'io a pensarci su, perchèil codice su algoteam mi sembra abbia bisogno di essere adattato un bel po'...

Comunque credo che sia la direzione giusta..



...se non hai ancora implementato la bfs come hai fatto a fare il consiglia amicizie?


Posted by Shaper on 01-03-2009 15:53:

Originally posted by hyperion
...se non hai ancora implementato la bfs come hai fatto a fare il consiglia amicizie?


Non mi è servita per il consiglia amicizie, ho usato una combinazione di visite inorder con un array di supporto...

__________________
Eidolon64|Blog


Posted by hyperion on 01-03-2009 15:55:

Originally posted by Shaper
Non mi è servita per il consiglia amicizie, ho usato una combinazione di visite inorder con un array di supporto...


array?


Posted by Shaper on 01-03-2009 15:58:

Originally posted by hyperion
array?


Sì, l'ho usato solo per non dover innestare una dentro l'altra una miriade di visite inorder, che se no, fra ricorsione e puntatori a funzione non mi raccapezzavo più. Poi ho semplicemente confrontato le varie amicizie usando un contatore per verificare che ci fossero almeno 3 amici in comune..

__________________
Eidolon64|Blog


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

Domandone della Giornata:
nella funzione aggiuntiva la data la inserisco da input confermate???
Se la leggo come char (string :D) c'è qualche funzione che me la trasforma in time_t / tm?? Su internet non ho trovato niente...

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

*Dante*


Posted by Shaper on 02-03-2009 10:17:

Originally posted by Joy88
Domandone della Giornata:
nella funzione aggiuntiva la data la inserisco da input confermate???
Se la leggo come char (string :D) c'è qualche funzione che me la trasforma in time_t / tm?? Su internet non ho trovato niente...


Ma a che ti serve, scusa? Dato che la data è in formato "invertito" (anno/mese/giorno), pui confrotare due date con un semplice confronto tra stringhe. Indipendentemente dalla codifica i numeri sono sempre nello stesso ordine nella tabella ascii, no?

__________________
Eidolon64|Blog


Posted by Gehur on 03-03-2009 15:02:

ma per testare il programma l'esempio del professore sul pdf basta??
se scrivo tutto minuscolo è un problema??
a tal proposito, non esiste un modo per creare un file bat che esegua tutti i comandi, riscrivere tutto ogni volta non è il massimo..


Posted by Bloom on 03-03-2009 15:13:

Il progetto diceche bisogna fare numerosi test,
L'input è quello proposto dal testo, ricordati che tutti i system sono minuscoli (nel testo di input ci sono 2 System e non system).
Puoi rindirizzare l'input in questo modo:
esame.exe<input.txt
in input.txt ci metti tutti i comandi.
Spero di esserti stasta utile ciao
Laura


Posted by Gehur on 03-03-2009 15:15:

ooo grazie! provo subito


Posted by Bloom on 03-03-2009 15:17:

Originally posted by Bloom
Il progetto diceche bisogna fare numerosi test,
L'input è quello proposto dal testo, ricordati che tutti i system sono minuscoli (nel testo di input ci sono 2 System e non system).
Puoi rindirizzare l'input in questo modo:
esame.exe<input.txt
in input.txt ci metti tutti i comandi.
Spero di esserti stasta utile ciao
Laura

Niente!Poi dimmi se è andata


Posted by Gehur on 03-03-2009 15:39:

sembra andare tutto, meno male..

cavolo era una rottura scrivere tutto a mano..sopratutto parallipomeni del...


Posted by Bloom on 03-03-2009 16:24:

Originally posted by Gehur
sembra andare tutto, meno male..

cavolo era una rottura scrivere tutto a mano..sopratutto parallipomeni del...


Ahahah
Allora l'hai finito...meno male


Posted by Gehur on 03-03-2009 16:38:

si si..solo che ho usato gli alberi normali, almeno per avere una versione finita..

avevo pensato di provare a farlo con i rd black, ma la voglia è poca..be vediamo in questi giorni


Posted by Shaper on 03-03-2009 17:25:

Problemino problemuccio con la BFS :D
Cone lista di adiacenza uso un albero rb e quindi sfrutto una visita inorder a cui passo una funzione che, per ogni elemento dell'albero degli amici, fa le sue belle menate per calcolare il cammino. E fin qui tutto bene.
La mia perplessità è:
quando trovo il nodo di "arrivo" (il nodo q seguendo l'esempio del testo) come faccio a dirgli che ho finito e quindi di smettere e uscire da tutti i cicli/ricorsioni e ritornare semplicemente il grado di separazione trovato (che è un semplice intero che incremento mano a mano)? Potrei giocarmela con delle condizioni e impedirgli di incrementare il contatore se ho raggiunto il nodo p, ma mi scoccia fare un sacco di operazioni inutili.
E' come se mi servisse un break, ma non sono in un ciclo o uno switch, quindi non funziona..

Spero di essere stato sufficientemente chiaro (dubito :( )

__________________
Eidolon64|Blog


Posted by Gehur on 03-03-2009 19:32:

be così su 2 piedi, ti devi fermare quando trovi il nodo di arrivo, quindi quando trovi nick2...

se la funzione che fai va da nick 2 una sola volta, basta metterci un if è diverso da nick..ma è propio pensata sul momento..

cioè io calcolo il cammino di tutti e poi cerco il nick2; la tua soluzione l'avevo pensata pure io, ma è bella impegnativa, non avevo voglia di mettermi :D


Posted by Shaper on 03-03-2009 23:11:

Originally posted by Gehur
be così su 2 piedi, ti devi fermare quando trovi il nodo di arrivo, quindi quando trovi nick2...

se la funzione che fai va da nick 2 una sola volta, basta metterci un if è diverso da nick..ma è propio pensata sul momento..

cioè io calcolo il cammino di tutti e poi cerco il nick2; la tua soluzione l'avevo pensata pure io, ma è bella impegnativa, non avevo voglia di mettermi :D


Il mio porblema è che usando una visita ricorsiva per scansire l'albero una volta partita non so come fermarla, per evitare che, una volta trovato il nodo, mi scorra tutto l'albero inutilmente.
Ma alla fine credo che me ne fregherò altamente e al massimo se finisco in tempo ci penso! :P

__________________
Eidolon64|Blog


Posted by Bloom on 04-03-2009 13:19:

Originally posted by Shaper
Il mio porblema è che usando una visita ricorsiva per scansire l'albero una volta partita non so come fermarla, per evitare che, una volta trovato il nodo, mi scorra tutto l'albero inutilmente.
Ma alla fine credo che me ne fregherò altamente e al massimo se finisco in tempo ci penso! :P

Fai una visita ricorsiva per calcolare il grado di separazione?


Posted by hyperion on 04-03-2009 13:28:

Originally posted by Shaper
Il mio porblema è che usando una visita ricorsiva per scansire l'albero una volta partita non so come fermarla, per evitare che, una volta trovato il nodo, mi scorra tutto l'albero inutilmente.
Ma alla fine credo che me ne fregherò altamente e al massimo se finisco in tempo ci penso! :P



beh...se usi una coda per la tua visita in ampiezza è un attimo controllare l'elemento prelevato in testa.....


Posted by Gehur on 04-03-2009 20:11:

scusate ragazzi, ho un dubbio sul calcolo del tempo di esecuzione delle funzioni

ho un ciclo for da 0 a n, e dentro il ciclio faccio, per esempio, una ricerca su un albero binario, è corretto scrivere

O(n) + O(log(n))

oppure devo moltiplicare i 2 tempi??


Posted by Shaper on 04-03-2009 23:59:

Originally posted by Gehur
si è un problema di puntatori, ma sulle soluzioni proposte non è considerato, se guardi il tuo codice alla riga4/5 della fix insert trovarai una cosa del genere

if(x->up == x->up->up->left) {
y = x->up->up->right;
il problema è che x->up->up->right, cioè il ramo destro della radice, non esite se si inseriscono nell' ordine f c a..per questo ti ho chiesto di provare..


Mi sono accorto solo adesso (PANICO!!) che ho il tuo stesso identico problema, Gehur, ma solo per quanto riguarda gli alberi delle amicizie. Non capisco: l'implementazione è identica a quella di algoTeam, sia per l'albero dei profili sia per quello delle amicizie, solo che se inserisco 3 profili di nome f, c, a non da nessun problema, mentre se provo ad aggiungere 3 amici di nome f, c, a ad un profilo mi da errore, proprio sulla riga da te citata :(
Tu alla fine hai risolto? Se sì posso sapere come hai fatto, please? :please:

__________________
Eidolon64|Blog


Posted by Gehur on 05-03-2009 07:46:

io alla fine ho usato gli alberi di ricerca normali..non avevo voglia di sbattermi..comunque se usi l'implementazione di algo team è strano che ti dia errore,io usavo una mia versione senza sentinelle, l'errore nel mio caso avveniva perchè non c'era nessun dato, il ramo era vuoto,quindi nessun campo presente, invece in algoteam un dato c'è sempre ed è la sentinella NIL

infatti con l'abero dei profili va..si vede che c'è qualche "cazzatina" sull'albero amici..la primissima cosa che mi viene in mente dopo aver fatto un backup è di fare un copia incolla del codice di inserimento profili con quello di inserimento amici, con le opportune modifiche


Posted by BeppeGoal on 05-03-2009 20:53:

Ragazzi, a questo punto dubito di capire l'italiano... o forse ormai sono definitivamente cotto...
Non riesco a inquadrare il punto del comando system ? nick nick2 group...

system ? nick nick2 group Il sistema stampa il grado di separazione relativo a group tra nick e nick2.
Se non esiste alcun profilo con nickname nick o nick2, oppure non esiste il
gruppo con titolo group, allora il sistema non fa niente.

Per favore, qualcuno può darmi una delucidazione in merito su cosa bisogna fare? (non il codice, ovviamente... ma proprio la spiegazione in italiano!! :D )

Grazie mille!!!


Posted by darkshadow on 05-03-2009 21:48:

 

è la stessa cosa del grado di separazione tra 2 nick (quello con il comando system ! nick1 nick) con in + il vincolo che i profili partecipino al gruppo group.

__________________
by Ð@rk§h@ÐØw


Posted by Shaper on 05-03-2009 21:53:

Originally posted by BeppeGoal
Ragazzi, a questo punto dubito di capire l'italiano... o forse ormai sono definitivamente cotto...
Non riesco a inquadrare il punto del comando system ? nick nick2 group...

system ? nick nick2 group Il sistema stampa il grado di separazione relativo a group tra nick e nick2.
Se non esiste alcun profilo con nickname nick o nick2, oppure non esiste il
gruppo con titolo group, allora il sistema non fa niente.

Per favore, qualcuno può darmi una delucidazione in merito su cosa bisogna fare? (non il codice, ovviamente... ma proprio la spiegazione in italiano!! :D )

Grazie mille!!!


Allora, premetto che questa è proprio l'ultima funzione che mi manca da implementare, provo a dire come l'ho intesa...
Per prima cosa vedo se i due nick e il gruppo effettivamente esistono. Se è così continuo, se no mi fermo. E fin qui ok.
Poi in pratica è come trovare il cammino minimo tra nick e nick2, con la differenza che ogni profilo del cammino oltre che essere amico del successivo e del precedente deve anche essere iscritto al gruppo.
Se per caso, mentre calcolo il cammino minimo, dovessi trovare un profilo che non è iscritto al gruppo, a questo punto il grado di separazione sarà infinito, perchè è come se si fosse "spezzata la catena".
In soldoni alla fine bisogna modificare la funzione del grado di separazione aggiungendo un if..

Ha senso secondo voi? :?

__________________
Eidolon64|Blog


Posted by darkshadow on 05-03-2009 21:58:

 
è come hai detto te però non è vero ke ti fermi apena trovi un profilo che non partecipa al gruppo perchè un profilo ha tanti amici e se un profilo non partecia al gruppo non è detto ke nessuno degli altri amici non partecipi al gruppo.

__________________
by Ð@rk§h@ÐØw


Posted by Shaper on 05-03-2009 22:27:

Originally posted by darkshadow
 
è come hai detto te però non è vero ke ti fermi apena trovi un profilo che non partecipa al gruppo perchè un profilo ha tanti amici e se un profilo non partecia al gruppo non è detto ke nessuno degli altri amici non partecipi al gruppo.


e ma se guardi il testo c'è scritto rj membro di G PER OGNI j. Vuol dire che TUTTI i profili del cammino minimo devono essere membri di G.
Nella situazione che hai detto tu si avrebbe un profilo che magari ha altri amici membri di G, ma lui stesso non lo sarebbe e quindi non può stare nel cammino minimo...

__________________
Eidolon64|Blog


Posted by darkshadow on 05-03-2009 23:14:

allora se ci arrivi ad un certo nodo è perchè questo partecipa al gruppo e quindi a questo punto visiti i suoi amici i quali però possono partecipare o meno al gruppo.
da quello ke dici te se sono a nickN con nickN diverso da nick2 (nick di arrivo) quindi scorro i suoi amici e vedo ke uno di questi non partecipa al gruppo avrei grado infinito ma questo non è vero!! perchè può darsi ke uno tra gli amici di nickN che partecipa al gruppo mi porta a nick2.

__________________
by Ð@rk§h@ÐØw


Posted by BeppeGoal on 06-03-2009 09:39:

In effetti anch'io avevo fatto considerazioni del genere, è proprio questo che m'ha creato dubbi, che non si riesca ad inquadrare il problema in pieno, perché tutte i vostri post secondo me hanno pieno senso.


Posted by gluca on 06-03-2009 13:18:

Io sono costretto ad abbandonare (tanto lavoro per stampare quadratini facettine etc) chiedo qualche anima buona di rendere disponibile il suo lavoro appena possibile.
ringrazio anticipatamente


Posted by Bloom on 06-03-2009 13:21:

Se lo passo lo metto su io


Posted by Joy88 on 06-03-2009 14:08:

Allora..
ti faccio un esempio pratico:
con -> intendo la relazione di amicizia confermata..
a->b->c->d->e
tra a ed e il grado è 4.. devi contare le "frecce" da a a e..

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

*Dante*


Posted by Joy88 on 06-03-2009 14:08:

Allora..
ti faccio un esempio pratico:
con -> intendo la relazione di amicizia confermata..
a->b->c->d->e
tra a ed e il grado è 4.. devi contare le "frecce" da a a e..

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

*Dante*


Posted by Shaper on 06-03-2009 14:40:

Originally posted by darkshadow
allora se ci arrivi ad un certo nodo è perchè questo partecipa al gruppo


e no, il problema è che, se usi una bfs, l'arrivare a un certo nodo non implica necessariamente che il nodo sia anche membro del gruppo, perchè l'unica condizione da rispettare è che il nodo sia amico del precedente e del successivo nodo del cammino minimo. Per questo bisogna fare un controllo ogni volta, dato che il nodo considerato potrebbe non rispettare i criteri del comando...

__________________
Eidolon64|Blog


Posted by hyperion on 06-03-2009 15:09:

Originally posted by Shaper
e no, il problema è che, se usi una bfs, l'arrivare a un certo nodo non implica necessariamente che il nodo sia anche membro del gruppo, perchè l'unica condizione da rispettare è che il nodo sia amico del precedente e del successivo nodo del cammino minimo. Per questo bisogna fare un controllo ogni volta, dato che il nodo considerato potrebbe non rispettare i criteri del comando...



basta che nella coda che usi per la tua bfs metti solo i nodi con il flag di appartenenza al gruppo.,e poi ti comporti come in una normale bfs tra i due nick per calcolare il grado di separazione..


Posted by Shaper on 06-03-2009 15:19:

Originally posted by hyperion
basta che nella coda che usi per la tua bfs metti solo i nodi con il flag di appartenenza al gruppo.,e poi ti comporti come in una normale bfs tra i due nick per calcolare il grado di separazione..

Sì anche così è corretto. Alla fine il controllo lo puoi mettere dove vuoi, basta che il risulatato rispetti le specifiche..

__________________
Eidolon64|Blog


Posted by Joy88 on 06-03-2009 15:41:

Tanto x curiosità.. qual è il costo della vostra visita bfs x il grado?!

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

*Dante*


Posted by Shaper on 07-03-2009 00:24:

Scusate, ma voi cosa usate per fare il debug? Perchè io mi sono fatto un file .txt con l'input di esempio del prof e poi dalla shell redireziono l'input.
Peccato che in certe condizioni mi da bus error e io non capisco il perchè!

Prima avevo usato net Beans con il plugin per il C per il debug e mi trovavo bene, ma non risco a passargli un file come input e rimettere tutto a mano ogni volta è improponibile...

conoscete un debugger che permetta di redirezionare l'input come dalla shell?

Mio dio, mancano meno di tre giorni e questo continua a darmi bus error a caso! :wall::wall::wall:

__________________
Eidolon64|Blog


Posted by Bloom on 07-03-2009 12:02:

Gcc ha il suo debug,prova quello


Posted by Joliet Jake on 08-03-2009 17:10:

code:
void inorder(rbtreep *p, void (*op)(rbnodep *))


scusate ma qualcuno riesce a spiegarmi cosa srajfiljdklf vuol dire?
il secondo parametro cos'è?
un puntatore ad una funzione?
una funzione?

sono scemo, scrivetemi perfavore come deve essere il comando
code:
inorder (albero, ????)

__________________
In Blues We Trust


Posted by Shaper on 08-03-2009 17:13:

Originally posted by Joliet Jake
code:
void inorder(rbtreep *p, void (*op)(rbnodep *))


scusate ma qualcuno riesce a spiegarmi cosa srajfiljdklf vuol dire?
il secondo parametro cos'è?
un puntatore a duna funzione?
una funzione?

sono scemo, scrivetemi perfavore come deve essere il comando
code:
inorder (albero, ????)


il secondo parametro è un puntatore a una funzione, la quale accetta un parametro di tipo puntatore a rbnodep.
Serve per far eseguire una qualsiasi funzione con quel prototipo su ognuno dei nodi visitati mediante inorder

__________________
Eidolon64|Blog


Posted by hyperion on 08-03-2009 17:13:

Originally posted by Joliet Jake
code:
void inorder(rbtreep *p, void (*op)(rbnodep *))


scusate ma qualcuno riesce a spiegarmi cosa srajfiljdklf vuol dire?
il secondo parametro cos'è?
un puntatore a duna funzione?
una funzione?

sono scemo, scrivetemi perfavore come deve essere il comando
code:
inorder (albero, ????)



puoi riutilizzare quella funzione per qualsiasi funzione che abbia bisogno di una visita inordine su di un albero...ad esempio per fare una stampa o qualche altra operazione invece di scrivere due funzioni inorder differenti usi la stessa con un puntatore generico (void)...


Posted by Joliet Jake on 08-03-2009 17:37:

ok grazie..
un altra cosa IMPORTANTISSIMA

ma scusate se un nodo viene creato ed inserito CON una chiave ed IN BASE alla chiave che è un intero.. ed io non voglio che sia un intero il nucleo fondamentale del nodo perchè nel mio caso invece è un profilo o un gruppo, allora sono davanti ad un dilemma



Sarà che è giorni che ci lavoro sopra ma sto sbarellando.. aiuto!

graize per l'aiuto.. davvero non vorrie disturbarvi ma ci tengo a farcela..

__________________
In Blues We Trust


Posted by Bloom on 08-03-2009 18:04:

il profilo è un puntatore a char ,i confronti li puoi fare tutti con strcmp


Posted by Joliet Jake on 08-03-2009 18:13:

appunto, ok menomale :)
per l'inorder quindi basta una cosa del genere

code:
void printnames(nodep* tizio) { bla bla }


code:
inorder (root, printnames)

?

__________________
In Blues We Trust


Posted by Shaper on 08-03-2009 18:15:

Originally posted by Joliet Jake
appunto, ok menomale :)
per l'inorder quindi basta una cosa del genere

code:
void printnames(nodep* tizio) { bla bla }


code:
inorder (root, printnames)

?


Sì, però di solito all'inorder si passa l'albero, non un nodo...

__________________
Eidolon64|Blog


Posted by Bloom on 08-03-2009 18:18:

puoi fare anche cosi...
void inorder(nodep *r, nodep *nil){
if(r!=nil){
inorder(r->left,nil);
printf("%s\n",r->nomeprofilo);
inorder(r->right,nil);
}

}

poi per chiamarla correttamente fai inorder(tree->root,tree->nil);
cosi sei sicuro che ti scandisce tutto l'albero


Posted by juggernaut on 08-03-2009 18:28:

dopo quanto sapremo se abbiamo passato il progetto??


Posted by Bloom on 08-03-2009 18:29:

non lo so.......spero che ci diano tempo di ripassare


Posted by Joliet Jake on 08-03-2009 18:42:

Originally posted by Shaper
Sì, però di solito all'inorder si passa l'albero, non un nodo...


si lo so, root è un nome a caso, ma indica l'albero, tranquillo ;)

__________________
In Blues We Trust


All times are GMT. The time now is 11:12. 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.