 | |
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 |
[Indentazione] Problema!!! Clicca QUI per vedere il messaggio nel forum |
dany12185 |
Qualcuno è riuscito ad allineare correttamente queste maledette stringhe???...anche quando metti degli if annidati o degli if dentro un while??? |
SpiritKJ |
Forse. Devo solo vedere se quello che ho pensato è implementabile :D |
spenk.85 |
ahe hai pensato?+ teste sono meglio di una |
spenk.85 |
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?! |
sandrino83 |
teoricamnte si ma come si fa a ordinare al programma di lasciare tot spazi ogni volta? |
ARIEL |
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..... |
ARIEL |
ah mi sono accorta anche i WHILE tutti allineati |
spenk.85 |
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! |
Lyanne |
Aspettiamo tutti fiduciosi qualche ispirazione.... |
ARIEL |
il tempo stringe!!!!!! |
Skioda86 |
: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 |
ARIEL |
No scusa ma il clone() guarda che va usato nei costruttori! Non serve per l'indentazione..... |
spenk.85 |
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. |
Skioda86 |
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...!!! |
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... |
Skioda86 |
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: |
spenk.85 |
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! |
Skioda86 |
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! |
Drowne |
Dopo mangiato provo quello che ho pensato, e dovrebbe andare anche quando c'è sequenza :D |
lucafiamma |
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!! |
Skioda86 |
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: |
Vorgoth |
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. |
sg693322 |
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??? |
Drowne |
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... |
sg693322 |
io l'avevo pensato con un ciclo for e una variabile statica... |
sg693322 |
Ragazzi ero davanti alla soluzione corretta da ore ma pensavo fosse sbagliata... stasera festeggiamo con birra a volontà e r***o libero... alla fantozzi |
Drowne |
Qualcuno mi conferma se è corretta?
 |
sbrandu |
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? |
Drowne |
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
|
Drowne |
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 |
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!!!! |
sbrandu |
Grande!
Sarà un lavoraccio ma grazie! |
Drowne |
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 ^_^ |
Skioda86 |
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!!!??!! |
Drowne |
basta mettere un nspazi+2 ad inizio while ed un nspazi-2 a fine while :D semplice |
Skioda86 |
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!! |
Drowne |
................ 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. |
Skioda86 |
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 <----
:) |
spenk.85 |
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? |
Drowne |
quando chiudi un while, quando c'è l'IF o l'ELSE |
Drowne |
@ SKIODA:



cosi, no? |
ARIEL |
scusa ma se hai una sequenza di istruzioni (tipo nella istrSe) come fai a leggere una istruzione alla volta? |
Drowne |
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 |
ARIEL |
ok ma come fai a indentare le istruzioni della sequenza? |
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";
|
Drowne |
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 |
Drowne |
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... |
Vorgoth |
Ma è strano che return non dia proprio niente no? Al max dovrebbe darlo con la indentazione sbagliata O_O; |
Drowne |
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... |
Vorgoth |
Ora provo :\ thanks |
Vorgoth |
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. |
Drowne |
O_O
controlla il toString di sequenza... |
SpiritKJ |
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 |
Drowne |
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!!! |
Vikyg13 |
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ì??? |
m410 |
Drowne ci sei vero... |
m410 |
avrei bisogno di qualche chiarimento |
m410 |
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... |
Drowne |
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 :( |
|
|
|
|