.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Fondamenti di architettura e programmazione (http://www.dsy.it/forum/forumdisplay.php?forumid=234)
-- [Indentazione] Problema!!! (http://www.dsy.it/forum/showthread.php?threadid=24038)


Posted by dany12185 on 09-02-2006 08:33:

Problema indentazione!!!

Qualcuno è riuscito ad allineare correttamente queste maledette stringhe???...anche quando metti degli if annidati o degli if dentro un while???


Posted by SpiritKJ on 09-02-2006 11:20:

Forse. Devo solo vedere se quello che ho pensato è implementabile :D

__________________
Be Attitude for Gains.


Posted by spenk.85 on 09-02-2006 12:10:

ahe hai pensato?+ teste sono meglio di una


Posted by spenk.85 on 09-02-2006 14:58:

da un'analisi approfondita del main l'indentazione esatta dovrebbe essere:

code:
DECLARE s; DECLARE arg1; arg=n; IF(arg1<=0) .....PRINT "Primo argomento invalido"; ELSE .....DECLARE ag2; .....arg2=y; .....IF(arg2<=0) ..........PRINT "Secondo argomento invalido"; .....ELSE ..........WHILE(arg1!=0) ...............arg1-=1; ...............s+=1; ..........WHILE(arg2!=0) ...............arg2-=1; ...............s+=1; ..........PRINT s;

Giusto?!


Posted by sandrino83 on 09-02-2006 15:16:

teoricamnte si ma come si fa a ordinare al programma di lasciare tot spazi ogni volta?

__________________
we are just two lost souls swimming in a fish bowl year after year....running over the same old ground....what have we found.......


Posted by Drowne on 09-02-2006 16:42:

niente, edit


Posted by ARIEL on 09-02-2006 16:49:

Originally posted by Drowne
code:
DECLARE s; DECLARE arg1; arg=n; IF(arg1<=0) ..PRINT "Primo argomento invalido"; ELSE ..DECLARE ag2; ..arg2=y; IF(arg2<=0) ..PRINT "Secondo argomento invalido"; ELSE ..WHILE(arg1!=0) ....arg1-=1; ....s+=1; WHILE(arg2!=0) ..arg2-=1; ..s+=1; ..PRINT s;


x me è cosi...


Io metterei il PRINT finale sotto al WHILE.....


Posted by ARIEL on 09-02-2006 16:51:

ah mi sono accorta anche i WHILE tutti allineati


Posted by spenk.85 on 09-02-2006 17:01:

Originally posted by sandrino83
teoricamnte si ma come si fa a ordinare al programma di lasciare tot spazi ogni volta?

questo è il problema! non mi viene in mente nulla per il momento! dai ragazzi...manca l'ultima cosa!


Posted by Lyanne on 09-02-2006 17:45:

Aspettiamo tutti fiduciosi qualche ispirazione....

__________________
some photos of mine


Posted by ARIEL on 09-02-2006 17:46:

il tempo stringe!!!!!!


Posted by Skioda86 on 09-02-2006 18:23:

:pc:
Ragazzi....Oggi mentre cazzeggiavo, mi è venuta una brillante idea e...
Io ve la butto lì...poi vediamo se qualcuno ci arriverà....


Prof Malchiodi :teach: - Non c'è scritto esplicitamente dove utilizzarlo, ma questo non significa che non vada utilizzato...
leggi bene qual'è il compito attribuito al metodo clone() e poi rileggi
tutto il testo del progetto
fino a che non trovi i punti in cui IMPLICITAMENTE viene chiesto di
usarlo.


Sapete quel bellissimo metodo che non serve ad un pip ma che ci ha fatto creare dicendomi di usarlo....QUANDO MEGLIO VI SEMBRA...?!!!?
ecco....:whisper:Mi sembra arrivato il momento di tirarlo fuori dal cilindro....!!!! :)


GOOD WORK!!!!:D:D:D

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by ARIEL on 09-02-2006 18:28:

No scusa ma il clone() guarda che va usato nei costruttori! Non serve per l'indentazione.....


Posted by spenk.85 on 09-02-2006 18:45:

Originally posted by SpiritKJ
Forse. Devo solo vedere se quello che ho pensato è implementabile :D

Dicci che hai pensato, magari tutti riusciamo a farlo! Anche perchè il tempo è tiranno.


Posted by Skioda86 on 10-02-2006 09:03:

IL TEMPO STRINGE....E.....MANCA SOLO QUELLA MALEDETTA IDENTAZIONE!!!!

SE ANDIAMO AVANTI DI QUESTO PASSO, MI SA' CHE RIMANIAMO FERMI!!!

NON HO ASSOLUTISSIMAMENTE IDEA DA DOVE PARTIRE, ANCHE PERCHE' NE HO GIA' PROVATE MOLTE E IL RISULTATO SEMPRE QUELLO!! SE CREO UN METODO NUOVO PER AGGIUSTARLE, ME LE SPOSTA UN PO' COME VUOLE LUI. AVEVO AVUTO UNA BRILLANTE IDEA STAMATTINA, VOLENDO CONFRONTARE LE PAROLE CHIAVE DELLA PROGRAMMAZIONE E IL PUNTO IN CUI ARRIVA LA COMPILAZIONE, MA....SONO SORTI ALCUNI PROBLEMI CON LE IDTRUZIONI SEMPLICI!!!

MANNAGGIA!!

PENSATE,.....PENSATE......PENSATE...!!!

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by Drowne on 10-02-2006 11:36:

scusate... per l'identazione:

Non basta mettere una variabile nell'hashtable che possa valere 0, 2, 4 o 6 e poi fare un for con quella variabile di spazi vuoti in ogni toString? Quando lanciamo un if o un while incrementiamo di 2 la variabile nell'hashtable, ecc...


Posted by Skioda86 on 10-02-2006 11:59:

Drowne

scusate... per l'identazione:

Non basta mettere una variabile nell'hashtable che possa valere 0, 2, 4 o 6 e poi fare un for con quella variabile di spazi vuoti in ogni toString? Quando lanciamo un if o un while incrementiamo di 2 la variabile nell'hashtable, ecc...


Sono d'accordo con te. Anche io l'avevo pensato di inserire delle variabili String di spazi, ma il proble ma sorge, non quando si inizia a mettere gli spazi, ma quando è ora di smettere di usarli!!!!
Come fai a sapere quante istruzioni metterà dentro ad un if o ad un while?? Se vogliamo identare il nostro programma, ok, si può fare perchè sappiamo la lunghezza di tutte le istruzioni, ma se dobbiamo estenderlo a qualsiasi programma, penso che il ragionamento non tenga più...!!! Almeno......x la mia piccola testolina con poco cervello!!!! :roll:

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by spenk.85 on 10-02-2006 12:11:

Esatto! il problema è creare qualcosa di utilizzabile per qualsiasi main!
Il problema più grosso sorge quando ad esempio, mi becco una Itarazione.
Quasta stampa :

code:
WHILE (cazzi e mazzi) ....istr

questo perchè il toString di Iterazione e di Selezione prevedono che vengano aggiunti due spazi.
Però se l'istruzione corpo di Iterazione per esempio, è composta da una Sequenza(quindi più istruzioni) il risulatato sarebbe questo:
code:
WHILE (ricazzi e rimazzi) .....istr1; istr2;

questo è il vero macello!


Posted by Skioda86 on 10-02-2006 12:38:

Esatto! il problema è creare qualcosa di utilizzabile per qualsiasi main!
Il problema più grosso sorge quando ad esempio, mi becco una Itarazione.
Quasta stampa :

code:
WHILE (cazzi e mazzi)
....istr


questo perchè il toString di Iterazione e di Selezione prevedono che vengano aggiunti due spazi.
Però se l'istruzione corpo di Iterazione per esempio, è composta da una Sequenza(quindi più istruzioni) il risulatato sarebbe questo:

code:
WHILE (ricazzi e rimazzi)
.....istr1;
istr2;


questo è il vero macello!


COMPLIMENTS X LA SPIEGAZIONE! SON CON TE!
MAGARI SONO ANCOR PIU' CON TE SE SAPESSI COME RISOLVERE IL PROBLEMA!!!:)

SE ALMENO CI AVESSE LASCIATO USARE LE PARENTESI GRAFFE!!! Inizio e fine cliclo delimitate dallo stringTokenizer e/o dalla subString!!!!:(

Ho provato ad utilizzare i 2 metodi sopraelencati nel nostro caso, ma il problema di DOVE FARLI FINIRE non si risolve!!!
Quasi quasi lo consegno così e basta!

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by Drowne on 10-02-2006 12:44:

Dopo mangiato provo quello che ho pensato, e dovrebbe andare anche quando c'è sequenza :D


Posted by lucafiamma on 10-02-2006 12:53:

aiuto!!

aiuto!sono nella me*da..sono rimasto da solo e devo assolutamente finire questo progetto!!qualcuno che ha già finito ed è di animo veramente buono potrebbe aiutarmi...Io ho già scritto tutto ma correggo un errore e ne spunta un altro...Vi prego una mente illuminata potrebbe darmi qualche dritta! Grazie Mille ve ne sarò grato per sempre!!


Posted by Skioda86 on 10-02-2006 13:45:

Drowne

Dopo mangiato provo quello che ho pensato, e dovrebbe andare anche quando c'è sequenza :D


...Pendo dalle tue labbra come la birra DUFF...

PRIMA: :birrozza: DOPO: :pazzo:

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by Vorgoth on 10-02-2006 15:04:

A me invece da:

code:
DECLARE s; DECLARE arg1; arg1 = 5; IF (arg1<=0) PRINT "Primo argomento invalido"; ELSE DECLARE arg2; arg2 = 10; IF (arg2<=0) PRINT "Secondo argomento invalido"; ELSE WHILE (arg1!=0) arg1 -= 1; s += 1; WHILE (arg2!=0) arg2 -= 1; s += 1; PRINT s; 15


con tutte quelle righe vuote....o_____o boh.

__________________
...!


Posted by sg693322 on 10-02-2006 15:49:

confrontandomi con qualche compagno di corso ho capito come indentare... solo che nel mio programma indenta in maniera sbagliata... se non riesco a risolvere mi sa che faccio \n(spazio)(spazio)... e se alla discussione mi chiede qualcosa gli rispondarò: e chi ha mai detto di usarlo con altri main???

__________________
Serena...
Cerchiamo di vivere bene a tal punto che quando moriremo anche il becchino sia triste...


Posted by Drowne on 10-02-2006 16:08:

avevo pensato a cose del genere:

if (PIGLIA DALL'HASH == null) nspazi=0; else nspazi=CARICA DALL'HASH;
for(int i=0; i<nspazi; i++){ spazio = spazio + " "; }

return spazio+"DECLARE "+variabile+";\n";

in ogni tostring...


e fare dei put nell'hashtable con "spazio",nspazi+2 negli if e nei while...


Posted by sg693322 on 10-02-2006 16:26:

io l'avevo pensato con un ciclo for e una variabile statica...

__________________
Serena...
Cerchiamo di vivere bene a tal punto che quando moriremo anche il becchino sia triste...


Posted by sg693322 on 10-02-2006 16:50:

Ragazzi ero davanti alla soluzione corretta da ore ma pensavo fosse sbagliata... stasera festeggiamo con birra a volontà e r***o libero... alla fantozzi

__________________
Serena...
Cerchiamo di vivere bene a tal punto che quando moriremo anche il becchino sia triste...


Posted by Drowne on 10-02-2006 17:10:

Qualcuno mi conferma se è corretta?


Posted by sbrandu on 10-02-2006 17:24:

Secondo me il secondo if deve essere allineato sotto arg2=5 per il resto è corretta.. ci dici come hai fatto ad arrivare a quell'output che è già un enorme passo avanti?


Posted by Drowne on 10-02-2006 17:38:

si hai ragione:

code:
DECLARE s; DECLARE arg1; arg1 = 10; IF(arg1<=0) PRINT ''Primo argomento invalido''; ELSE DECLARE arg2; arg2 = 5; IF(arg2<=0) PRINT ''Secondo argomento invalido''; ELSE WHILE(arg1!=0) arg1 -= 1; s += 1; WHILE(arg2!=0) arg2 -= 1; s += 1; PRINT s; 15


Posted by Drowne on 10-02-2006 17:42:

Allora...

si possono usare o l'hashtable o una variabile statica.

a uno dei due fai contenere un int che è il numero di spazi che deve dare davanti ad ogni istruzione.

una nuova string, ad esempio SPAZIO=SPAZIO+" "; da mettere in ogni toString tranne in quello di Sequenza, e dovrà essere riempita tramite un ciclo for(int i=0; i<INTdicuiparlavamoprima; i++)

esce una cosa bella complicata...

a seconda delle necessità si fa Nspazi+1 o -1 oppure si lascia pulito e si rimette con un put ( in caso dell'hashtable ) oppure con un'assegnazione ( variabile statica ).

ciauz :D


Posted by Skioda86 on 10-02-2006 18:06:

SI, MA IL PROBLEMA PERSISTE!!!
DEVI SAPERE DOVE METTERE GLI SPAZI!!! E QUINDI DEVI SAPERE IL PROGRAMMA COME VIENE SVOLTO!!!!

SONO DACCORDO CON TE CHE VA BENE CON QUESTO PROGRAMMA, MA SE LO ESTENDIAMO AD UN ALTRO MAIN CON MOLTE PIU' ISTRUZIONI NON VA PIU' BENE!!!

E' QUESTO IL VERO PROBLEMA!!!
PERCHE' ALTRIMENTI BASTAVA METTERE SPAZI OGNI QUAL VOLTA SAPEVI CHE ANDAVANO MESSI!!!!

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by sbrandu on 10-02-2006 18:06:

Grande!
Sarà un lavoraccio ma grazie!


Posted by Drowne on 10-02-2006 18:07:

Originally posted by Skioda86
SI, MA IL PROBLEMA PERSISTE!!!
DEVI SAPERE DOVE METTERE GLI SPAZI!!! E QUINDI DEVI SAPERE IL PROGRAMMA COME VIENE SVOLTO!!!!

SONO DACCORDO CON TE CHE VA BENE CON QUESTO PROGRAMMA, MA SE LO ESTENDIAMO AD UN ALTRO MAIN CON MOLTE PIU' ISTRUZIONI NON VA PIU' BENE!!!

E' QUESTO IL VERO PROBLEMA!!!
PERCHE' ALTRIMENTI BASTAVA METTERE SPAZI OGNI QUAL VOLTA SAPEVI CHE ANDAVANO MESSI!!!!


...

veramente no... se mi passi un altro main con queste istruzioni te lo dimostro ^_^


Posted by Skioda86 on 10-02-2006 18:10:

Se io al posto di dichiarare 2 variabili in un ciclo while ne dichiaro 5 come fa il tuo programma a sapere quando deve smettere di metterne o meglio...quanti metterne se tu non sai a priori quante istruzioni ci sono dentro ad un while!!!??!!

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by Drowne on 10-02-2006 18:15:

basta mettere un nspazi+2 ad inizio while ed un nspazi-2 a fine while :D semplice


Posted by Skioda86 on 10-02-2006 18:23:

Ma appunto!!! Devi cambiare il codice del programma per farlo andare!!!! Invece 1 kosa fatta per bene è che fai tutte le tue classi e identano da sole senza piu' bisogno di toccare niente!!

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by Drowne on 10-02-2006 18:27:

................ mi sa che non hai capito

il cambio di nspazi lo fai nella classe iterazione e selezione. e glielo fai fare a lui in base alla posizione identata in precedenza.


Posted by Skioda86 on 10-02-2006 18:34:

ok!


facciamo che io dico mentre (....) se(....) 3 istruzioni altrimenti se(...)
alreimenti(...)altre 5 istruzioni

code:
while() e spostati di 2 if() e spostati di 2 ciao ----> ciao ----> come fai a fargli capire che sono 3 che deve identare ciao ----> else <---- while ----> bla ----> bla ----> bla ----> bla ----> bla ----> <---


voresti dirmi che senza toccare il progetto posso anche passargli un main in cui dico
mente (....) fammi solo questo e poi fammi 1altra cosa

code:
while() ciao ----> ciao <----

:)

__________________
- - {[( KEVIN HIGHT FLY)]} - -


Posted by spenk.85 on 10-02-2006 18:37:

drowne sei troppo un grande! anche io pome avevo pensato a una cosa simile con il mio amico, ora sappiamo che funza e lo faremo andare!grande!

Ma quando li togli gli spazi?


Posted by Drowne on 10-02-2006 19:05:

quando chiudi un while, quando c'è l'IF o l'ELSE


Posted by Drowne on 10-02-2006 19:08:

@ SKIODA:







cosi, no?


Posted by ARIEL on 10-02-2006 19:09:

scusa ma se hai una sequenza di istruzioni (tipo nella istrSe) come fai a leggere una istruzione alla volta?


Posted by Drowne on 10-02-2006 19:27:

la sequenza non è da identare infatti.

se fai spazio+sequenza identa solo il primo.

ma una sequenza è composta da un tot numero di istruzioni? Basta identare le istruzioni correttamente ed anche la sequenza sarà identata :D


Posted by ARIEL on 10-02-2006 19:30:

ok ma come fai a indentare le istruzioni della sequenza?


Posted by Vorgoth on 10-02-2006 19:35:

Io ho provato il metodo di Drowne (usando una variabile statica) e :evil: come output mi esce:

code:
DECLARE s; DECLARE arg1; arg1 = 5; 15


...e basta :shock:

Non riesco a capire perche' non return proprio, anche sel codice sembra (almeno a me o_o) corretto.

eg. Stampa.toString():
code:
String s = ""; for(int i=0; i<indent; i++) { s = s + " "; } return s+"PRINT "+messaggio+";\n";


__________________
...!


Posted by Drowne on 10-02-2006 19:36:

Esempio

sequenza: {
while quello
if questo
s++
else
s--
}

identi cosi:

spazio=""
if(nspazi!=0) ciclofor di nspazi spazio = spazio+" "

sequenza: {
nspazi + while quello
nspazi=nspazi+2 if questo
nspazinspazi+2 s++
nspazi=nspazi-2 else
nspazi=nspazi+2 s--
nspaziINIZIALI+2 s--
}

la sequenza non è identata, ma il while ( e quello che tira fuori dopo ), l'IF/ELSE, le operazioni di incrementa e decremente, ecc... SI, quindi risulterà identata anche l'intera sequenza.

Questo MOLTO in sintesi... Cmq il succo è questo. :D

Personalmente ho usato l'hashtable, xo si può fare anche con una variabile statica


Posted by Drowne on 10-02-2006 19:41:

Originally posted by Vorgoth
Io ho provato il metodo di Drowne (usando una variabile statica) e :evil: come output mi esce:

code:
DECLARE s; DECLARE arg1; arg1 = 5; 15


...e basta :shock:

Non riesco a capire perche' non return proprio, anche sel codice sembra (almeno a me o_o) corretto.

eg. Stampa.toString():
code:
String s = ""; for(int i=0; i<indent; i++) { s = s + " "; } return s+"PRINT "+messaggio+";\n";


E' sicuramente un problema dato dalla variabile INDENT.
fai un system out di ident e vedi se varia o meno come vuoi tu...


Posted by Vorgoth on 10-02-2006 19:43:

Ma è strano che return non dia proprio niente no? Al max dovrebbe darlo con la indentazione sbagliata O_O;

__________________
...!


Posted by Drowne on 10-02-2006 19:44:

più che altro dovrebbe darti errore in compilazione o in esecuzione... Magari vedi con Eclipse in modalità debug cosa e come viene riempito dal tuo programma, cosi vedi se c'è l'errore o meno...


Posted by Vorgoth on 10-02-2006 19:49:

Ora provo :\ thanks

__________________
...!


Posted by Vorgoth on 10-02-2006 19:58:

Sembra che il toString() non venga mai chiamato, ho provato un temporaneo

code:
public String toString() { return "Hello"; }

e cmq non esce a schermo O_O....boooh.

__________________
...!


Posted by Drowne on 10-02-2006 21:17:

O_O

controlla il toString di sequenza...


Posted by SpiritKJ on 11-02-2006 00:58:

Ok, quello che ho pensato pare che sia effettivamente implementabile, si tratta di un metodo ricorsivo che necessita di una variabile che definisce il numero degli spazi da lasciare per l'indentazione. Quando una serie di istruzioni è indentata, tutta la serie si sposterà dello stesso numero di spazi + gli spazi della serie stessa, e questo è il concetto di base. In questo modo se la variabile col numero degli spazi da lasciare varia, varierà anche il numero di spazi da lasciare per ogni serie. Sembra complicato perchè a quest'ora è normale che non riesca a esprimermi correttamente. Ah, sembra che questo metodo a lungo andare faccia anche scadere lo yogurt.

EDiT: azz, non avevo visto le 4 pagine di risposte :D

__________________
Be Attitude for Gains.


Posted by Drowne on 11-02-2006 01:00:

Ah, sembra che questo metodo a lungo andare faccia anche scadere lo yogurt.


Concordo, in via preventiva ho prontamente eliminato tutto lo yogurt che avevo in casa...

Mi ha sgasato la coca cola!!!


Posted by Vikyg13 on 11-02-2006 12:06:

A me stampa così:

else
..while(...)
....arg1 -= 1
..s += 1
.while(...)
.....arg1 -= 1
...s += 1
.Print s

I puntini indicano gli spazi, come mai mi risulta così???


Posted by Vikyg13 on 11-02-2006 13:41:

risolto


Posted by m410 on 11-02-2006 16:13:

Drowne ci sei vero...


Posted by m410 on 11-02-2006 16:14:

avrei bisogno di qualche chiarimento


Posted by m410 on 11-02-2006 16:20:

va be la variabile che definisce il numero degli spazi da lasciare per l'indentazione...è una variabile comune a tutte le classi quindi la definisco statica in Istruzione in modo da poter essere modificata da tutte le classi?Poi come li tolgo gli spazi?Insomma non ci ho capito una mazza...per while e if else soprattutto...abbiate pazienza sono un pò lenta...se qualcuno è cosi gentile da spiegarmi bene come si fa sta identazione...


Posted by Drowne on 11-02-2006 18:00:

io ho usato l'hashtable che, per sua stessa natura nel nostro progetto, è comune a tutte le classi. Allo stesso modo puoi tenere una variabile statica...

in pratica ad ogni riga dopo IF/ELSE fai un for con la variabile statica che ti riempie gli spazi... Devi solo sbatterci un po' ( un bel po' ) la testa contro :(


All times are GMT. The time now is 20:23.
Show all 61 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.