| |
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 "Componenti Elettroniche" Clicca QUI per vedere il messaggio nel forum |
carla86 |
E' uscito il nuovo progetto di Algoritmi.
Apro un thread per chi come me pensa (deve) farlo x l'8 giugno!! |
Guepe |
ci son dentro ankio in quel "deve", se voglio laurearmi a dicembre. Per ora gli ho dato una prima lettura veloce e pensavo peggio. |
BeppeGoal |
Boh, vediamo un po'... teniamo questo thread come riferimento :) |
carla86 |
Anke io mi "devo" laureare a dicembre....
Onestamente anche io pensavo peggio, invece tutto sommato per giugno (forse è x questo ke danno meno gg del solito) non è poi cosi catastrofico come pensavo...
Spero d nn dovermi ricredere!!! |
pirlo21 |
mi aggiungo al coro dei "devo" e vi lascio già un dubbio...
ho guardato gli esempi di codice da provare e i relativi messaggi...
nel primo L (lineare) ovvero l'istruzione
l 2 7 17 24 26
il risultato del professore è:
69:
[
3 2 10 5 5, 2 (c5)
12 3 6 4 3, 7 (c1)
100 2 5 3 8, 17 (c3)
74 7 4 2 4, 24 (c6)
]
Nelle direttive del testo però dice che l'istruzione lineare può dare diverse soluzioni e infatti in questo caso le soluzioni possibili equivalenti sono:
c5 c1 c3 c6 (quella indicata dal professore)
c5 c2 c3 c6
c5 c3 c1 c6
c5 c3 c2 c6
Mi verrebbe da pensare che sia indifferente postare una o l'altra soluzione, ma più volte nella creazione dei dispositivi si dice che conta l'ordine dei componenti...quindi la soluzione giusta è solo la prima?? |
carla86 |
allora nel testo dice che un dispositivo è lineare se le posizioni dei componenti sono in ordine crescente, e se la posizione di una componente+la larghezza da esso occupata è minore o uguale della posizione del componente dopo.
quindi credo che sia x questo che ha scelto solo la prima xke sono tutti dispositivi ma la funzione lineare deve restituire solo il dispositivo lineare che ha la massima occupazione |
BeppeGoal |
Che struttura dati ipotizzate? |
Guepe |
Rileggendo mi sembra che l'idea migliore sarebbe di avere una lista normale per i componenti e un albero rosso-nero.
Secondo voi?
cmq anche il secondo dispositivo (c5 c2 c3 c6) ha la stessa estensione del primo e soddisfa la proprietà di linearità. L'unica differenza sta nel secondo componente che è un 6x2 invece del c1 del (c5 c1 c3 c6) che è un 4x3 ma l'estensione rimane sempre la stessa.
Rileggendo ho notato che c'è scritto che il dispositivo lineare da x a xk+1 non per forza deve essere unico. Quindi entrambe le soluzione proposte dovrebbero andare bene come risultato (c5 c2 c3 c6) e (c5 c1 c3 c6). Per le altre due invece, che hanno gli stessi componenti del primo disp (c5 c1 c3 c6), ci deve essere qualcosa sull'ordine dei componenti che mi sfugge... |
pirlo21 |
Infatti quando viene spiegata la funzione "lineare" si dice che ci possono essere più soluzioni, però mi chiedevo se era indifferente darne una o l'altra oppure va indicata in ordine di costruzione del componente... Il professore dice che l'ordine di fissaggio è rilevante...
Le ultime due soluzioni penso sia valide altrettanto perchè vengono rispettati i vincoli ed essendo uguali i pezzi anche l'estensione resta invariata...
Per quanto riguarda la struttura anche a me è venuta subito in mente una lista...infondo non ci sono eliminazioni, bisogna fare qualche inserimento e molte ricerche... forse utilizzando un grafo si migliorerebbe il tempo di ricerca però sarebbe difficile indicizzarlo perchè bisognerebbe capire bene qual'è il parametro da indicizzare...
Se conta l'ordine di inserimento la lista facilita tutto, altrimenti con il grafo si potrebbe indicizzare per codice (velocizza gli inserimenti) o per lunghezza/estensione (velocizza la funzione lineare)... |
Guepe |
Ho riletto più volte, ma a parte trovare la frase " L'ordine di fissaggio delle componenti è rilevante" più volte non riesco a capire il perchè di tutta questa rilevanza :D :D boh...
Per ora mi riguardo un po di C con cui non ho molta dimestichezza prima di incominciare a scrivere codice a caso pieno di errori :D |
carla86 |
Io ho pensato a un grafo/albero per quanto riguarda le componenti, facendo inserimento in ordine di codice identificativo
Il fatto è ke ci sono 3 funzioni di ordinamento che però hanno criteri diversi:
ordina devi stampare tutti i componenti secondo il costo; mentre stampa devi stampare i componenti in ordine di codice, e stampa f idem solo ke devi controllare ke facciano parte di una sola famiglia.
però ho due dubbi:
1. nelle componenti voi memorizzate lunghezza e altezza o anche l'area visto che nella funzione lineare l'estensione del dispositivo è la somma delle aree?
2. i dispositivi li memorizzate in una struttura oppure non ce ne bisogno visto che lavoriamo in tutte e 5 le funzioni solo con le componenti? |
kalbiz |
ciao mi aggiungo per appello di giugno...
la domanda è come cercare ed ordinare una lista secondo i dati satellite ?
cioè come stampare i componenti in ordine di codice, se ho una lista con chiave costo?
avevo pensato ad inserire ogni componente nelle 3 liste ordiante secondo 3 diversi criteri... costo , codice, famiglia
per la parte dei dispositivi avevo persato ad un ulteriore struttura ad albero...
che ne pensate ?
oltretutto per le componenti non ho visto la parte di cancellazione o mi sbaglio |
carla86 |
Originally posted by Guepe
Per ora mi riguardo un po di C con cui non ho molta dimestichezza prima di incominciare a scrivere codice a caso pieno di errori :D
Anke io mi sto riguardando un po d C, visto ke nn ho molta dimestichezza con i puntatori e cn la storia del passaggio dei paramentri x indirizzo...
Cmq ripensando alla struttura dati, secondo me una lista non va bene xke nella definizione della funzione componente dice: "se esiste già una componente con codice di identificativo i sostituisce la nuova definizione a quella esistente."
E siccome i componenti non dice che li inserisci in codice identificativo ordinato, o tieni la lista ordinata per codice identificato e quindi ad ogni inserimento devi scorrere la lista x vedere dove mettere il nuovo componente...
Invece in un grafo/albero binario (ancora non ho ben deciso quale dei due) il controllo che esista gia un componente con quel il codice identificativo è più rapida...
Siccome non sono tanto ferrata su queste cose chiedo conferma dei miei dubbi!!! |
pirlo21 |
hai ragione...questo vorrebbe dire però che se non usiamo una lista ma un grafo, le componenti debbano essere indicizzate in base al codice indentificativo... però nell'ordinamento per costo e nella funzione lineare, ci andiamo a complicare la vita...il tutto senza contare che se bisogna veramente tenere conto dell'ordine di fissaggio è ancora più complicato |
elrod |
Ciao a tutti,
io sono rimasto un passo indietro... non riesco a capire nell'esempio con i due dispositivi:
D1 = ((c6,20),(c5,19),c1,4),(c4,2),c2,7)) e D2=((c2,1),(c3,8),(c1,11))
come ha fatto a calcolare l'estensione del primo dispositivo... il secondo l'ho capito... è la somma delle aree ma il primo no....
grazie ;) |
carla86 |
Originally posted by pirlo21
hai ragione...questo vorrebbe dire però che se non usiamo una lista ma un grafo, le componenti debbano essere indicizzate in base al codice indentificativo... però nell'ordinamento per costo e nella funzione lineare, ci andiamo a complicare la vita...il tutto senza contare che se bisogna veramente tenere conto dell'ordine di fissaggio è ancora più complicato
appunto xke ci sono più criteri di ricerca che secondo me dobbiamo usare la struttura dati su cui la ricerca costa meno.
poi conta che su due funzioni componente (in cui cmq devi cercare se gia esiste) e in stampa, devi ordinare le componenti in ordine di codice, in una di costo e in stampa in base alla famiglia è sempre in ordine di codice..
quindi io credo ke opterò x indicizzare su codice identificativo. |
carla86 |
Originally posted by elrod
Ciao a tutti,
io sono rimasto un passo indietro... non riesco a capire nell'esempio con i due dispositivi:
D1 = ((c6,20),(c5,19),c1,4),(c4,2),c2,7)) e D2=((c2,1),(c3,8),(c1,11))
come ha fatto a calcolare l'estensione del primo dispositivo... il secondo l'ho capito... è la somma delle aree ma il primo no....
grazie ;)
l'estensione del primo dispositivo la devi calcolare calcolando le aree dei componenti, ma facendo attenzione ha sommare una volta sola le aree sovrapposte.
Io ti dico come l'ho calcolata io:
-parto da il componente che hai in posizione 19 che è il componente c5 che ha area 5x5; il componente in posizione 20, ossia c c6 è completamente sovrapposto dal componente c5 di cui hai gia calcolato l'area quindi c6 nn lo consideri senno riconsidereresti due volte la stessa area.
- hai in posizione 2 il componente di area 10x1, ma in realtà ha solo 2 unità della sua area non sovrapposte da nessun altro componente
-poi ce il componente in posizione 4 ossia il componente c1 che ha area 4x3
-e poi ce il componente in posizione 7, ossia il componente c2 che però è in parte sovrapposto dal componente c1 di cui hai gia calcolato l'area quindi da questo devi togliere la parte sovrapposta.
calcolato cosi ti viene esattamente 49 come da lui calcolato. |
elrod |
Originally posted by carla86
l'estensione del primo dispositivo la devi calcolare calcolando le aree dei componenti, ma facendo attenzione ha sommare una volta sola le aree sovrapposte.
Io ti dico come l'ho calcolata io:
-parto da il componente che hai in posizione 19 che è il componente c5 che ha area 5x5; il componente in posizione 20, ossia c c6 è completamente sovrapposto dal componente c5 di cui hai gia calcolato l'area quindi c6 nn lo consideri senno riconsidereresti due volte la stessa area.
- hai in posizione 2 il componente di area 10x1, ma in realtà ha solo 2 unità della sua area non sovrapposte da nessun altro componente
-poi ce il componente in posizione 4 ossia il componente c1 che ha area 4x3
-e poi ce il componente in posizione 7, ossia il componente c2 che però è in parte sovrapposto dal componente c1 di cui hai gia calcolato l'area quindi da questo devi togliere la parte sovrapposta.
calcolato cosi ti viene esattamente 49 come da lui calcolato.
Grazie mille... non riuscivo a capire da dove saltava fuori il 49... |
kalbiz |
Originally posted by carla86
appunto xke ci sono più criteri di ricerca che secondo me dobbiamo usare la struttura dati su cui la ricerca costa meno.
poi conta che su due funzioni componente (in cui cmq devi cercare se gia esiste) e in stampa, devi ordinare le componenti in ordine di codice, in una di costo e in stampa in base alla famiglia è sempre in ordine di codice..
quindi io credo ke opterò x indicizzare su codice identificativo.
mi sembra corretto, utilizziamo una struttura dati ad albero.
probabilmente mi sfugge però qualcosa a prescindere dalla struttura utilizzata, quando faccio una ricerca, la faccio per chiave ...
se memorizzo nel mio albero binario di ricerca come chiave il codice, come sembrerebbe ovvio, come faccio poi a ricercare per famiglia ? o ordinare in base al costo ? |
BeppeGoal |
Ma scusate, non riesco a capire come vengono definiti i ganci, come faccio a sapere che un componente parte dalla posizione 20 piuttosto che da un'altra? Nell'esempio del prof il gancio non viene mai dato come input |
carla86 |
Originally posted by kalbiz
mi sembra corretto, utilizziamo una struttura dati ad albero.
probabilmente mi sfugge però qualcosa a prescindere dalla struttura utilizzata, quando faccio una ricerca, la faccio per chiave ...
se memorizzo nel mio albero binario di ricerca come chiave il codice, come sembrerebbe ovvio, come faccio poi a ricercare per famiglia ? o ordinare in base al costo ?
mi verebbe da dire ke li possiamo ordinare come primo criterio x codice, come secondo criterio x costo e come terzo x famiglia (o qst ultimi due viceversa..)
xo' nn so se è fattibile...
ora dico una cavolata, nn mangiatemi ma io la lancio li... tenere tre alberi ordinati in modo diverso è una cavolata vero? è più intelligente ordinarli secondo criteri progressivi? |
carla86 |
Originally posted by BeppeGoal
Ma scusate, non riesco a capire come vengono definiti i ganci, come faccio a sapere che un componente parte dalla posizione 20 piuttosto che da un'altra? Nell'esempio del prof il gancio non viene mai dato come input
anke io nn riesco a capire questa cosa, siccome l'unica volta ke da delle posizioni è quando chiama la funzione lineare, mi viene da pensare ke ci sia un qualche criterio x cui dobbiamo controllare quando chiama la funzione lineare anke che i vari pezzi ci stiano nelle varie posizioni...
xo' ho deciso ke quando avrò fatto tutto il resto e mi mancherà questa cosa o cmq quando sarò a buon punto con il resto chiederò al prof questa cosa... |
BeppeGoal |
Io gli scrivo subito, o al massimo domani mattina.
Se mi risponde posto quel che mi dice, se qualcun altro ha info su questo punto, faccia lo stesso. :approved: |
BeppeGoal |
Il Professore mi ha risposto di riguardare le specifiche relative ai comandi "lineare", "estensione" e "prospetto".
Estensione e prospetto sono nella parte di progetto del secondo appello.
Ci sto ragionando ma per ora mi sfugge. |
kalbiz |
anche per me è abbastanza nebulosa ...
come faccio a definire un Dispositivo ??
D =(<c1,x1><c2,x2>...<cn,xn>)
le coordinate non vengono mai inserite ?? |
BeppeGoal |
Qualcuno ha capito qualcosa in merito alla definizione / posizionamento dei ganci?
:? |
fa88bio |
ciao a tutti...a quanto ho capito io la funzione lineare fissa la posizione dei componenti al momento della chiamata alla funzione stessa:::
l(2 7 17 24 26) significa che:
si ha a dispozizione 26-2=24 come lunghezza max del dispositivo;
il primo componente deve avere lunghezza <= di 7-2=5 unità;
il secondo <= 17-7=10 unità;
il terzo <=24-17=7 unità;
il quarto <=26-24 unità..
per questo motivo i dispositivi possono essere piu di uno e di questi si vuole stampare solo quello avente area totale maggiore....
Il problema appunto è ke se come primo componente ad esempio, nella struttura dati ce ne sono 4 che nn superano la lughezza, come secondo ce ne sono 6,ecc.....bisogna provare un numero abbastanza grosso di combinazioni per ottenere i dispositivi
il problema quindi è che quello di implementare un algoritmo che provi tutte le possibili combinazioni sui componenti |
TheKaneB |
oops.. post sbagliato... |
kalbiz |
mi blocca per ora un problema ancora più semplice ...
come gestire lo stream di dati in input ??
ho provato con il codice qua sotto ma ... va a seconda dei casi ... cioè ogni tanto funziona ogni tanto noooooooooooooo
array = (int *)malloc(sizeof(int) * 6 ); /* minimo componente */
prevSize = 6;
num = 0;
do { /* Continua finché vengono inseriti numeri */
scanf("%d",&x);
if(num >= prevSize) { /* ri-allochiamo */
prevSize += 2;
array = (int *)realloc(t, sizeof(int) * prevSize );
}
t[num++] = x;
}while((ch=getchar())!='\n');
avete idea del perchè ?? vedete errori ?? |
Guepe |
Per la disposizione lineare dopo un po di prove penso di aver capito il perchè scelga proprio quella anche se ne esistono altre con dimensione massima uguale ma ordine diverso di componenti.
Per l(2 7 17 24 26) sceglie il dispositivo formato dalle componenti che hanno maggior estensione e che soddisfano il criterio di linearità.
Ci sono 8 (se non mi sbaglio) possibili dispositivi lineari formati da:
c1 (L=4 E=12) posizioni possibili: 1°,2°,3°
c2 (L=6 E=12) posizioni possibili: 2°,3°
c3 (L=3 E=24) posizioni possibili: 1°,2°,3°
c5 (L=5 E=25) posizioni possibili: 1°,2°,3°
c6 (L=2 E=8) posizioni possibili: 4°
Dovendo avere estensione massima il dispositivo dovrà contenere per forza c5,c3 e uno tra c1 e c2 che hanno estensione uguale, ed ovviamente c6 che è l'unico a soddisfare il criterio linearità per l'ultima posizione.
Da una prima analisi, visto che nell'esempio diceva che le soluzioni possibili erano soltanto (c5,c1,c3,c6) e (c5,c2,c3,c6) ho pensato che scegliesse l'ordine dei componenti in base anche alla lunghezza di essi, infatti alla prima posizione sceglie c5, alla seconda sia c1 che c2 e alla terza c3 ma poi come soluzione finale nell'output sceglie (c5,c1,c3,c6) e quindi sto criterio va a farsi benedire....
bah pensavo di aver trovato una soluzione ma invece mi ritrovo punto a capo, quindi mi continuo a domandare perché proprio (c5,c1,c3,c6) è quella giusta quando
(c5,c2,c3,c6)
(c1,c3,c5,c6)
(c1,c5,c3,c6)
(c3,c2,c5,c6)
(c3,c5,c2,c6)
(c5,c3,c2,c6)
(c3,c1,c5,c6)
hanno estensione uguale e rispettano il criterio di linearità???? |
lux87 |
ragazzi volevo un aiuto: un consiglio su come fare ad inserire nel main i comandi "o" ed "l" (seconda e quarta riga della tabella).
grazie |
carla86 |
Una domanda ke vi può sembrare idiota, ma in qst momento sono alla frutta...
Nella funzione ordina e nella funzione lineare il numero dei parametri non è specificato, potrebbero essere 2, come 3, come 4; giusto?
allora come fate nel leggere l'input?
nel case 'o' e nel case 'l' cosa fate, prima un ciclo ke vi conti quanti parametri avete e poi un ciclo ke ve li memorizza in un array? oppure mi sfugge qualche funzione o modo più immediato x sapere il numero dei parametri?
grazie mille |
carla86 |
Originally posted by Guepe
Per la disposizione lineare dopo un po di prove penso di aver capito il perchè scelga proprio quella anche se ne esistono altre con dimensione massima uguale ma ordine diverso di componenti.
Per l(2 7 17 24 26) sceglie il dispositivo formato dalle componenti che hanno maggior estensione e che soddisfano il criterio di linearità.
Ci sono 8 (se non mi sbaglio) possibili dispositivi lineari formati da:
c1 (L=4 E=12) posizioni possibili: 1°,2°,3°
c2 (L=6 E=12) posizioni possibili: 2°,3°
c3 (L=3 E=24) posizioni possibili: 1°,2°,3°
c5 (L=5 E=25) posizioni possibili: 1°,2°,3°
c6 (L=2 E=8) posizioni possibili: 4°
Dovendo avere estensione massima il dispositivo dovrà contenere per forza c5,c3 e uno tra c1 e c2 che hanno estensione uguale, ed ovviamente c6 che è l'unico a soddisfare il criterio linearità per l'ultima posizione.
Da una prima analisi, visto che nell'esempio diceva che le soluzioni possibili erano soltanto (c5,c1,c3,c6) e (c5,c2,c3,c6) ho pensato che scegliesse l'ordine dei componenti in base anche alla lunghezza di essi, infatti alla prima posizione sceglie c5, alla seconda sia c1 che c2 e alla terza c3 ma poi come soluzione finale nell'output sceglie (c5,c1,c3,c6) e quindi sto criterio va a farsi benedire....
bah pensavo di aver trovato una soluzione ma invece mi ritrovo punto a capo, quindi mi continuo a domandare perché proprio (c5,c1,c3,c6) è quella giusta quando
(c5,c2,c3,c6)
(c1,c3,c5,c6)
(c1,c5,c3,c6)
(c3,c2,c5,c6)
(c3,c5,c2,c6)
(c5,c3,c2,c6)
(c3,c1,c5,c6)
hanno estensione uguale e rispettano il criterio di linearità????
anke qui magari è una risposta stupida xo' ho fatto questo ragionamento:
siamo tutti daccordo ke x avere l'estensione massima deve per forza avere c5 e c3. poi l'unica che ci sta in posizione 4 è c6.
ora poteva scegliere tra c1 e c2 ma siccome sono tutte e due con estensione uguale ha scelto quella che è stata inserita x prima (in ordine lessicografico) e quindi c1?!
come ragionamento potrebbe essere o è una cavolata?
Alla fine voi come struttura x cosa avete optato? Io ho optato per un'albero red-black. |
pirlo21 |
Riguardo alla funzione lineare avevo posto lo stesso dubbio qualche giorno fa...bisogna capire il criterio di scelta tra le varie soluzioni...
Per la struttura dati anch'io ho usato un albero, però ora che sono alle prese con la funzione lineare non ne sono più molto convinto...
Infondo sto albero va bene solo per l'inserimento perchè per la funzione ordina e la funzione lineare è un casino...panico |
Guepe |
Originally posted by carla86
anke qui magari è una risposta stupida xo' ho fatto questo ragionamento:
siamo tutti daccordo ke x avere l'estensione massima deve per forza avere c5 e c3. poi l'unica che ci sta in posizione 4 è c6.
ora poteva scegliere tra c1 e c2 ma siccome sono tutte e due con estensione uguale ha scelto quella che è stata inserita x prima (in ordine lessicografico) e quindi c1?!
come ragionamento potrebbe essere o è una cavolata?
Alla fine voi come struttura x cosa avete optato? Io ho optato per un'albero red-black.
allora dovrebbe essere (c1,c3,c5,c6) la sequenza corretta se si guardasse l'ordine di inserimento, o anzi (c5,c3,c1,c6) seguendo prima l'ordine per estensione e in caso di ugualianza in base all'inserimento.... |
carla86 |
scusa ma x la funzione ordina: conta ke lui ti da un tot d codici identificativi e se quei codici identificativi li trovi allora devi stamparglieli ordinati per costo..
forse x questo caso è meglio crearsi una lista d supporto dove ordinare i nodi ke hanno corrispondente codice identificativo e ke hai estratto dall'albero.
mi sai dire come fare a leggere un numero variabile di interi; ossia mi spiego meglio, nella funzione ordina (e neanche in quella lineare) non ti dice a priori quanti elementi ti darà...
come fai?
ad esempio nel comando
o 5 27 89 65
ti da 4 codici identificativi (ma potrebbe dartene 5 oppure 2 oppure 8) come fai?
se leggo un numero alla volta, faccio partire la funzione d ricerca nell'albero, se lo trova lo voglio mettere in un array di supporto cosi ke una volta trovati tutti li ordino x costo.
ma nn sapendo quanti sono posso ogni volta riallocare l'array di una posizione in più con la calloc?
voi come fate? |
carla86 |
Originally posted by Guepe
allora dovrebbe essere (c1,c3,c5,c6) la sequenza corretta se si guardasse l'ordine di inserimento, o anzi (c5,c3,c1,c6) seguendo prima l'ordine per estensione e in caso di ugualianza in base all'inserimento....
no no io continuavo il tuo ragionamento.
secondo me è giusto come hai ragionato tu e l'ultima scelta che ha fatto il prof ossia se scegliere tra c1 e c2 ha scelto il primo in ordine lessicografico perchè l'estensione era uguale. |
carla86 |
no hai ragione rileggendo e ripensandoci non si riesce proprio a capire questo criterio...
mi sa che domani farò un salto in comelico e se il prof è li chiedo se posso salire un attimo a farmi spiegare sta cosa, perchè proprio non si capisce.. mah |
Guepe |
Originally posted by carla86
no no io continuavo il tuo ragionamento.
secondo me è giusto come hai ragionato tu e l'ultima scelta che ha fatto il prof ossia se scegliere tra c1 e c2 ha scelto il primo in ordine lessicografico perchè l'estensione era uguale.
ahhhh capito, fino alla scelta dei due dispositivi ci siamo, cioe son quei due perché con 4 componenti di cui due della stessa estensione per forza ci son due soluzioni se si segue il criterio della lunghezza, e poi la scelta finale la si effettua in base all'ordine di inserimento.
Tra l'altro tutto questo ragionamento è puro frutto di idee, sul testo non c'è scritto nulla, quindi rimane sempre un idea che oltretutto bisogna far implementare al codice.
Almeno un idea di partenza però c'è; adesso dovrei scegliere la struttura dati giusta e poi posso incominciare a scrivere codice...non lo finirò mai in tempo....cmq il progetto assomiglia molto a "ingranaggi 2" nel quale venivano usate liste e alberi red-black |
carla86 |
dobbiamo mettercela tutta x finirlo entro l'8 giugno!!!
cmq io x le strutture dati ho scelto un albero red-black per inserire tutte le componenti.
per quanto riguarda ordina e lineare ho qualche problema d input e poi effettivamente invece che copiarle in array potrei metterli in una lista per ordinarli e stamparli..
in che ordine d tempo si ordina su una lista d pochi elementi?
xke x la ricerca sono sicura ke la cosa migliore sia l'albero red-black (letto anke sulle slide di aguzzoli) ma x ordinare pochi elementi ke tiriamo fuori dall'albero possono essere valide?
effettivamente anke x lavorare sui dispositivi mi sa ke abbiamo bisogno di memorizzare i nodi che tiriamo fuori, anche se non so con che criterio tirarli fuori... |
kalbiz |
Originally posted by lux87
ragazzi volevo un aiuto: un consiglio su come fare ad inserire nel main i comandi "o" ed "l" (seconda e quarta riga della tabella).
grazie
se può esseti di aiuto ...
ma non sono riuscito a capire perchè inserisce doppio l'ultimo numero ...
comunque
ho un array di componenti che viene aumentato con realloc a secoda del bisogno, inizialmente la struttura può contenere 6 int.
fa la scansione del valore inserito fino a che non viene premuto \n
array = (int *)malloc(sizeof(int) * 6 ); /* minimo componente */
prevSize = 6;
num = 0;
do { /* Continua finché vengono inseriti numeri */
scanf("%d",&x);
if(num >= prevSize) { /* ri-allochiamo */
prevSize += 2;
array = (int *)realloc(t, sizeof(int) * prevSize );
}
t[num++] = x;
}while((ch=getchar())!='\n');
se riesco a sistemarla oggi/domani posto la corretta ... |
kalbiz |
io sto usando un albero RB per le componenti,
per la funzione ordina ho pensato di ricercare nell'albero se esiste un componente con il codice che mi viene passato,
se viene individuato, viene inserito in una lista di appoggio tenuta ordinata per costo ...
per l'inserimento di più codici utile per
ordina e lineare ,
ho usato la funzione postata sopra, legge un tot di int e rialloca lo spazio se ne serve .... |
misterx |
sto guardandi gli alberi RB e non ho esperienza di questi quindi chiedo consigli.
avendo implementato l'albero ed avendolo popolato, non mi è chiaro ora cosa passare come parametri alle seguenti funzioni per la visita dei nodi in ordine
grazie
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
if(p != nil) {
inord(p->left,nil,op);
(*op)(p);
inord(p->right,nil,op);
}
}
/ **************************************************
**************************/
/*procedura che serve alla visita ordinata del grafo rb, chiama specificando il nodo di partenza*/
void inorder(rbtree *p, void (*op)(rbnode *))
{
inord(p->root, p->nil, op);
} |
carla86 |
Originally posted by misterx
sto guardandi gli alberi RB e non ho esperienza di questi quindi chiedo consigli.
avendo implementato l'albero ed avendolo popolato, non mi è chiaro ora cosa passare come parametri alle seguenti funzioni per la visita dei nodi in ordine
grazie
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
if(p != nil) {
inord(p->left,nil,op);
(*op)(p);
inord(p->right,nil,op);
}
}
/ **************************************************
**************************/
/*procedura che serve alla visita ordinata del grafo rb, chiama specificando il nodo di partenza*/
void inorder(rbtree *p, void (*op)(rbnode *))
{
inord(p->root, p->nil, op);
}
come l'hai popolato? o meglio, con la funzione di inserimento hai fatto in modo che fossero ordinati dalla radice o dalla foglia? |
loreste |
Dunque, sto aiutando un amico a fare questo progetto....
Abbiamo utilizzato un albero di ricerca ordinato per Id, in questo modo quando stampiamo tutti i componenti sono già ordinati con la ricerca simmetrica, se stampo per famiglia eseguo sempre la ricerca simmetrica, se fa parte della famiglia allora stampo.
Manca solo il punto della linearità, l'esempio del docente (esempio 1) è chiaro in quanto da per scontato su quali ganci sono appesi i componenti, ma nel progetto non è chiaro su quali ganci collocare i componenti, esempio
l(2 7 17 24 26)
quale/i componente si trova sul gancio 2??????
qualche idea? |
carla86 |
Originally posted by loreste
Dunque, sto aiutando un amico a fare questo progetto....
Abbiamo utilizzato un albero di ricerca ordinato per Id, in questo modo quando stampiamo tutti i componenti sono già ordinati con la ricerca simmetrica, se stampo per famiglia eseguo sempre la ricerca simmetrica, se fa parte della famiglia allora stampo.
Manca solo il punto della linearità, l'esempio del docente (esempio 1) è chiaro in quanto da per scontato su quali ganci sono appesi i componenti, ma nel progetto non è chiaro su quali ganci collocare i componenti, esempio
l(2 7 17 24 26)
quale/i componente si trova sul gancio 2??????
qualche idea?
ciao! quindi voi state utilizzando un albero di ricerca normale, non un albero red-black giusto?
ma cm prestazioni in ordine di tempo non sono migliori gli alberi red-black?
anke io avevo optato x dei semplici alberi di ricerca, ma poi guardando le slide d aguzzoli mi è sembrato meglio gli alberi rosso neri..
cmq x quanto riguarda la linearità purtroppo siamo tutti nella stessa barca xke non è ben spiegato come sono relazionate le posizioni che da nel comando con i componenti..
infatti io domani mattina vado a ricevimento (gliel'ho chiesto via mail) proprio x capire bene sta situazione del lineare...
anke xke tra l'altro non ti da neanche quante posizioni sono, x cui come leggi tutte le posizioni per poi inserirle in qualche struttura? |
carla86 |
e x la funzione ordina invece come fai? usi una lista d supporto?
xke devi cercare i componenti d cui nella funzione ordina ti da i codici identificativi e poi li devi stampare in ordine ma in base al costo.. |
loreste |
l'albero rb sono più performanti nella ricerca, sai che nel caso peggiore ci metti 2 Log n, mentre nell'albero di ricerca i caso peggiore è n, detto questo è indifferente.
Per quanto riguarda l'ordina, creo un secondo albero temporaneo con i soli elementi di mio interesse (cosi non spreco ram). |
carla86 |
ragazzi magari è l'ora ma ho un problema con la funzione ordina.
nel senso che non so quanti codici identificativi mi inserisce,
nella dichiarazione di funzione come fate cn i parametri? cosa mettete?
tanto che ci sono un'altra domandina:
x quanto riguarda le stampe voi avete fatto le due funzioni di visita in ordine a parte come c'è implementato in algoteam oppure visto la funzione inorder che semplicemente richiama la funzione ricorsiva inorder la chiamate direttamente da dentro la funzione stampa?!!?
grazie mille!!! Ripeto probabilmente sono cavolate, è ke l'ora d certo nn aiuta a ragionare.. |
BeppeGoal |
Originally posted by carla86
...
infatti io domani mattina vado a ricevimento (gliel'ho chiesto via mail) proprio x capire bene sta situazione del lineare...
anke xke tra l'altro non ti da neanche quante posizioni sono, x cui come leggi tutte le posizioni per poi inserirle in qualche struttura?
Per favore poi puoi postare quel che ti dice il prof? Quel punto è ostico un po' per tutti.
Grazie mille! |
carla86 |
sono da poco tornata a casa dall'uni.
il ricevimento del prof è durato 10 minuti.
praticamente ci siamo fatti più problemi che altro, siamo stati a cercare qualcosa d inesistente.
nella funzione lineare al prof aguzzoli basta che gli venga stampato un dispositivo lineare con estensione massima e ke rispetti quelle posizioni.
non fatevi ingannare dal file di output d'esempio, xke quello appunto è solo un esempio e nn ce nessun criterio x il quale abbia scelto quel dispositivo al posto dell'altro.
e anke le altre combinazioni di componenti ke sono cmq dispositivi lineari e rispettano le posizioni andavano bene.
praticamente loro ne hanno preso uno a caso tra tutti quelli lineari e noi dobbiamo fare lo stesso, ossia stampare un dispositivo lineare con estensione massima e ke ovviamente rispetti le posizioni date dagli argomenti della funzione.
invece chiedo a voi: come avete fatto per la funzione ordina ke ha numero di parametri arbitrari e nn si sa a priori?
grazie |
BeppeGoal |
Grazie per il post.
Ma non riesco a capire, l(2 7 17 24 26) i numeri sono i ganci, giusto?
Come faccio a sapere che a quelle posizioni siano presenti componenti? E quali componenti se in fase di creazione non viene specificata la posizione?
Probabilmente, come dici tu, è più semplice di quel che si pensi, però non riesco ad afferrare!! |
carla86 |
allora, come anke mi ha detto il prof oggi, si hanno solo dei componenti, infatti nessuna funzione prima d lineare ti chiede d gestire o fare qualcosa con i dispositivi.
quando viene chiamata la funzione lineare hai una struttura dati con dei componenti e una serie d posizioni.
sei tu ke devi fare gli accoppiamenti componente, posizione in modo ke la lista d quest'ultimi formi un dispositivo lineare con xo' estensione massima.
ripeto invece la mia domanda come fate quando avete funzioni tipo ordina o tipo lineare in cui nn sapete quanti elementi avete? |
Guepe |
non so a che punto siete voi, forse sono io ignorante, mettendo come presupposto che la chiave di ogni nodo è l'identificativo del componente, quando bisogna fare la ricerca in base alla famiglia del componente come fate? e sopratutto nella ricerca dei componenti lineari l'id nn serve proprio a nulla....
sono nel panico, datemi delucidazioni... |
loreste |
Per carla86
io ho implementato un albero di ricerca ordinato per ID, ho una funzione, che dato un ID mi restituisce il nodo, clono il nodo e creo un altro albero con tutti i nodi che mi interessano ordinandoli per costo, stampo i dati e distruggo il secondo albero |
carla86 |
Originally posted by loreste
Per carla86
io ho implementato un albero di ricerca ordinato per ID, ho una funzione, che dato un ID mi restituisce il nodo, clono il nodo e creo un altro albero con tutti i nodi che mi interessano ordinandoli per costo, stampo i dati e distruggo il secondo albero
grazie!! anke io pensavo d fare una cosa simile ma il mio problema è cosa fare nella funzione proprio nella funzione ordina?
nello switch del main leggi i codici identificativi, li passi alla funzione d ricerca e trovi il nodo ke inserisci in un'altra struttura temporanea.
ma tutto questo lo fai nel main? allora nella funzione ordina fai solo la stampa oppure fai altro?
ecco il mio problema non è tanto l'idea x come farlo ma dove fare le cose.. |
carla86 |
per esempio nella funzione componente sai quanti numeri devi leggere e quindi poi riesci a passare i dati alla funzione; ma nelle funzioni in cui nn sai quanti interi devi leggere come fate?
ah dimenticavo lo stesso problema si pone in lineare xke non so quante posizioni mi mette a priori... |
loreste |
Non ho una funzione ordina, ho una funzione che gli passi un albero (la radice) e lui stampa i nodi già ordinati....
quindi nel main ho
if carattero letto = s
inorder(albero1);
if carattero letto = o
costruisci il secondo albero;
inorder(albero2); |
carla86 |
scusami se sono pignola...
io con la funzione ordina mi riferivo all'operazione che è stata chiesta nel testo. cmq credo d aver capito.
grazie |
kalbiz |
incontro un altro problema di input...come avete distinto tra il comando
s --> stampa()
s f --> stampa tutti quelli della famiglia
intendo proprio nella parte
case 's': /* stampa */ |
BeppeGoal |
Scusa Carla,
cosa intendi per estensione massima?
Che tra tutti i componenti che formano dispositivi lineari, si sceglie il dispositivo con l'estensione massima? |
misterx |
cosa ci si inventa per la funzione lineare ?
ciao |
carla86 |
Originally posted by BeppeGoal
Scusa Carla,
cosa intendi per estensione massima?
Che tra tutti i componenti che formano dispositivi lineari, si sceglie il dispositivo con l'estensione massima?
si esatto. per estensione massima si intende ke tra tutti i dispositivi lineari devi stampargli quello con estensione massima.
occhio che nn ce ne uno solo di dispositivo con estensione massima, ma ce ne più d uno ma al prof ne interessa uno qualsiasi d questi. |
mark |
io non ho ancora capito cosa si intende con:
Esempio 2 Siano c1, c2 ......., c6 le componenti definite nell'Esempio 1. L'operazione: lineare (2; 7; 17; 24; 26)
può produrre uno dei due dispositivi seguenti, entrambi di estensione 25 + 12 + 24 + 8 = 69
(c5; 2; c1; 7; c3; 17; c6; 24) oppure (c5; 2; c2; 7; c3; 17; c6; 24): |
mark |
Originally posted by fa88bio
ciao a tutti...a quanto ho capito io la funzione lineare fissa la posizione dei componenti al momento della chiamata alla funzione stessa:::
l(2 7 17 24 26) significa che:
si ha a dispozizione 26-2=24 come lunghezza max del dispositivo;
il primo componente deve avere lunghezza <= di 7-2=5 unità;
il secondo <= 17-7=10 unità;
il terzo <=24-17=7 unità;
il quarto <=26-24 unità..
per questo motivo i dispositivi possono essere piu di uno e di questi si vuole stampare solo quello avente area totale maggiore....
Il problema appunto è ke se come primo componente ad esempio, nella struttura dati ce ne sono 4 che nn superano la lughezza, come secondo ce ne sono 6,ecc.....bisogna provare un numero abbastanza grosso di combinazioni per ottenere i dispositivi
il problema quindi è che quello di implementare un algoritmo che provi tutte le possibili combinazioni sui componenti
ciao,
scusa vuoi dire che 2 7 17 24 26 sono le posizioni dei componenti sulla griglia/nastro?
Vuol dire che il primo componente parte da posizione 2 e può occupare sino a posizione 7 e cioè 5 posizioni e se un componente è lungo diciamo 6 lo sis carta ?
ciao |
kalbiz |
se le prime coordinate che ti passa sono 2 e 7
il componente deve avere lunghezza massimo 5
tra quelli di lunghezza massimo 5 cerchi quello con area maggiore ...
"
non è chiaro però come possa esistere un dispositivo lineare non adeguato "
se ho anche solo un componente che si adatta ad uno dei ganci perchè non dovrebbe costruire un dispositivo ??
cioè
c 1 2 3 2 5
c 2 3 4 3 5
l 2 4 5
dovrebbe restituire
c 1 2 3 2 5
sembra invece dagli esempi che debba restituire
Non esiste componente adeguato
idee?? |
carla86 |
mi sapete dire xke nelle visite simmetriche implementate dal prof, sia x quella dell'albero di ricerca sia per quelli dell'albero red-black, tra i parametri ce un puntatore a funzione ke poi nn viene usato da nessun'altra parte??
void inorder(searchtree *p, void (*op)(searchtree *))
{
if(p) {
inorder(p->left,op);
(*op)(p);
inorder(p->right,op);
}
}
e poi xke nella visita inorder per gli alberi red-black ci sono addirittura due funzioni? nn basta in order, passandogli al posto d un nodo qualsiasi, la radice dell'albero?
void inord(rbnode *p, rbnode *nil, void (*op)(rbnode *))
{
if(p != nil) {
inord(p->left,nil,op);
(*op)(p);
inord(p->right,nil,op);
}
}
void inorder(rbtree *p, void (*op)(rbnode *))
{
inord(p->root, p->nil, op);
} |
misterx |
io ho toccato il meno possibile evitando di eliminare quello che non è strattamente chiaro, al massimo viene passato un parametro che non viene usato in questa implementazione |
Spr1gg4N |
ragazzi ma voi come avete risolto per l'input del comando "o" (ordina)?
non riesco proprio a creare un array di int che aumenti dimensione man mano che viene inserito un nuovo numero in input -.-' |
Spr1gg4N |
altra domanda: ma quando un albero (creato magari per un'operazione momentanea) non mi serve più, come faccio esplicitamente a deallocarlo? |
Spr1gg4N |
Per quanto riguarda la funzione lineare ho un paio di domande:
1) se non esiste una componente che stia nello spazio tra due ganci che si fa? Si lascia vuoto quello spazio oppure si stampa il messaggio di errore?
2) nell'esempio 2, come secondo componente mette c1 oppure c2 che hanno entrambi estensione 12....come mai non sceglie c3 che è più corto dei precedenti ma ha estensione maggiore (24)?
EDIT:
-------------
quindi come soluzione possibile dell'esempio 2 io metterei anche:
69: (<c5,2>,<c3,7>,<c1,17>,<c6,24>) oppure
69: (<c5,2>,<c3,7>,<c2,17>,<c6,8>)
voi che dite? |
mark |
Originally posted by Spr1gg4N
altra domanda: ma quando un albero (creato magari per un'operazione momentanea) non mi serve più, come faccio esplicitamente a deallocarlo?
bella domanda: io inizializzo banalmente il puntatore alla radice a NULL, purtroppo è una sporca che non dealloca la memoria |
Spr1gg4N |
Originally posted by mark
bella domanda: io inizializzo banalmente il puntatore alla radice a NULL, purtroppo è una sporca che non dealloca la memoria
mmm si potrebbe una soluzione...però prima cmq bisogna eliminare tutti i nodi altrimenti la memoria è cmq occupata. |
mark |
Originally posted by Spr1gg4N
mmm si potrebbe una soluzione...però prima cmq bisogna eliminare tutti i nodi altrimenti la memoria è cmq occupata.
sporca numero 2
usare la funzione inorder() per visitare tutto l'albero e usare nodedelete() o similare per eliminare tutti i nodi
infine eliminare la radice con NULL |
Spr1gg4N |
esatto.
Qualche idea sulla mia domanda riguardo la funzione lineare?
E' l'ultima cosa che mi manca per finire il progetto ma sono bloccato :( |
kalbiz |
Originally posted by Spr1gg4N
Per quanto riguarda la funzione lineare ho un paio di domande:
1) se non esiste una componente che stia nello spazio tra due ganci che si fa? Si lascia vuoto quello spazio oppure si stampa il messaggio di errore?
2) nell'esempio 2, come secondo componente mette c1 oppure c2 che hanno entrambi estensione 12....come mai non sceglie c3 che è più corto dei precedenti ma ha estensione maggiore (24)?
EDIT:
-------------
quindi come soluzione possibile dell'esempio 2 io metterei anche:
69: (<c5,2>,<c3,7>,<c1,17>,<c6,24>) oppure
69: (<c5,2>,<c3,7>,<c2,17>,<c6,8>)
voi che dite?
nelle specifiche dice che possono esserci anche diverse soluzioni per i dispositivi, basta che siano di dimensione massima ... quindi dovrebbe andare bene ...
io almeno ho interpretato così ... |
mostrielo |
Originally posted by Spr1gg4N
Qualche idea sulla mia domanda riguardo la funzione lineare?
E' l'ultima cosa che mi manca per finire il progetto ma sono bloccato :(
Per l'operazione lineare si può procedere così:
1) opeazione 'c': in fase di costruzione dell'albero di ricerca (o rb) dei Componenti per Id, costruite un'altro albero ordinato per Area (per comodità si può aggiungere alla struct Componente l'attributo Area (l x h))
2) operazione 'l': fatevi dare dall'albero dei Componeneti per Area il max e provate a posizionarlo sul primo gancio dato (cioè se la lunghezza del rettangolo è <= alla distanza tra il primo e il secondo gancio):
- se ci sta lo appendete al gancio e vi fate dare il predecessore (di quello con area max corrente) e ripartite dal gancio successivo, se non ci sta provare a posizionarlo sul secondo gancio e cosi fino eventualmente fino all'n-esimo gancio;
- se non ci sta su nessun gancio dato, vi fate dare il predecessore (di quello con area max corrente) e ripetete a partire sempre dal primo gancio libero;
- tutto ciò finché non avete posizionato un Componente su ogni gancio dato oppure, a forza di chiedere il predecessore non avete percorso tutto l'albero (ovvero siete arrivati a quello con Area min). Se avete percorso tutto l'albero e non avete posizionato un rettagolo su ogni gancio dato allora non esiste un dispositivo lineare adeguato. |
carla86 |
Originally posted by kalbiz
se ho anche solo un componente che si adatta ad uno dei ganci perchè non dovrebbe costruire un dispositivo ??
cioè
c 1 2 3 2 5
c 2 3 4 3 5
l 2 4 5
dovrebbe restituire
c 1 2 3 2 5
il comando lineare ke hai scritto tu forma un dispositivo composto da due componenti. quindi se nn ci sono due componenti che si adattano a quelle distanze allora nn ce un dispositivo adatto |
carla86 |
Originally posted by misterx
io ho toccato il meno possibile evitando di eliminare quello che non è strattamente chiaro, al massimo viene passato un parametro che non viene usato in questa implementazione
grazie!! poi ho capito ke la funzione in più ke parlava d parametri era semplicemente una qualsiasi funzione (io l'ho sostituita con la printf) e nell'intestazione d funzione nn ho messo nulla. |
carla86 |
Originally posted by Spr1gg4N
ragazzi ma voi come avete risolto per l'input del comando "o" (ordina)?
non riesco proprio a creare un array di int che aumenti dimensione man mano che viene inserito un nuovo numero in input -.-'
questo problema ce l'avevo anke io e la risp del prof è stata:
"la lista è una struttura dati dinamica.."
quindi forse t conviene usare una lista. |
carla86 |
Originally posted by Spr1gg4N
ragazzi ma voi come avete risolto per l'input del comando "o" (ordina)?
non riesco proprio a creare un array di int che aumenti dimensione man mano che viene inserito un nuovo numero in input -.-'
se hai usato un albero binario d ricerca su algoteam ci sono la sia la funzione x cancellare un nodo dall'albero, sia la funzione x cancellare l'albero.
mentre invece x l'albero red-black ce solo la funzione x cancellare un nodo..
|
carla86 |
Originally posted by Spr1gg4N
Per quanto riguarda la funzione lineare ho un paio di domande:
1) se non esiste una componente che stia nello spazio tra due ganci che si fa? Si lascia vuoto quello spazio oppure si stampa il messaggio di errore?
2) nell'esempio 2, come secondo componente mette c1 oppure c2 che hanno entrambi estensione 12....come mai non sceglie c3 che è più corto dei precedenti ma ha estensione maggiore (24)?
EDIT:
-------------
quindi come soluzione possibile dell'esempio 2 io metterei anche:
69: (<c5,2>,<c3,7>,<c1,17>,<c6,24>) oppure
69: (<c5,2>,<c3,7>,<c2,17>,<c6,8>)
voi che dite?
per la domanda uno: io stamperei il messaggio d'errore,
in tutti quei casi in cui anke solo x uno spazio nn riesci a creare un dispositivo lineare stamperei il messaggio d'errore.
per la domanda due: il prof a ricevimento mi ha detto ke a lui va bene qualsiasi dispositivo lineare ke abbia estensione massima; e ke quelli scritti nel testo sono degli esempi ma potrebbero benissimo essercene altri.
a lui basta ke gliene stampi uno!! |
carla86 |
Originally posted by mark
sporca numero 2
usare la funzione inorder() per visitare tutto l'albero e usare nodedelete() o similare per eliminare tutti i nodi
infine eliminare la radice con NULL
cavolo a qst nn c'avevo pensato..
mi sembra un'ottima idea!!! |
carla86 |
ciao!!
qualcuno d voi ke ha implementato gli alberi di ricerca binaria e ha implementato anke la funzione di distruggere l'albero.
quando andate a compilare con -Wall e -ansi anke a voi da questo warning:
In function ‘distruggialbero’:
progetto.c:459: warning: suggest parentheses around assignment used as truth value
secondo voi da cosa è dovuto? vi copio la mia riga 459
while(p = cancella(p, p));
grazie |
mostrielo |
Originally posted by carla86
ciao!!
qualcuno d voi ke ha implementato gli alberi di ricerca binaria e ha implementato anke la funzione di distruggere l'albero.
quando andate a compilare con -Wall e -ansi anke a voi da questo warning:
In function ‘distruggialbero’:
progetto.c:459: warning: suggest parentheses around assignment used as truth value
secondo voi da cosa è dovuto? vi copio la mia riga 459
while(p = cancella(p, p));
grazie
prova con while((p = cancella(p, p))); |
carla86 |
grazie, ha funzionato mancavano una coppia di parentesi!! |
Guepe |
sto impazzendo sull'ordinamento per costo...io mi ritrovo una lista su kiave id con dentro i componenti presi dall'albero. come faccio a ordinarli in base al costo? come avete fatto voi? |
carla86 |
Originally posted by Guepe
sto impazzendo sull'ordinamento per costo...io mi ritrovo una lista su kiave id con dentro i componenti presi dall'albero. come faccio a ordinarli in base al costo? come avete fatto voi?
quando li inserisci, invece ke inserirli in ordine d id inseriscili direttamente in ordine d costo.. |
carla86 |
mi dite x favore come faccio a scrivere una funzione ke ritorna un'array d interi?
int *pos(lista *p, int nro)
{
int pos[nro];
/*faccio quello che devo fare*/
return pos;
}
può andare bene? se no com'è? grazie |
Guepe |
Risolto!!ho abbandonato le liste e ho creato u nalbero nuovo e poi inorder fa tutto, rimane solo un problema....nn mi prende l'ultimo componente nella ricerca e nn so il perchè...bah continuo a far prove.... |
Guepe |
Originally posted by Guepe
Risolto!!ho abbandonato le liste e ho creato u nalbero nuovo e poi inorder fa tutto, rimane solo un problema....nn mi prende l'ultimo componente nella ricerca e nn so il perchè...bah continuo a far prove....
non è che nn mi prende l'ultimo, è inorder che mi restituisce solo due componenti dell'albero.... |
carla86 |
x la funzione lineare voi come fate? o meglio dopo aver letto le posizioni fate uno alla volta i componenti partendo da quello da mettere in prima posizione oppure partite da quello ke deve avere lunghezza minore..
mi spiego meglio con un esempio
l 2 7 17 24 26
partitè dal componente da mettere nella posizione due oppure partite dal componente da mettere in posizione 24 visto ke deve essere il più piccolo?
nel caso partite da quello più piccolo come fate? |
Guepe |
proprio non riesco a farla andare sta funzione ordina.....mi stampa solo due valori dell'albero....non riesco a capire perke mi stampa solo la radice e il figlio sinistro cioe i componenti 24 e 7... |
carla86 |
qualcuno ha fatto la funzione lineare?!?!
io mi sa ke sono fusa..
sono riuscita a leggere tutte le posizioni inseritemi cn il comando l e le ho memorizzate in una lista.
mi sono creata un'altro albero rb con i componenti ordinati per area (come da qualcuno suggerito).
ma ora nn so come calcolare, o meglio nn so dove memorizzare le distanze, ogni volta la distanza tra una posizione e la successiva x poter controllare ke il massimo ritornatomi dall'albero ordinato per area possa stare in quella posizione.
qualche idea?? |
mostrielo |
Originally posted by carla86
qualcuno ha fatto la funzione lineare?!?!
io mi sa ke sono fusa..
sono riuscita a leggere tutte le posizioni inseritemi cn il comando l e le ho memorizzate in una lista.
mi sono creata un'altro albero rb con i componenti ordinati per area (come da qualcuno suggerito).
ma ora nn so come calcolare, o meglio nn so dove memorizzare le distanze, ogni volta la distanza tra una posizione e la successiva x poter controllare ke il massimo ritornatomi dall'albero ordinato per area possa stare in quella posizione.
qualche idea??
Io ho usato degli array:
<< 2, 7, 17, 24, 26>> input
<< 2, 7, 17, 24>> : gancio
<< 5, 10, 7, 2>> : base (gancio[i+1] - gancio[i])
<<null,null,null,null>> : puntatori a Componente |
Guepe |
Non so dove sbaglio ma dopo tre ore mi sto per mangiare il pc!!
Carla nella funzione ordina per creare un albero nuovo inserendo i componenti con kiave c (costo) tu come hai fatto? Hai riscritto le funzioni di inserimento dei componenti nell'albero? Cosi facendo mi continua a ordinarli per id anche se nelle due funzioni la posizione dei nodi è definita dalle equazioni con il costo come paramentro.....nn capisco come sia possibile... |
carla86 |
Originally posted by Guepe
Non so dove sbaglio ma dopo tre ore mi sto per mangiare il pc!!
Carla nella funzione ordina per creare un albero nuovo inserendo i componenti con kiave c (costo) tu come hai fatto? Hai riscritto le funzioni di inserimento dei componenti nell'albero? Cosi facendo mi continua a ordinarli per id anche se nelle due funzioni la posizione dei nodi è definita dalle equazioni con il costo come paramentro.....nn capisco come sia possibile...
dove ci sono in confronti per intendetci il prof scrive k<nodo->campo tu per id hai scritto id<nodo.id ora scrivi c<nodo.costo
mi sa ci sono un paio d confronti.
e poi inorder è una funzione ricorsiva; tra le due chiamate ci metti la printf x farli stampare |
Guepe |
Originally posted by Guepe
Non so dove sbaglio ma dopo tre ore mi sto per mangiare il pc!!
Carla nella funzione ordina per creare un albero nuovo inserendo i componenti con kiave c (costo) tu come hai fatto? Hai riscritto le funzioni di inserimento dei componenti nell'albero? Cosi facendo mi continua a ordinarli per id anche se nelle due funzioni la posizione dei nodi è definita dalle equazioni con il costo come paramentro.....nn capisco come sia possibile...
No scusa sbagliavo una funzione, riscrivendo le le funzioni di inserimento, inorder sull'albero mi stampa solo due nodi però ordinati giusti.... |
|
|
|
|