Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
Pages: [1] 2 3 
[PROGETTO] "Mappe 2"
Clicca QUI per vedere il messaggio nel forum
Simeon
Ci tenevo ad inaugurare il thread di discussione per questo progetto. Certo che il titolo è proprio originale :asd:

maynard80
beh quanto è differente da mappe1?

Simeon
Originally posted by maynard80
beh quanto è differente da mappe1?


Ho guardato di sfuggita il testo e mi pare identico, oggi pomeriggio me lo studio per bene...

Ho paura :#

Sephirot
Originally posted by Simeon
Ho guardato di sfuggita il testo e mi pare identico

sisi è proprio uguale

darkAntAreS
non ho la minima idea di quanto sia uguale, ma non credo proprio che il prof l'abbia fatto anche solo simile, altrimenti sai quanto ci si metteva a farsi passare il progetto da uno dell'appello scorso? :/

cmq ci penseremo domani, io e chi ha fatto lo scritto oggi: ci meritiamo un po' di riposo dopo la mazzata di stamattina ;)

YoMo
L'idea del piano, sequenze di punti, mappe.... è la stessa.
Cambia il fine ma sn convinto che parte del progetto di gennaio è tranquillamante riutilizzabile.

darkAntAreS
uhm...se è così gli darò un'occhiata ;)

silver
ciao a tutti,
ho letto il progetto ed ho fatto una prova per verificare l'esempio, ma non mi torna qualcosa......
nel file primo.txt ci sono le coordinate dei punti del piano (P0........Pn) ossia P(x,y) del primo punto fino all'ultimo...
il valore del punto viene calcolato con la formula del modulo nelle note 4
es :

c 4 4 primo.txt ho m x n = 16 punti da P0 ........... P15

per cui da v0......v 15

a=x mod m --> a=-1 mod 4 = 3
b=y mod n --> a= -3 mod 4 = 1

Val(-1,-3)=v(a+mb) = v6 che corrisponde a 5 corretto ??

ma quando verifico l'output con l non mi torna il valore 1
e con il sottopercorso non mi torna 13: e le coordinate !!

a voi torna qualcosa ??

Diuzza
-1 mod 4 fa -1. E' sbagliato l'esempio del prof sul modulo.
Il modulo puoi semplificarlo così:
x mod y :
X-(parteintera(x/y)*y)
nel tuo caso:
-1-(parteintera(-1/4)*4) = -1-(0*4)=-1

Diuzza
Se non credete provate anche con la calcolatrice.
Cmq l'ordine in cui sono messi i valori nel file è semplicemente nell'esempio del proff:
(0,0)(1,0)(2,0)(3,0)(1,0)(1,1)...
Sono praticamente in ordine se ho fatto bene i calcoli.
Cmq avete pensato a che strutture usare?

YoMo
Originally posted by Diuzza
-1 mod 4 fa -1. E' sbagliato l'esempio del prof sul modulo.
Il modulo puoi semplificarlo così:
x mod y :
X-(parteintera(x/y)*y)
nel tuo caso:
-1-(parteintera(-1/4)*4) = -1-(0*4)=-1


Non direi http://www.google.it/search?hl=it&q...on+Google&meta=

-340 mod 60 = -40 ???? sembrerebbe di no...
"The mod function is defined as the amount by which a number
exceeds the largest integer multiple of the divisor that is
not greater than that number. In this case, -340 lies between
-360 and -300, so -360 is the greatest multiple LESS than -340;
we subtract 60 * -6 = -360 from -340 and get 20."

Diuzza
Cmq io non so se è + o - uguale a quello passato perchè non l'ho guardato e ora mi sa che non c'è più il testo :-((
Passiensa

Diuzza
allora la mia calcolatrice è spastica?!? A mè da -40

YoMo
Originally posted by Diuzza
Cmq io non so se è + o - uguale a quello passato perchè non l'ho guardato e ora mi sa che non c'è più il testo :-((
Passiensa


c'è c'è.... quello passato si chiamava mappe, questo si chiama mappe2, cambi qlcosa nell'url....

YoMo
Originally posted by Diuzza
allora la mia calcolatrice è spastica?!? A mè da -40


Infatti, prova printf("%d", -1 % 4)....
Sto giungendo alla conclusione che la funzione modulo me la devo scrivere io.

darkAntAreS
io sapevo che il modulo era il resto della divisione...
es.
1) -340 mod 60 = -40
-340 / 60 fa -5 (senza contare eventuali decimali) -> -5*60 = -300 -> mancano -40
2) -1 mod 4 = -1
-1 / 4 fa 0 (senza contare eventuali decimali) -> 0*4 = 0 -> manca -1
3) -7 mod 4 = -3
-7 / 4 = -1 (senza contare eventuali decimali) -> -1*4 = -4 -> manca -3

mi pare fosse spiegato da qualche parte sul libro di dscreta...

Simeon
Ragazzi io... non riesco a trovare una struttura dati adatta alla rappresentazione del piano. Suggerimenti? La matrice è da escludere come da testo...

Simeon
Originally posted by Diuzza
-1 mod 4 fa -1. E' sbagliato l'esempio del prof sul modulo.
Il modulo puoi semplificarlo così:
x mod y :
X-(parteintera(x/y)*y)
nel tuo caso:
-1-(parteintera(-1/4)*4) = -1-(0*4)=-1


Anche io la sapevo così (parte intera inferiore per essere precisi). dove andremo a finire se non ci si può più fidare nemmeno del cormen :(

ornati
Originally posted by Simeon
Ragazzi io... non riesco a trovare una struttura dati adatta alla rappresentazione del piano. Suggerimenti? La matrice è da escludere come da testo...


Puoi usare una hash table che mappa (x,y) --> val:
http://www.dsy.it/forum/showthread....&threadid=24001

Oppure un albero di ricerca (meglio se bilanciato).

L'alternativa peggiore è usare una lista.

Con un albero bilanciato ottieni le migliori prestazioni asintotiche nel caso peggiore, mentre in pratica le hash table sono le + efficienti (caso atteso).

YoMo
Originally posted by darkAntAreS
io sapevo che il modulo era il resto della divisione...
es.
1) -340 mod 60 = -40
-340 / 60 fa -5 (senza contare eventuali decimali) -> -5*60 = -300 -> mancano -40
2) -1 mod 4 = -1
-1 / 4 fa 0 (senza contare eventuali decimali) -> 0*4 = 0 -> manca -1
3) -7 mod 4 = -3
-7 / 4 = -1 (senza contare eventuali decimali) -> -1*4 = -4 -> manca -3

