Newsgroup: it.comp.java
Titolo: For Annidati

Ringrazio già da ora chi mi risponde.
Ho il seguente codice:
public class  Ex06
{
 public static void  main (String[] args)
   {
    final int MAX_RIGHE = 10;
    int riga;  //conta le righe
    int i;     //conta gli asterischi
    for (riga = 1;   riga <= MAX_RIGHE;   riga++)
      {
         for (i = 1;   i <= riga; i++)
            System.out.print ("*");
         System.out.println();
      }
   }
}
perchè l'output è il seguente:
*
**
***
****
*****
******
*******
********
*********
**********
Per favore spiegatemi tutto Passo-Passo sto impazzendo.

Non ho capito: l'output non è ciò che vuoi o non sai come funzionano
i cicli for?

Sto studiando da poco il for è mi sto confondendo soprattutto con gli
annidamenti.
Non capisco perchè esce il triangolo,cosa succede nei for ?

 ha scritto nel messaggio
news:1138806973.0...@o13g2000cwo.googlegroups.com
..
.
Ringrazio già da ora chi mi risponde.
Ho il seguente codice:
-cut-
Perchè il for con riga ne incrementa il valore(numero di
asterischi),
il for con  i li stampa e dopo finito va a capo(println è un
metodo che appunto manda a capo).
Finisce il tutto quando il numero di righe è uguale a
MAX_RIGHE, che tra l'altro è anche il numero max
di asterischi che hai.

 writes:
A> Per favore spiegatemi tutto Passo-Passo sto impazzendo.
Grossa curiosità:  ma quale utilità  pensi di ricavare  dalla program-
mazione in generale e da Java in particolare ?
Se  stai studiando  Java, il  fatto che  quel codice  ti sia  oscuro è
indice che devi  tornare sui libri. Prova anche  a scrivere del codice
tu invece di limitarti a guardare gli esercizi, si impara meglio.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

Non capisco una cosa:
il primo confronto  i<=Riga equivale a 1<=1 ?quando si incrementano i e
riga ? in quale momento ?

 writes:
|
| A> Per favore spiegatemi tutto Passo-Passo sto impazzendo.
|
| Grossa curiosità:  ma quale utilità  pensi di ricavare
dalla program-
| mazione in generale e da Java in particolare ?
|
| Se  stai studiando  Java, il  fatto che  quel codice  ti
sia  oscuro è
| indice che devi  tornare sui libri. Prova anche  a
scrivere del codice
| tu invece di limitarti a guardare gli esercizi, si impara
meglio.
Non posso che trovarmi in sintonia con uL !!!
Se hai problemi con questi esercizi, per te la vedo dura :S
senza offesa!
Alex a proposito quanti anni hai? magari si spiega meglio il
tutto!

Ho 21 anni e giorno 8 febbrai devo effettuare l'esame di java
all'università, dove fortunatamente è diviso in 3 parti lo scritto,
spero di superare la prima parte.
Prima Parte)Capire gli output di metodi ricorsivi con array e for.
Seconda Parte)Provare a scrivere un programma tipo PRIMA PARTE
Terza Parte)Scrivere ad oggeti
QUARTA PARTE LABORATORIO)Scrivere un programma con tutto ciò che si è
studiato.
Ho problemi con il for perchè ho sempre usato il while.

 ha scritto nel messaggio
news:1138809329.3...@f14g2000cwb.googlegroups.com
..
.
Ho 21 anni e giorno 8 febbrai devo effettuare l'esame di
java
all'università, dove fortunatamente è diviso in 3 parti lo
scritto,
spero di superare la prima parte.
Ah ho capito, beh allora in bocca al lupo!!!!!
La while si usa principalmente perchè la condizione
d'uscita, o non dipende da un numero,
o, se si, perchè non è a priori noto il numero di cicli che
si devono effettuare.
Quando invece lo si conosce a priori, la for è più indicata.
Questo è almeno il criterio che io uso nello scegliere le
due alternative, tra l'altro migliora
la leggibilità, almeno a me è sempre sembrato così!
Qui il thread non finira più te lo dico io ;) adesso ci
saranno commenti e smentite :D

 spero di superare la prima parte.
