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)
Problema indentazione!!!
Qualcuno è riuscito ad allineare correttamente queste maledette stringhe???...anche quando metti degli if annidati o degli if dentro un while???
Forse. Devo solo vedere se quello che ho pensato è implementabile :D
__________________
Be Attitude for Gains.
ahe hai pensato?+ teste sono meglio di una
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;
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.......
niente, edit
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;
ah mi sono accorta anche i WHILE tutti allineati
Originally posted by sandrino83
teoricamnte si ma come si fa a ordinare al programma di lasciare tot spazi ogni volta?
Aspettiamo tutti fiduciosi qualche ispirazione....
__________________
some photos of mine
il tempo stringe!!!!!!
Ragazzi....Oggi mentre cazzeggiavo, mi è venuta una brillante idea e...
Io ve la butto lì...poi vediamo se qualcuno ci arriverà....
Prof Malchiodi - 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.
__________________
- - {[( KEVIN HIGHT FLY)]} - -
No scusa ma il clone() guarda che va usato nei costruttori! Non serve per l'indentazione.....
Originally posted by SpiritKJ
Forse. Devo solo vedere se quello che ho pensato è implementabile
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)]} - -
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...
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...
__________________
- - {[( KEVIN HIGHT FLY)]} - -
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
code:
WHILE (ricazzi e rimazzi) .....istr1; istr2;
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!
__________________
- - {[( KEVIN HIGHT FLY)]} - -
Dopo mangiato provo quello che ho pensato, e dovrebbe andare anche quando c'è sequenza
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!!
Drowne
Dopo mangiato provo quello che ho pensato, e dovrebbe andare anche quando c'è sequenza
__________________
- - {[( KEVIN HIGHT FLY)]} - -
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
__________________
...!
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...
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...
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...
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...
Qualcuno mi conferma se è corretta?
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?
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
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
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)]} - -
Grande!
Sarà un lavoraccio ma grazie!
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!!!!
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)]} - -
basta mettere un nspazi+2 ad inizio while ed un nspazi-2 a fine while semplice
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)]} - -
................ 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.
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 ----> <---
code:
while() ciao ----> ciao <----
__________________
- - {[( KEVIN HIGHT FLY)]} - -
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?
quando chiudi un while, quando c'è l'IF o l'ELSE
scusa ma se hai una sequenza di istruzioni (tipo nella istrSe) come fai a leggere una istruzione alla volta?
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
ok ma come fai a indentare le istruzioni della sequenza?
Io ho provato il metodo di Drowne (usando una variabile statica) e come output mi esce:
code:
DECLARE s; DECLARE arg1; arg1 = 5; 15
code:
String s = ""; for(int i=0; i<indent; i++) { s = s + " "; } return s+"PRINT "+messaggio+";\n";
__________________
...!
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.
Personalmente ho usato l'hashtable, xo si può fare anche con una variabile statica
Originally posted by Vorgoth
Io ho provato il metodo di Drowne (usando una variabile statica) e come output mi esce:
code:
DECLARE s; DECLARE arg1; arg1 = 5; 15
code:
String s = ""; for(int i=0; i<indent; i++) { s = s + " "; } return s+"PRINT "+messaggio+";\n";
Ma è strano che return non dia proprio niente no? Al max dovrebbe darlo con la indentazione sbagliata O_O;
__________________
...!
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...
Ora provo :\ thanks
__________________
...!
Sembra che il toString() non venga mai chiamato, ho provato un temporaneo
code:
public String toString() { return "Hello"; }
__________________
...!
O_O
controlla il toString di sequenza...
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
__________________
Be Attitude for Gains.
Ah, sembra che questo metodo a lungo andare faccia anche scadere lo yogurt.
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ì???
risolto
Drowne ci sei vero...
avrei bisogno di qualche chiarimento
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...
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:50. | Show all 61 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.