mi pare fosse spiegato da qualche parte sul libro di dscreta...


E allora come me lo spieghi sul testo -2 mod 7 = 5 ?!?!?
Come ho scritto precedentemente, qual'è il più grande multiplo di 7 che sia minore o uguale a -2? E' -7, quindi -2 mod 7 = -2 - [(-7/7)*7] = -2 -[-1 * 7] = -2 - [-7] = -2 + 7 = 5
A quanto pare con il dividendo (-2) negativo è sbagliato dire che -2/7=0 ma bisogna prendere il più grande multiplo del divisore (7) che sia minore o uguale al dividendo (-2), cioè -7, quidni.... -2/7=-7/7=-1 con resto 5.

Il ragionamento quadra xro.....è un pò strano nn dite? Anche perchè in C printf("%d", -2 % 7) stampa -2.
Boh sinceramente spero che il prof si sia sbagliato.

Simeon
Originally posted by ornati
Puoi usare una hash table che mappa (x,y) --> val:
http://www.dsy.it/forum/showthread....&threadid=24001

Oppure un albero di ricerca (meglio se bilanciato).

L'alternativa peggiore è usare una lista.

Con un albero bilanciato ottieni le migliori prestazioni asintotiche nel caso peggiore, mentre in pratica le hash table sono le + efficienti (caso atteso).


Mi sa che andrò per l'albero di ricerca... boh ci penserò, grazie comunque.

Con le liste mi vengono in mente robe aberranti tipo "liste di liste", o forse un'unica lista che scorre tutti i punti da 0 a m*n...

ornati
Originally posted by Simeon
Mi sa che andrò per l'albero di ricerca... boh ci penserò, grazie comunque.

Con le liste mi vengono in mente robe aberranti tipo "liste di liste", o forse un'unica lista che scorre tutti i punti da 0 a m*n...


Guarda che NON devi assolutamente memorizzare TUTTI i punti possibili ma SOLO i punti che vengono settati esplicitamente. Tutti gli altri hanno un valore predefinito... qundi se il punto che cerchi non è nella lista (albero, hash table ...) allora sai già quanto vale.

Simeon
Originally posted by ornati
Guarda che NON devi assolutamente memorizzare TUTTI i punti possibili ma SOLO i punti che vengono settati esplicitamente. Tutti gli altri hanno un valore predefinito... qundi se il punto che cerchi non è nella lista (albero, hash table ...) allora sai già quanto vale.


Ah allora stavo sbagliando, perche io pensavo di dover memorizzare tutte le coordinate da (1,1) a (m,n) e poi assegnare il valore di default a quelli che non erano settati esplicitamente...

Cioe, una 4x4 avrebbe costituito una lista di punti (1,1)... (4,4) ognuno con val(p) determinato (se preso dal file o settato successivamente tramite valore(x,y,z) ) o di default altrimenti.

Cercherò di ragionarci a fondo per comprendere anche queste banalità ( era piu bello il progetto di JAVA :asd: )

ornati
Ecco una spiegazione alla faccenda del modulo:
http://en.wikipedia.org/wiki/Modulo_operation

Da notare questa parte:
"Some programming languages, such as ANSI C, don't define a result if either of n or a is negative. a modulo 0 is undefined in the majority of systems, although some do define it to be a."

ornati
Originally posted by Simeon
Ah allora stavo sbagliando, perche io pensavo di dover memorizzare tutte le coordinate da (1,1) a (m,n) e poi assegnare il valore di default a quelli che non erano settati esplicitamente...

Cioe, una 4x4 avrebbe costituito una lista di punti (1,1)... (4,4) ognuno con val(p) determinato (se preso dal file o settato successivamente tramite valore(x,y,z) ) o di default altrimenti.

Cercherò di ragionarci a fondo per comprendere anche queste banalità ( era piu bello il progetto di JAVA :asd: )


Seguendo il tuo vecchio ragionamento, se inerisco 4 punti di coordinate:
(-2 miliardi, -2 miliardi)
(-2 miliardi, +2miliardi)
(+2 miliardi, -2miliardi)
(+2 miliardi, +2miliardi)

ho un piano di 4 miliardi x 4 miliardi di punti circa... quindi 16 miliardi di punti.

Volendo scrivere da qualche parte il valore di ognuno di questi punti (assumiamo che sia un int di 4 byte) hai bisogno di almeno 64 miliardi di byte.

Ovvero circa 60 GB di memoria... il tutto per memorizzare 4*4 = 16 byte di informazione utile.

L'inefficienza di Java deve averti contagiato... cerca di disintossicarti!

:)

silver
ciao,
scusate ma non ho capito bene utilizziamo l'esempio del prof:

c 4 4 primo.txt dove primo.txt --> -1 -3 2 -2 2 1 0 2 -2 3 2 -1 0 -2 1 -2
questi sono i valori dei punti da P0........P15 oppure le coordinate ?

oppure il valore dei punti si calcola come nella nota 3 ??

es della prima coppia -1 -3

Vla(x,y) = v(a+mb) ossia v vale da v0......v15 giusto ?

a= x mod m = A
b= y mod n = B

il valore del punto è ??

val(-1,-3)=v(A+4*B) ossia il valore corrispondente a ??

sono mooolto confuso

YoMo
Originally posted by silver
ciao,
scusate ma non ho capito bene utilizziamo l'esempio del prof:

c 4 4 primo.txt dove primo.txt --> -1 -3 2 -2 2 1 0 2 -2 3 2 -1 0 -2 1 -2
questi sono i valori dei punti da P0........P15 oppure le coordinate ?

oppure il valore dei punti si calcola come nella nota 3 ??

es della prima coppia -1 -3

Vla(x,y) = v(a+mb) ossia v vale da v0......v15 giusto ?

a= x mod m = A
b= y mod n = B

il valore del punto è ??

val(-1,-3)=v(A+4*B) ossia il valore corrispondente a ??

sono mooolto confuso


Il valore del punto (x,y) si calcola così:

a = x mod m
b = y mod n
dove m ed n sono i parametri di crea(m, n, nome).

Una voltra trovati questi "resti" eseguendo l'operazione i = a+mb trovo l'indice del valore da assegnare a val(x,y), dove per indice intendo l'indice relativo a v0, v1,...., v(m*n+1) che trovi nel file nome.
Cioè devo assegnare l'i-esimo valore nel file a val(x,y).

Ditemi se sbaglio....

ornati
Originally posted by ornati
Ecco una spiegazione alla faccenda del modulo:
http://en.wikipedia.org/wiki/Modulo_operation