mamma mia... :(

 for (i = 1;   i <= riga; i++)
Questo ciclo, che viene eseguito ad ogni cliclo del for precedente, dice 
di stampare gli asterischi da 1 a valore della variabile riga, poi 
inserire un return (System.out.println()); la variabile riga varrà al 
primo ciclo del for esterno 1, poi 2, 3, 4, ecc. fino a MAX_RIGHE, 
quindi 10.
Traducendo in righe (invece di asterischi quello che hai fatto sarebbe:
1
22
333
4444
55555
666666
7777777
88888888
ecc...
Spero di esserti stato di aiuto!
Ciao!
P.S. In bocca al lupo per l'esame!
-- 
L'amico è colui che non solo sembra onesto, ma lo è davvero; colui che 
sembra tale senza esserlo dà l'impressione di essere amico, ma non lo è. 
                       Platone, REPUBBLICA, libro primo.

 ha scritto
L'avevo controllata 10.000 volte.
public class  Ex06
{
    public static void  main (String[] args)
   {
        final int MAX_RIGHE = 10;
        int i;  // conta gli asterischi per ogni riga
        int riga=1;  //conta le righe
        while(riga <= MAX_RIGHE)
        {
            i=1;
            while( i <= riga)
            {
                 System.out.print ("*");
                 i++;
            }
            System.out.println();
            riga++;
    }
}
TotonnoŽ

for (riga = 1;   riga <= MAX_RIGHE;   riga++) {
    for (i = 1;   i <= riga; i++)
        System.out.print ("*");
    System.out.println();
}
Basta seguire il codice passo-passo.
Il for esterno esegue un'iterazione da riga=1 a riga=MAX_RIGHE.
Il for interno esegue un'iterazione da i=1 a i=riga.
Quindi:
riga=1
    i=1    stampa *
riga=2
    i=1    stampa *
    i=2    stampa *
riga=3
    i=1    stampa *
    i=2    stampa *
    i=3    stampa *
...
riga=10
    i=1    stampa *
    i=2    stampa *
    i=3    stampa *
    ...
    i=10    stampa *
Chiaro?
Ciao
Marco 

 writes:
A> perchè ho sempre usato il while.
Beh, in questo caso 
for ("assegnazione";"test";"postcondizione") {
    "corpo"
}
equivale a
"assegnazione"
while("test") {
    "corpo"
    "postcondizione"
}
(Le parole  tra virgolette  sono porzioni di  codice, non  ti dovrebbe
essere  difficile individuarle  una  volta ripassata  la sintassi.  il
termine postcondizione è messo quasi a caso, non ti fidare!)
Quindi tu prendi i tuoi for annidiati, li trasformi in while e 
comprendi cosa fa il codice.
Sono quasi sicuro che la cosa  è spiegata sul libro che devi studiare,
ma probabilmente è spiegata male.


ho capito tutto Grazie a tutti voi

 writes:
A> Non capisco una cosa: il primo confronto i<=Riga equivale a 1<=1
Esatto. Al "primo giro" del cilco esterno Riga vale 1, quindi il test
(riguardati il funzionamento del for sul libro!!!) viene passato una
volta sola.
A> ?quando si incrementano i e riga ? in quale momento ?
Riguardati la descrizione di for sul libro!
In ogni caso, il contenuto  delle parentesi tonde di uno statement for
č fatto da tre parti (nessuna obbligatoria, peraltro):
  inizializzazione; test; "postcondizione" (come ho detto, non ricordo il
                                            termine corretto)
inizializzazione viene eseguita PRIMA di entrare nel ciclo, una volta sola.
test viene  eseguito dopo inizializzazione, prima di  ogni ciclo (come
nel caso  di while). Se il  test viene passato  (l'espressione di tipo
boolean vale true) allora viene eseguito il corpo del ciclo.
"postcondizione"  viene eseguito  una  volta completato  il corpo  del
ciclo, prima di effettuare un nuovo test.
La sequenza di un ciclo 
   for(inizializzazione;test;postcondizione)
        corpo
č
inizializzazione
test
corpo
postcondizione
test
corpo
postcondizione
....
test 
corpo
postcondizione
test (fallito)
[fine del ciclo]


 Non posso che trovarmi in sintonia con uL !!!
uL e Gian Uberto Lauri perņ sonon due persone diverse. Lui al massimo č
guL, se proprio lo 
desiderasse!
uL
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:drqvpq$91p$1...@news.newsland.it...
| Gringo ha scritto:
|
| > Non posso che trovarmi in sintonia con uL !!!
|
| uL e Gian Uberto Lauri perņ sonon due persone diverse. Lui
al massimo č
| guL, se proprio lo
| desiderasse!
|
| uL
Beh, era solo una supposizione, nemmeno io mi chiamo Gringo
:D

 ha scritto nel messaggio 
news:43e0dc4f$0$22085$4faf...@reader1.news.tin.it...


 ha scritto nel messaggio
news:yDaEf.73497$eD5.1...@twister2.libero.it...
| Sai sono 12 anni che programmo e non avevo mai pensato
alla vera
| "filosofica" differenza tra for e while... mi sa che hai
ragione tu, se non
| si va ad indagare a livello di cicli macchina e
ottimizzazione, con un for
| puoi fare un while e viceversa... Mah, strutture di
iterazione!!!
Beh, diciamo che la for con una while viene bene, ma, che ne
sappia io, il contrario,
salvo i casi in cui si esce dal ciclo con una disuguaglianza
numerica, sarebbe, ammessa la possibilità di farlo,
quanto meno inusuale!
In conclusione, nessun programmatore, di fatto, usa la for
al di fuori dei ben noti casi!

In effetti NON sto dicendo che sia usuale, era solo una curiosità... come 
hai detto benissimo tu con una semplice disuguaglianza con entrambi i membri 
variabili è semplicissimo simulare un while... certo non sto dicendo che è 
elegante, pulito, efficiente o altro, solo che la differenza tra i due 
costrutti è fine... si è veramente vincolati ad usare uno dei due costrutti 
solo raramente...


 ha scritto nel messaggio
news:RWaEf.73540$eD5.1...@twister2.libero.it...
 si è veramente vincolati ad usare uno dei due costrutti
| solo raramente...
Direi però che la leggibilità ne risentirebbe moltissimo,
anche la pulizia del codice!
Prova a scrivere tre quattro cicli annidati con la for e poi
con la while :S

RIPETO per la DECIMA volta... Mi quoto:
certo non sto dicendo che è
elegante, pulito, efficiente o altro, solo che la differenza tra i due
costrutti è fine...
Quindi non sto affermando che i due contrutti siano equivalenti, solamente 
che se fossimo obbligati potremmo fare a meno di uno di essi. Alla fine è la 
stessa cosa dell'if e dello switch... non dico che la differenza non vi sia, 
ma ne basterebbe uno solo. Uno per tipologia di construtto (iterativa, 
condizionale...etc). Tutti qui. Avrei voluto dare linguaggi e traduttori 
MIIIIIHH!!!

 for puoi fare un while e viceversa... Mah, strutture di iterazione!!!
Ci sono precisi teoremi "matematici" che dicono quali sono il minimo dei
costrutti per avere un linguaggio turing completo.
Addirittura puoi fare a meno di qualunque ciclo se hai la ricorsione.
Volendo anche se hai il <ptu>goto</ptu>.
-- 
L'idiozia trascende il mezzo con cui viene espressa.

 quanto meno inusuale!
In un linguaggio con i puntatori
for(Node n = root; n.next != null; n = n.next){
}
è un idioma abbastanza comune. (più comune nella forma [0]) Da un punto
di vista filosofico è assolutamente altrettanto corretto, si mantiene
chiara la semantica 
inizializzazione; condizione d'uscita; incremento
Ovviamente in Java il codice di cui sopra ha "relativamente poco senso".
Con tutti i contenitori standard che ci sono... diciamo che è traduzione
da C, usando il fatto che la semantica dell'assegnamento è quella di un
puntatore (senza avere l'aritmetica, ok, ma qui non si usa).
Poi in Java immagino che invece che accedere direttamente a next ci
sarebbe un getNext(), ma è zucchero sintattico in questo caso. Come
immagino che ci sarebbe un hasChild() invece di n.next != null.
Quindi alla fin fine sarebbe:
for(Node n = root; n.hasChild() ; n = n.getNext() ){
}
Il codice di cui sopra non è stato testato e io sono oltremodo stanco.
Quindi non do manco le garanzie di compilabilità e di non minchioneria
generalmente implicite nei post.
[0]:
for(node n = root; n->next != NULL; n = n->next){


 Beh, era solo una supposizione, nemmeno io mi chiamo Gringo
Ma magari eri G. Ringo :)


 wrote:
|
| > Beh, era solo una supposizione, nemmeno io mi chiamo
Gringo
|
| Ma magari eri G. Ringo :)
puo essere con l'etą :D

>>>> I get words from the Allmighty Great Gnus that
MO> for(Node n = root; n.next != null; n = n.next){
In C sarei più per
      for(Node n = root; n->next; n = n->next)
che (almeno quando avevo occasione di usarlo) un valore diverso da 0 o
null è considerato "vero".
MO> Ovviamente in Java il codice di cui sopra ha "relativamente poco
MO> senso".  Con tutti i contenitori standard che ci sono..
Che abbia  visto io  i contenitori standard  li ottieni  scorrendo una
sequenza con  un codice quasi uguale al  tuo, nell'assegnazione estrai
la sequenza dalla  collezione, il test è che  la sequenza abbia ancora
qualcosa  da  dare  e  la  parte  di incremento  è  vuota.  Si  estrae
l'elemento dalla sequenza (usualmente) come prima operazione del ciclo
che la scorre.
MO> Addirittura puoi fare a meno di qualunque ciclo se hai la ricorsione.
Dovrebbe  esserci un  teorema che  poi offre  l'algoritmo  per passare
dalla forma ricorsiva (spesso costosa) a quella iterativa
MO> Volendo anche se hai il <ptu>goto</ptu>.
Non vorrei ma le CPU usano quello (sotto mentite spoglie) :)
Lo switch()  del C  ancora peggio, era  una specie di  "goto calcolato
sotto controllo". :) :) :) :) :)


 wrote:

L'idiozia trascende il mezzo con cui viene espressa.   :D

Conoscete il teorema di Bohm-Iacopini...? 

 sotto controllo". :) :) :) :) :)
Massi... ne abbiamo anche parlato. La mail č rimasta la stessa, il nick
no. :)


 Conoscete il teorema di Bohm-Iacopini...? 
Si, non di nome (nel senso che ne conosco il risultato ma non l'autore).
Era uno dei teoremi di cui parlavo.


> sotto controllo". :) :) :) :) :)
MO> Massi... ne abbiamo anche parlato. La mail è rimasta la stessa, il
MO> nick no. :)                           ^^^^
Ti avevo già riconosciuto da quella...
/* BTW, per "emergenza" ho provato Aquaemacs, non così traumatico come
temevo anche se certe cose... brrr.... */


 temevo anche se certe cose... brrr.... */
Tipo? Comunque settandolo lo puoi fare comportare paro paro come quello
standard.


> come temevo anche se certe cose... brrr.... */
MO> Tipo? Comunque settandolo lo puoi fare comportare paro paro come
MO> quello standard.
Devo far tornare *scratch* da text (scelta idiota) a Lisp Interaction Mode...


 ha scritto nel messaggio 
news:43e1dc45$0$22085$4faf...@reader1.news.tin.it...


 ha scritto nel messaggio 
news:1ha3vql.6gn1401lvvacuN%ri...@despammed.com...


 linguaggio logico (lisp, etc), no?
Io il Lisp non lo infilerei fra i linguaggi logici. Comunque qua si
parlava di paradigma imperativo.


 ha scritto nel messaggio 
news:tEbEf.156535$65.43...@twister1.libero.it...

MUAHAHAH!!! PENSA A LAUREARTI PRIMA!!!! =) 

> linguaggio logico (lisp, etc), no?
MO> Io il Lisp non lo infilerei fra i linguaggi logici.
Infatti è un linguaggio funzionale. 
L'associazione  del LISP  con la  I.A. è  "puramente casuale",  era il
migliore linguaggio disponibile allora  e ancora adesso molti lo hanno
in grande  considerazione.
Stando  ad alcuni,  tra cui  Paul Graham,  è col  C una  delle "grandi
vette" ed i linguaggi moderni stanno tutti tendendo al LISP.
Nota:  Java ha forti  "debiti" col  LISP, non  solo la  gestione della
memoria.
Nota  2: Il Lisp  permette di  zittire che  se la  tira con  la storia
dell'overloading  degli  operatori   facendo  rendere  conto  che  gli
operatori sono solo una questione di cultura e zucchero sintattico.