Da notare questa parte:
"Some programming languages, such as ANSI C, don't define a result if either of n or a is negative. a modulo 0 is undefined in the majority of systems, although some do define it to be a."


Tradotto in "C":

code:
int modulo(int a, int b) { int x; if (a < 0) { x = -a + b - 1; a += x - x % b; return a; } return a % b; }

Simeon
Meglio continuare qua....

Originally posted by MaurizioL
L'hash non serve a rappresentare un piano.
Dato che i punti che cambiano valore sono pochi puoi usare un albero per memorizzare quei punti il cui valore è stato cambiato.
Gli altri avranno un valore predefinito


Sto pensando di utilizzare un albero binario di ricerca con come chiavi le coordinate x e y e il valore come dato satellite... e' una buona idea? Non son sicuro se vada bene binario e nemmeno se utilizzare le coordinate come chiave...

E poi non ho capito questo: la funzione "valore (x,y,n)" va a porre a n il valore di un punto... questo punto si da per scontato che sia gia presente nel piano? Se non lo fosse andrebbe aggiunto all'interno dell'albero...

MaurizioL
Originally posted by Simeon
Meglio continuare qua....



Sto pensando di utilizzare un albero binario di ricerca con come chiavi le coordinate x e y e il valore come dato satellite... e' una buona idea? Non son sicuro se vada bene binario e nemmeno se utilizzare le coordinate come chiave...

E poi non ho capito questo: la funzione "valore (x,y,n)" va a porre a n il valore di un punto... questo punto si da per scontato che sia gia presente nel piano? Se non lo fosse andrebbe aggiunto all'interno dell'albero...


La funzione v x y n pone a n il valore del punto.
Quindi devi inserire nell'albero il punto il cui valore è stato modificato.
Io ho usato un albero binario di ricerca per memorizzare i punti, le coordinate le usavo come chiave, il valore è un dato satellite.
Se non trovi un punto nell'albero significa che ha un valore "predefinito" (quello che hai inserito usando il comando "c n".
Devi usare per forza le coordinate come chiave; (oltretutto un punto è determinato univocamente dalle sue coordinate.... quale migliore chiave è possibile????)

Simeon
Originally posted by MaurizioL
La funzione v x y n pone a n il valore del punto.
Quindi devi inserire nell'albero il punto il cui valore è stato modificato.
Io ho usato un albero binario di ricerca per memorizzare i punti, le coordinate le usavo come chiave, il valore è un dato satellite.
Se non trovi un punto nell'albero significa che ha un valore "predefinito" (quello che hai inserito usando il comando "c n".
Devi usare per forza le coordinate come chiave; (oltretutto un punto è determinato univocamente dalle sue coordinate.... quale migliore chiave è possibile????)


Ok, grazie anche a te :) In effetti come chiave si devono usare le coordinate per forza...

Diuzza
Ricominciamo dal principio se non vi spiace

Ricevo con c m n nome i valori di ciascun punto del piano.

Ciascun punto lo metto in un albero di ricerca. Il primo punto andrà come radice, il secondo come figlio destro o sinistro a seconda della chiave data dalle sue coordinate così la ricerca avrà costo log n se n è il numero dei punti.
Ci sono?
Se poi devo modificare il valore di un punto lo ricerco attraverso l'albero.

M come fa a non essere dunque presente nel piano? Li ho inseriti tutti i punti con crea

tyzer
Guarda che NON devi assolutamente memorizzare TUTTI i punti possibili ma SOLO i punti che vengono settati esplicitamente. Tutti gli altri hanno un valore predefinito... qundi se il punto che cerchi non è nella lista (albero, hash table ...) allora sai già quanto vale.


Domanda per Ornati: nel progetto Mappe2 si dice che con la funzione crea(m,n,nome) bisogna assegnare ad ogni punto del piano i valori come prescritto nella nota 3. Non capisco allora quello che avevi detto prima...i punti devo memorizzarli per forza...
Il Piano lo si deve rappresentare con un albero di ricerca binaria?
Oppure un albero red-black? (che è assai più incasinato credo...)

Altra domanda: le mappe in che struttura si mettono? Cioè mi spiego, una mappa la implementerei così:
code:
struct Mappa{ char *nome; Punto origine; char *specifica; } //Punto lo definirei così piu o meno struct Punto{ int x; int y; int val; }


Ora la domanda è questa...quando continuo a creare mappe, dove le emtto? Creaiamo una lista di mappe? Oppure un albero di ricerca binaria di mappe (magari ordianto per nome della mappa...)?
Spero di aver spiegato la domanda in modo chiaro, se no mandatemi insulti :)

Grazie a tutti quelli che collaborano...

P.S.

.yomo. tu sei quello di Piacenza?

Simeon
Originally posted by Diuzza
Ricominciamo dal principio se non vi spiace

Ricevo con c m n nome i valori di ciascun punto del piano.

Ciascun punto lo metto in un albero di ricerca. Il primo punto andrà come radice, il secondo come figlio destro o sinistro a seconda della chiave data dalle sue coordinate così la ricerca avrà costo log n se n è il numero dei punti.
Ci sono?
Se poi devo modificare il valore di un punto lo ricerco attraverso l'albero.


La penso come te, fino a questo punto.


M come fa a non essere dunque presente nel piano? Li ho inseriti tutti i punti con crea


Ma il piano ipotetico e' infinito, quando usi "crea" inserisci solo alcuni punti; le coordinate e valori di questi punti ti vengono forniti dal file che dai in input con crea(m,n,nome) secondo le specifiche della nota 3.

O no ? :look: (sto diventando insicuro persino ad inizializzare le variabili)

ornati
Originally posted by tyzer
Domanda per Ornati: nel progetto Mappe2 si dice che con la funzione crea(m,n,nome) bisogna assegnare ad ogni punto del piano i valori come prescritto nella nota 3. Non capisco allora quello che avevi detto prima...i punti devo memorizzarli per forza...
Il Piano lo si deve rappresentare con un albero di ricerca binaria?
Oppure un albero red-black? (che è assai più incasinato credo...)

Altra domanda: le mappe in che struttura si mettono? Cioè mi spiego, una mappa la implementerei così:
code:
struct Mappa{ char *nome; Punto origine; char *specifica; } //Punto lo definirei così piu o meno struct Punto{ int x; int y; int val; }


Ora la domanda è questa...quando continuo a creare mappe, dove le emtto? Creaiamo una lista di mappe? Oppure un albero di ricerca binaria di mappe (magari ordianto per nome della mappa...)?
Spero di aver spiegato la domanda in modo chiaro, se no mandatemi insulti :)

Grazie a tutti quelli che collaborano...

P.S.

.yomo. tu sei quello di Piacenza?



Oh, che casino!

Ma non fai prima a scaricare il mio progetto "Mappe" (sezione Filez) e vedere come sono implementate le cose che mi chiedi? Tanto questa parte è IDENTICA a quella del vecchio progetto...

PS: sto seramente pensando di implementare Mappe2 e venderlo al miglior offerente :)

Simeon
Originally posted by ornati

PS: sto seramente pensando di implementare Mappe2 e venderlo al miglior offerente :)


Nessun sano di mente te lo comprerebbe :asd:

Presentarsi a Fiorentini con quel codice li, magari senza averci capito niente... non conviene. Meglio capire e fare da soli.

Comunque la nota 3 è abbastanza ostica da interpretare, mon riesco a capire cosa bisogna ricavare dai valori nei file primo.txt etc.

Nel "secondo.txt" ad esempio c'e' un unico valore, che è -1.

Che ci ricavo di bello ?

Forse bisogna davvero scorrere i punti da 1,1 a m,n e assegnare i valori se l'indice risultante rientra da 1 a mn... Vabbè per oggi chiudo che son stanco di scrivere fregnacce :asd:

Diuzza
Io cmq avevo capito che il piano era di dimensione m*n non infinito... mah adesso lo riguardo

ornati
Originally posted by Diuzza
Io cmq avevo capito che il piano era di dimensione m*n non infinito... mah adesso lo riguardo


In effetti ho fatto un po' di confusione... parlavo del nuovo progetto pensando a quella vecchio ;)

Cmq adesso ho letto meglio il testo e il piano è sempre "infinito".

Per quanto riguarda i valori dei punti, la relazione:
"Se a = x mod m e b = y mod n allora V al(x, y) = v[a+mb] ."

ti dice il valore di ogni punto del piano a meno che non sia stato "sovrascritto" da un comando "valore (x,y,val)".

Quindi il tutto si può implementare così:

1) i valori dei punti settati esplicitamente (con "v x y val") sono memorizzati in una apposita struttura (albero, albero bilanciato, hash table, lista... quello che preferite)

2) se serve il valore di un punto che non è stato settato esplicitamente, e quindi non si trova nella struttura, lo si ricava mediante la relazione di prima.


Ovvero:
valore = ArrayValori[ modulo(x,M) + M * modulo(y, N) ];


Facile, no?

Nosferatu
Qualcuno mi sa dire come memorizzare una stringa di lunghezza arbitraria (ad esempio la specifica) senza usare un vettori di char di dimensioni esagerate.

MaurizioL
Originally posted by Nosferatu
Qualcuno mi sa dire come memorizzare una stringa di lunghezza arbitraria (ad esempio la specifica) senza usare un vettori di char di dimensioni esagerate.


C'è una funzione apposta chiamata realloc;

if usi linux:
man realloc (per leggere la guida)

else if usi windows{
cerca su internet || scarica il progetto di ornati e guarda lì
}

else{
Usa il mio codice:

char* get_string(char end){
char input;
int len=0;
int mem=100;
char *string=(char*)malloc(mem*sizeof(char));
while((input=getchar())!=end){
if(len>mem-1){
mem*=2;
string=(char*)realloc(string,mem);
}
string[len++]=input;
}
string[len]=0x0;
return string;
}

}

Diuzza
Per la specifica io pensavo di usare semplicemente una lista perchè non devi ricercare una lettera o cose simili, devi semplicemente scorrerla, quindi che problema c'è? Ci impiegheresti o(n) cmq perchè devi leggere ogni singolo carattere

Diuzza
Originally posted by ornati
In effetti ho fatto un po' di confusione... parlavo del nuovo progetto pensando a quella vecchio ;)

Cmq adesso ho letto meglio il testo e il piano è sempre "infinito".

Per quanto riguarda i valori dei punti, la relazione:
"Se a = x mod m e b = y mod n allora V al(x, y) = v[a+mb] ."

ti dice il valore di ogni punto del piano a meno che non sia stato "sovrascritto" da un comando "valore (x,y,val)".

Quindi il tutto si può implementare così:

1) i valori dei punti settati esplicitamente (con "v x y val") sono memorizzati in una apposita struttura (albero, albero bilanciato, hash table, lista... quello che preferite)

2) se serve il valore di un punto che non è stato settato esplicitamente, e quindi non si trova nella struttura, lo si ricava mediante la relazione di prima.


Ovvero:
valore = ArrayValori[ modulo(x,M) + M * modulo(y, N) ];


Facile, no?



Io pensavo di implementarlo così.
I valori li metto in un albero rb. (non i punti, badate, ma i valori)
Dopodichè quando mi passa le coordinate di un punto e mi serve il suo valore mi faccio il calcolino e lo cerco nell'albero.
In caso si ripresentassero più volte gli stessi punti e non voglio ricercare il valore nell'albero si potrebbero mettere in un hash table. Quindi, se mi viene dato un punto di cui voglio sapere il valore, prima guardo se è presente nell'hash table, se non c'è cerco nell'albero rb.
Potrebbe funzionare?

MaurizioL
Originally posted by Diuzza
Per la specifica io pensavo di usare semplicemente una lista perchè non devi ricercare una lettera o cose simili, devi semplicemente scorrerla, quindi che problema c'è? Ci impiegheresti o(n) cmq perchè devi leggere ogni singolo carattere


Se tu rappresenti la specifica con una lista ogni nuovo carattere deve essere inserito in coda....
Quindi o ci impieghi O(n^2) per compiere O(n) operazioni di inserimento oppure utilizzi una variabile globale che punta alla fine della lista, ma le variabili globali non sono consentite!

ornati
Originally posted by Diuzza
Io pensavo di implementarlo così.
I valori li metto in un albero rb. (non i punti, badate, ma i valori)
Dopodichè quando mi passa le coordinate di un punto e mi serve il suo valore mi faccio il calcolino e lo cerco nell'albero.
In caso si ripresentassero più volte gli stessi punti e non voglio ricercare il valore nell'albero si potrebbero mettere in un hash table. Quindi, se mi viene dato un punto di cui voglio sapere il valore, prima guardo se è presente nell'hash table, se non c'è cerco nell'albero rb.
Potrebbe funzionare?


Non capisco tutta questa complessità...

In altre parole: se usi la hash table non ti serve il Red-Black e vice versa.

Inoltre se usi il Red-Black (o un qualsiasi albero di ricerca) devi memorizzare in ogni nodo 2 cose:
1) la chiave (che è costituita dalle 2 coordinate x, y)
2) il valore corrispondente

Per quanto riguarda i punti non settati con "v x y val" non capisco perchè vuoi usare le liste... fai semplicemente così:

code:
int *ArrayValory = malloc(sizeof(int) * M * N); for (i=0; i < M*N; i++) { fscanf(file_input, "%d", &ArrayValori[i]); }


e poi recuperi il valore associato ad un punto (x,y) con l'espressione:

code:
valore = ArrayValori[ modulo(x,M) + M * modulo(y, N) ];

Nosferatu
Grazie dell'info MaurizioL

Simeon
Ragazzi, sto andando nel pallone piu completo, naturalmente parlo della nota 3.

Voglio dire, io apro il mio file primo.txt e ho la mia bella lista di valori "-1 -3 2 -2 2 1 0 2 -2 3 2 -1 0 -2 1 -2"

E dico : a = x mod m e b = y mod n. Val (x,y) = v[a+mb]... Non riesco a capire quali valori dare a (x,y), forse tutti i punti da (0,0) a (m,n) ?

Se qualcuno fa un esempio pratico lo ringrazio dal profondo del cuore.

Nel "secondo.txt" per esempio c'e' un solo valore: -1. Quindi abbiamo un solo punto. Nella mia testa io porrei x,y=(1,1), che sarebbe l'unico punto possibile. Quindi uno fa a = 1 mod -1 e b = 1 mod -1, e il valore si trova a v[a+mb] cioe v[0]. Quindi val(1,1) = -1.

Polsy
Originally posted by MaurizioL
C'è una funzione apposta chiamata realloc;

if usi linux:
man realloc (per leggere la guida)

else if usi windows{
cerca su internet || scarica il progetto di ornati e guarda lì
}

else{
Usa il mio codice:

char* get_string(char end){
char input;
int len=0;
int mem=100;
char *string=(char*)malloc(mem*sizeof(char));
while((input=getchar())!=end){
if(len>mem-1){
mem*=2;
string=(char*)realloc(string,mem);
}
string[len++]=input;
}
string[len]=0x0;
return string;
}

}


quanto sei nerd :asd:

MaurizioL
Originally posted by Polsy
quanto sei nerd :asd:


Io nerd?

Leggi i sorgenti di Ornati e poi mi dici

http://www.dsy.it/forum/showthread....&threadid=24001

:-D

Nosferatu
Una cosa ma il carattere end che gli passi come parametro, che carattere è

Simeon
Che poi scusate, quando si memorizzano i punti (coordinate, valori) nella nostra struttura, mi sembra abbia piu senso ordinarli per valore... Per fare poi le varie operazioni per ricavare i sottopercorsi migliori...

Ce la faccio piu.

MaurizioL
Originally posted by Nosferatu
Una cosa ma il carattere end che gli passi come parametro, che carattere è


Non sò cme è fatto il vostro progetto;

Nel nostro c'era il comando di inserimento delle mappe:

m nome x y specifica

per leggere la stringa nome end deve essere uguale a spazio
(leggo tutti i caratteri che compongono il nome fino allo spazio)
per leggere la specifica end deve essere uguale a '\n'.

ornati
Originally posted by MaurizioL
Io nerd?

Leggi i sorgenti di Ornati e poi mi dici

http://www.dsy.it/forum/showthread....&threadid=24001

:-D


No, no... io non programmo mai a basso livello:

http://ornati.altervista.org/

;)

Polsy
Originally posted by ornati
No, no... io non programmo mai a basso livello:

http://ornati.altervista.org/

;)


si ma quanto te la meni :D

Simeon
A uso e consumo di tutti, riguardo la nota 3, ecco cosa mi ha risposto il prof Fiorentini:

_______________
La regola le serve per determinare il valore di un generico punto (X,Y).

Esempio:


Se m=3 e n=2 e il file contiene i valori

0 1 2 3 4 5

allora:

Val(0,0) = Val(3,0) = Val(6,0) = Val(-3,0) = Val(-6,0) = ..... = 0
Val(1,0) = Val(4,0) = Val(7,0) = Val(-2,0) = Val(-5,0) = ..... = 1

Val(0,1) = Val(3,1) = Val(5,1) = Val(-3,1) = Val(-6,1) = ..... = 3



E' come se ricoprisse il piano con tanti rettangoli adiacenti
della forma

3 4 5
0 1 2

ottenendo

...............
..3 4 5 3 4 5..
..0 1 2 0 1 2..
..3 4 5 3 4 5..
..0 1 2 0 1 2..
...............

ornati
Originally posted by Polsy
si ma quanto te la meni :D


Suvvia... stavo solo facendo pubblicità ad un mio INUTILE progetto.

:)

Tanto per restare in OT: ho visto che anche tu devi fare l'orale di FRO... quindi ci si vede lunedì (a parte che non so chi sei...).

ornati
Originally posted by Simeon
_______________
E' come se ricoprisse il piano con tanti rettangoli adiacenti
della forma
............... [/B]


E` proprio per questo che non devi memorizzare niente (a parte un array con i valori che leggi dal file).

Diuzza
Mi chiedevo.
In crea il nome del file ha lunghezza che fisso io o può essere lungo quanto vuole. Perchè avrei dei problemini nella lettura del file. Nel senso che se non ho una lunghezza fissata non so che dimensione deve avere l'arrey che contiene la stringa

MaurizioL
Originally posted by Diuzza
Mi chiedevo.
In crea il nome del file ha lunghezza che fisso io o può essere lungo quanto vuole. Perchè avrei dei problemini nella lettura del file. Nel senso che se non ho una lunghezza fissata non so che dimensione deve avere l'arrey che contiene la stringa


C'è realloc apposta; l'ho scritto prima.
Riadatta il codice alle tue esigenze.

Diuzza
Originally posted by MaurizioL
Se tu rappresenti la specifica con una lista ogni nuovo carattere deve essere inserito in coda....
Quindi o ci impieghi O(n^2) per compiere O(n) operazioni di inserimento oppure utilizzi una variabile globale che punta alla fine della lista, ma le variabili globali non sono consentite!




typedef struct nodolista{
char spec;
struct nodolista* next;
}nodo

typedef struct lista{
nodo* inizio;
nodo* fine;
}lista

typedef struct mappa{
lista* specifica;
int x,y;
char * nome;
}
no?

Diuzza
Ho visto il codice di prima ma creo un array char nome[100] per magari inserire solo 4 caratteri.

MaurizioL
Originally posted by Diuzza
typedef struct nodolista{
char spec;
struct nodolista* next;
}nodo

typedef struct lista{
nodo* inizio;
nodo* fine;
}lista

typedef struct mappa{
lista* specifica;
int x,y;
char * nome;
}
no?


Sì, per funzionare funziona, ma non vedo perchè usare due strutture per rappresentare un vettore di char.
Comunque se a te piace...

Secondo me faresti meglio a concentrarti su altri problemi (tipo come memorizzare le mappe in modo efficiente).

Simeon
Originally posted by Diuzza
Ho visto il codice di prima ma creo un array char nome[100] per magari inserire solo 4 caratteri.


Io ho fatto una realloc per ogni singolo carattere, forse ho esagerato :asd:, ma per stringhe corte va piu che bene.

Basta adattare i "salti" a seconda delle situazioni...

Edit : in effetti manco io capisco perche usare delle strutture per memorizzare le specifiche

MaurizioL
Originally posted by Diuzza
Ho visto il codice di prima ma creo un array char nome[100] per magari inserire solo 4 caratteri.


Puoi mettere quanto vuoi, io ho messo 100 solo perchè avevo fatto qualche prova;
20 dovrebbero essere sufficienti.

Simeon
Ragazzi io userei un albero di ricerca binario anche per memorizzare le mappe... con tutte le operazioni di ricerca che vengono richieste mi pare adatto.

Ordinandole lessicograficamente per il nome.

ornati
Originally posted by Diuzza
Mi chiedevo.
In crea il nome del file ha lunghezza che fisso io o può essere lungo quanto vuole. Perchè avrei dei problemini nella lettura del file. Nel senso che se non ho una lunghezza fissata non so che dimensione deve avere l'arrey che contiene la stringa


Il problema è sempre lo stesso (= a quello di memorizzare una specifica). La soluzione è:

1) usare un puntatore ad un'area di memoria allocata dinamicamente
2) usare malloc/realloc per allocare/espandere

Ecco un piccolo programma dimostrativo:

code:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> char *read_token(FILE *f) { char *buf; int size = 16; int len = 0; int c; buf = malloc(size); while ((c=getc(f)) != EOF) { if (!isalnum(c)) { if (len == 0) continue; break; } if (len+1 >= size) { size <<= 1; /* size = size * 2 */ buf = realloc(buf, size); } buf[len++] = c; } buf[len++] = '\0'; buf = realloc(buf, len); return buf; } int main(void) { char *x; int run = 1; while (run) { x = read_token(stdin); printf("letto token <%s>\n", x); if (strcmp("end", x) == 0) run = 0; free(x); }; return 0; }

Diuzza
Ho già risolto. Ma sarò gnucca ma ho un altro problema.

Possibile che quando cerco di accedere ad un file il mio sistema mi dice che si è verificato un errore, potrebbe esserci la perdita dei dati su cui sto lavorando... ?

ornati
Originally posted by Diuzza
Ho già risolto. Ma sarò gnucca ma ho un altro problema.

Possibile che quando cerco di accedere ad un file il mio sistema mi dice che si è verificato un errore, potrebbe esserci la perdita dei dati su cui sto lavorando... ?


Strano... non mi è mai successa una cosa simile...
prova a postare il codice che ti dà problemi.

Ari_85
Se creiamo un albero per le mappe e un albero per i punti dovremo creare due alberi separati nel senso che dovremo scrivere due volte il codice perchè ad es la f inserisci del primo albero è diversa da quella del secondo perchè lavorano su nodi diversi..Certo, ci si guadagna in tempo di calcolo...
Ciao Lomba!

ornati
Originally posted by Ari_85
Se creiamo un albero per le mappe e un albero per i punti dovremo creare due alberi separati nel senso che dovremo scrivere due volte il codice perchè ad es la f inserisci del primo albero è diversa da quella del secondo perchè lavorano su nodi diversi..Certo, ci si guadagna in tempo di calcolo...
Ciao Lomba!


Non è detto... guarda per esempio la mia Hash_Table, c'è una sola implementazione e viene usata per inserire cose diverse (perchè usa internamente puntatori "void*").

L'unico problema dei puntatori "void*" è che perdi il controllo sui tipi dato dal compilatore.

Diuzza
ho un char* nome

faccio
int c;
FILE * valpunti;
valpunti=fopen(nome, "r");
fscanf(valpunti,"%d",&c);


magari ho fatto io qualche s....

ornati
Originally posted by Diuzza
ho un char* nome

faccio
int c;
FILE * valpunti;
valpunti=fopen(nome, "r");
fscanf(valpunti,"%d",&c);


magari ho fatto io qualche s....


Sembra corretto.

Prova a mettere un controllo sulla "fopen":

code:
valpunti = fopen(nome, "r"); if (valpunti == NULL) { printf("Errore: impossibile aprire '%s'\n", nome); exit(1); }

Dav83
in alternativa si può usare la 'fread' che legge parte del file(indicato dai parametri)...http://www.cplusplus.com/ref/cstdio/fread.html

Dav83
in alternativa si può usare la 'fread' che legge parte del file(indicato dai parametri)...http://www.cplusplus.com/ref/cstdio/fread.html

ornati
Originally posted by Dav83
in alternativa si può usare la 'fread' che legge parte del file(indicato dai parametri)...http://www.cplusplus.com/ref/cstdio/fread.html


In alternativa a cosa?

Diuzza
No mi va fino alla fopen perchè ho messo un fprint dopo e stampa quindi lì' ci arriva..
non mi va la fscanf. moh

Diuzza
il fatto è che la fopen mi sembra che vada anche se il file che gli passo come parametro non esiste. Non è che nn mi trova il file anche se il nome è corretto. Il file l'ho messo nella stessa directory del programmino che ho fatto, giusto?

Simeon
Originally posted by Diuzza
il fatto è che la fopen mi sembra che vada anche se il file che gli passo come parametro non esiste. Non è che nn mi trova il file anche se il nome è corretto. Il file l'ho messo nella stessa directory del programmino che ho fatto, giusto?


Magari sarò scontato ma... hai provato a verificare se il nome del file preso in input è corretto?

ornati
Originally posted by Diuzza
il fatto è che la fopen mi sembra che vada anche se il file che gli passo come parametro non esiste. Non è che nn mi trova il file anche se il nome è corretto. Il file l'ho messo nella stessa directory del programmino che ho fatto, giusto?


è esattamento il motivo per cui ti ho detto di mettere il controllo. Se la fopen fallisce restituisce NULL... bisogna sempre mettere un controllo, così se è quello il problema si capisce.

Se vuoi mettere un controllo veloce veloce puoi usare anche "assert()":

code:
#include <assert.h> ... file = fopen(nome ,"r"); assert (file != NULL);


in questo modo se la fopen fallisce il programma termina dando un messaggio di errore significativo.

Ad ogni modo il file da aprire lo devi mettere nella diretory di lavoro (o corrente, chiamala come vuoi), quella da cui lanci il programma e non quella dove si trova il suo eseguibile.

ornati
Originally posted by Diuzza
il fatto è che la fopen mi sembra che vada anche se il file che gli passo come parametro non esiste. Non è che nn mi trova il file anche se il nome è corretto. Il file l'ho messo nella stessa directory del programmino che ho fatto, giusto?


forse ho capito... stai confondendo il C con Java ;)

Se la fopen fallisce NON viene terminato il programma, NON viene sollevata un'eccezione (non esistono in C) ...

L'unica cosa che succede è che viene restituito NULL. Se poi tu non controlli e chiami "fscanf" & company passandogli questo puntatore NULL allora vai in cerca di guai...

Simeon
Ok, per quanto mi riguarda sono a posto con tutte le operazioni che riguardano le mappe (inserimento eliminazione ricerca blablabla), almeno concettualmente dato che il codice lo devo ancora scrivere.

Stavo pensando alla funzione per calcolare il percorso ottimale... ma bisogna analizzare TUTTE le possibili permutazioni di lunghezza minima da (x,y) a (w,z)? Mi sembra parecchio strano ed inefficiente. Sto ancora cercando di capire come ragionare, forse alla fine si puo' risolvere il tutto utilizzando i grafi.

Boh se qualcuno ci sta pensando dica la sua :)

EDIT : mmm forse bisogna partire dal fondo...

EDIT2 : programmazione dinamica ? :look:

GiaXVI
qualcuno che ci capisce qualcosa di questo progetto?

maynard80
dunque allora sono contento che la nota 3 sia ormai chiara (il file contiene semplicemente nxm dati utilizzati per riempire il piano), i punti del piano esistono chiaramente solo nella nostra testa e si concreatizzano solo se fanno parte di una (o più) mappe, se poi cambiamo valore ad un punto agiamo manualmente sul dato che esplica il valore del punto che precedentemente era stato calcolato automaticamente tramite la formulina della nota 3.

ora ci troviamo quindi con delle mappe che hanno un nome, un punto di partenza e un percorso definito dalla specifica, le mappe sono selezionate tramite il nome quindi definire una struttura unica per contenere tutti i punti è una cacchiata, meglio una struttura come insieme di mappe, e ogni mappa una struttura contenente tutti i punti della specifica.. ora è meglio creare tutti i punti di ogni mappa oppure mantenere semplicemente il punto di partenza e lavorare con le specifiche? in teoria ogni mappa è un grafo che può contenere cicli e dove ogni punto può prendere 4 direzioni, ottimizzarlo vuol dire prima di tutto eliminare i cicli, quindi quale struttura può fare al caso nostro?

Simeon
Originally posted by maynard80
... quindi quale struttura può fare al caso nostro?


Come dicevo prima... un grafo? Inteso proprio come struttura. Non ho idea di come si implementi però, mi affido al Cormen :asd:

am445733
Scusate: ma qualcuno mi può spiegare come si riece ad associare ad un punto un Val negativo se: Val(x,y)=V(a+mb) ed i resti di a e b (come da definizione) non sono mai negativi?...qualcosa non torna!

Simeon
Originally posted by am445733
Scusate: ma qualcuno mi può spiegare come si riece ad associare ad un punto un Val negativo se: Val(x,y)=V(a+mb) ed i resti di a e b (come da definizione) non sono mai negativi?...qualcosa non torna!


Guarda che a+mb e' l'indice del valore (che dev'essere >=0).

Ari_85
Originally posted by ornati
Non è detto... guarda per esempio la mia Hash_Table, c'è una sola implementazione e viene usata per inserire cose diverse (perchè usa internamente puntatori "void*").

L'unico problema dei puntatori "void*" è che perdi il controllo sui tipi dato dal compilatore.


Già ma metti che creo una funzione che cerca un nodo all'interno di un albero. Per farlo dovrei accedere anche ai campi della struttura di cui sono composti i nodi. Se perdo il controllo sui tipi di dato posso fare ad es. ele->nome dove ele è il puntatore void a cui è stato associato un nodo? o forse dovrei vedere come la strutture viene fisicamente memorizzata e aggiungere al puntatore tot byte? In questo modo potrei risolvere il problema dei campi

marcomaria
[QUOTE]Originally posted by Simeon
Stavo pensando alla funzione per calcolare il percorso ottimale... ma bisogna analizzare TUTTE le possibili permutazioni di lunghezza minima da (x,y) a (w,z)? Mi sembra parecchio strano ed inefficiente. Sto ancora cercando di capire come ragionare, forse alla fine si puo' risolvere il tutto utilizzando i grafi.
QUOTE]
...stavo pensando a Dijkstra per il cammino minimo con pesi per i valori dei punti....idea allo stato embrionale...da approfondire nel w-e
E' stato visto a lezione?

ornati
Originally posted by Ari_85
Già ma metti che creo una funzione che cerca un nodo all'interno di un albero. Per farlo dovrei accedere anche ai campi della struttura di cui sono composti i nodi. Se perdo il controllo sui tipi di dato posso fare ad es. ele->nome dove ele è il puntatore void a cui è stato associato un nodo? o forse dovrei vedere come la strutture viene fisicamente memorizzata e aggiungere al puntatore tot byte? In questo modo potrei risolvere il problema dei campi


In C puoi fare un po' tutto.

Ovviamente NON puoi usare "ele->nome_campo" se "ele" è di tipo "void*", proprio perchè il compilatore non sa a cosa punta...

Puoi invece fare un cast: "((struct mia_struttura*)ele)->nome".

Oppure:
code:
struct mia_struttura *m = ele; m->nome = ...

Simeon
Originally posted by marcomaria

...stavo pensando a Dijkstra per il cammino minimo con pesi per i valori dei punti....idea allo stato embrionale...da approfondire nel w-e
E' stato visto a lezione?


Si è stato visto una delle ultime lezioni... ci stavo pensando pure io visto che è nominato spesso anche nei thread dei progetti passati.

Cmq ho ancora un casino di dubbi sulla gestione dei valori dei punti e delle mappe. Ora ho infatti implementato solo la struttura per memorizzare le mappe ed alcune funzioni sono incomplete (dato che la stampa richiede che venga stampato anche il valore della mappa)

lfn
scusate la domanda idiota, ma se dichiaro un array extern inizializzato come
int = array[] il compilatore mi segnala "array assumed to have one element"
cioè è come se lo inizializzassi con un solo valore in questo modo?? (calcolate poi in un'altra funzione il valore viene modificato )
perchè non vorrei ke poi mi desse qualche errore successivamente,
ovviamente come variabile esterna non posso ankora fornigli un valore xkè questo mi deriva da un'altra funzione..
lo sclero da progettino sta prendendo il sopravvento..
lfn :cool:

YoMo
Secondo me dei cicli te ne fotti (se no il nostro progetto include anche quello di gennaio?!?!?), data una mappa e la relativa specifica devi ricavare due cose: origine e destinazione. Questo è ciò che ti basta per calcolarti la riduzione.
Per quanto riguarda i grafi, tra src e dst si potrebbe costruire un grafo e poi utilizzare un algoritmo per trovare i cammini minimi, ma a questo punto sorge un problema: nel progetto sono i PUNTI che hanno un valore, non gli ARCHI. Soluzione: ad es. valore[arco(u,v)] = valore[punto(v)]. Altro problema: ATTENZIONE, l'algoritmo di Dijkstra non è utilizzabile in quanto calcola il cammino minimo in un grafo nel caso in cui tutti i pesi degli archi siano positivi. Nel progetto (secondo la notazione di prima) un arco può avere valori negativi. Soluzione: sul Cormen due pagine dopo Dijkstra c'è l'algoritmo di Bellman-Ford che fa al caso nostro, ma cavolo, tra pseudocodice e C ci passa un mare!!!!
Cmq se volete qualche implementazione dei grafi guardatevi l'ultima lezione di Aguzzoli, proprio le ultime slide, altrimenti provate su http://www.algoteam.dsi.unimi.it/

Originally posted by maynard80
dunque allora sono contento che la nota 3 sia ormai chiara (il file contiene semplicemente nxm dati utilizzati per riempire il piano), i punti del piano esistono chiaramente solo nella nostra testa e si concreatizzano solo se fanno parte di una (o più) mappe, se poi cambiamo valore ad un punto agiamo manualmente sul dato che esplica il valore del punto che precedentemente era stato calcolato automaticamente tramite la formulina della nota 3.

ora ci troviamo quindi con delle mappe che hanno un nome, un punto di partenza e un percorso definito dalla specifica, le mappe sono selezionate tramite il nome quindi definire una struttura unica per contenere tutti i punti è una cacchiata, meglio una struttura come insieme di mappe, e ogni mappa una struttura contenente tutti i punti della specifica.. ora è meglio creare tutti i punti di ogni mappa oppure mantenere semplicemente il punto di partenza e lavorare con le specifiche? in teoria ogni mappa è un grafo che può contenere cicli e dove ogni punto può prendere 4 direzioni, ottimizzarlo vuol dire prima di tutto eliminare i cicli, quindi quale struttura può fare al caso nostro?

lfn
niente lasciate stare ho risolto, non fate caso a quello che ho scritto T_T sono proprio fusa
lfn :cool:

ornati
Originally posted by YoMo
[B]Secondo me dei cicli te ne fotti (se no il nostro progetto include anche quello di gennaio?!?!?), data una mappa e la relativa specifica devi ricavare due cose: origine e destinazione. Questo è ciò che ti basta per calcolarti la riduzione.
Per quanto riguarda i grafi, tra src e dst si potrebbe costruire un grafo e poi utilizzare un algoritmo per trovare i cammini minimi, ma a questo punto sorge un problema: nel progetto sono i PUNTI che hanno un valore, non gli ARCHI. Soluzione: ad es. valore[arco(u,v)] = valore[punto(v)].


Non credo che ci sia bisogno di scomodare i grafi.

Per la riduzione, usando la programmazione dinamica, si può fare in tempo O(dx * dy). Dove dx = |src.x - dst.x| e dy = |src.y - dst.y|.

Non penso che si possa fare di meglio... nel caso generico. Poi magari si può velocizzare nel caso medio con qualche euristica, boh!

Nosferatu
Sarà una stupidata ma io non riesco proprio a permettere la lettura sulla stessa linea di interi e di stringhe, come ad esempio nel comando m qualcuno può aiutarmi?

Diuzza
Chissà come mai oggi ho riprovato a leggere il file s funzia.... mah

Diuzza
prima fai un getchat e leggi il carattere che identificherebbe l'istruzione. Poi usi uno switch per riconoscere l'istruzione ed eseguire le relative operazioni. Dopodichè (in caso di c), gai un fscanf per leggere i valori o quel che sono.
E' questo che intendevi? o ho capito male?


Originally posted by Nosferatu
Sarà una stupidata ma io non riesco proprio a permettere la lettura sulla stessa linea di interi e di stringhe, come ad esempio nel comando m qualcuno può aiutarmi?

Nosferatu
I miei problemi sono nel caso del comando m, quando devi permettere prima di inserire una stringa di lunghezza arbitraria, poi 2 interi e poi ancora una stringa

Polsy
Originally posted by Nosferatu
I miei problemi sono nel caso del comando m, quando devi permettere prima di inserire una stringa di lunghezza arbitraria, poi 2 interi e poi ancora una stringa

scaricati qualche progetto vecchio dall'area filez, in tutti a un certo punto hai un comando misto tra interi e stringhe

maynard80
allora io ho 2 quesiti:
1)Per il discorso dei valori alla fine come calcoliamo il modulo? nel senso che 7mod2 fa 1 e su questo non ci sono problemi, ma -7mod2 dovrebbe fare -7 ma nel nostro caso a quanto pare non possiamo avere risultati della funzione modulo negativi (chiaro visto che il risultato stesso è l'indice per trovare il valore nel file), ecco voi coe operate??

2)stavo pensando che alla fine ogni mappa potrebbe essere una piccola lista di adiacenze, e ad essa applicare gli algoritmi per gli shortest path, no? unica cosa come si fa a modificare Dijkstra per il caso dei pesi negativi?

ornati
Originally posted by maynard80
allora io ho 2 quesiti:
1)Per il discorso dei valori alla fine come calcoliamo il modulo? nel senso che 7mod2 fa 1 e su questo non ci sono problemi, ma -7mod2 dovrebbe fare -7 ma nel nostro caso a quanto pare non possiamo avere risultati della funzione modulo negativi (chiaro visto che il risultato stesso è l'indice per trovare il valore nel file), ecco voi coe operate??


-7 mod 2 = 1
http://www.google.it/search?hl=it&q=-7+mod+2

E dalla pagina 2 di questo thread:
http://en.wikipedia.org/wiki/Modulo_operation

code:
int modulo(int a, int b) { int x; if (a < 0) { x = -a + b - 1; a += x - x % b; return a; } return a % b; }

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