Newsgroup: it.comp.lang.c
Titolo: Re: Cicli for e casini vari [Lungo]


Si ma mi rimane sempre storto :(
      *
    **
  ***
****
al posto di:
    *
  ***
*****
Ciao e grazie
Morpheus

Si ma avrai un compilatore sbarellato, o il monitor che va a raggi 
ultraviole(n)tti :)
Io l'ho compilato ed eseguito sulla mia macchina con Dev-cpp e funziona 
una meraviglia...
Hai dichiarato le variabili come signed int?
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

> for (spazi = 10; spazi>=0; i -= 2)
intendevo
for (spazi = 10; spazi >= 0; spazi -= 2)
infatti nel codice finale ho scritto bene...
-- 


Ciao a tutti
mi stň fondendo la testa con i cicli for.
Allora dovrei creare un programmino che stampi a video questo
          *
        ***
      *****
    *******
  *********
***********
una specie di albero di Natale.
ho provato cosě:
#include <stdio.h>
int main(void)
{
    int i, j, y;
    for(i=0; i<10; i++)
    {
              for(j=10; i<j; j--)
              {
                       printf(" ");
              }
              for(y=0; y<19; y++)
              {
                       printf("*");
              }
              printf("\n");
    }
    getchar();
}
Il problema sorge nel 4 ciclo for per togliere gli * in piů che non servono.
poichč l' output č + o - questo:
     *****
    *****
   *****
  *****
Lo so che ho una mente complicata e poco logica, ma č l'unico modo che mi č
venuto in mente per svolgere il programmino.
Ciao e grazie
Morpheus

 ***********
cioe' cresce  2 asterischi a riga.
allora la la prima riga
ha 1 asterisco, la seconda 3 la terza 5
etc.
in generale la riga k dall'alto ha
2*k-1 asterischi.
Quindi se assumi di avere uno schema con N righe
l'ultima avra' 2*N-1 asterischi e nessuno spazio.
Tu vuoi stampare delle linee che contengono tutte
lo stesso numero di caratteri, ovvero 2*N-1, solo
che all'inizio contengono pochi asterischi e in fondo
tutti asterischi.
Quindi ti basta fare una cosa cosi':
dato N (numero di righe da generare)
int spz, ast,i,j;
for (i = 1 ; i <= N; i++)
{
/* numero di asterischi nella riga i-esima*/
  ast =  2*i-1;
/* numero di spazi, ovvero 2*N-1 meno gli asterischi! */
spz = 2*N-1 - ast;
/* stampo gli spazi */
for (j=0; j<spz; j++) putchar(' ');
/* stampo gli asterischi */
for (j=0; j<ast; j++) putchar('*');
/* vado a capo*/
putchar('\n');
}
la putchar() definita in stdio.h spara fuori un carattere. E' piu' 
semplice della printf.
se poi per caso dovevi fare
cosi':
      *
     **
    ***
   ****
etc.
con passo 1, allora si fa uguale ma ancora
piu' semplice.
ciao,
g.


Scusa ho capito male e ti ho risposto peggio
Il passo è +2 a riga, ma centrato:
       *
     ***
   *****
********
nel tuo caso mi viene
          *
        **
      ***
    ****
Scusa ancora ma avevo capito male.
Ciao e grazie.
Morpheus

Veramente potresti capovolgere il problema: invece di contare il numero 
di asterischi, di volta in volta tieni il conto di quanti spazi bianchi 
stampare.
Passo 1: 10 spazi e  1 asterisco;
Passo 2:  8 spazi e  3 asterischi...
Passo n:  0 spazi e 11 asterischi
for (spazi = 10; spazi>=0; i -= 2)
{
   // Stampo tanti spazi
   for (i = 1; i <= spazi; i++)
     printf(" ");
}
A questo punto, dopo aver stampato di volta in volta gli spazi bianchi, 
stampi quanti asterischi restano fino ad arrivare ad 11 caratteri...
for (spazi = 10; spazi >= 0; spazi -= 2)
{
   // Stampo tanti spazi e asterischi
   for (i = 1; i <= 11; i++)
     if (i <= spazi)
       printf(" ");
     else
       printf("*");
   // Vado a capo perchè ho terminato questa riga
   printf("\n");


 g.
Si dovevo fare come il tuo disegnino, infatti il codice che mi scritto tu è
molto più logico del mio, io ho fatto un casino con sti for.
Adesso provo a vedere se riesco a farlo con passo 1.
Ciao e grazie
Morpheus

 Morpheus
Ti rispondo in un nuovo thread dal
titolo "Gli alberi di natale di Morpheus".
Comunque il problema di incomunicabilita' cosmica
che abbiamo avuto a proposito degli alberi
di natale e' dovuto al fatto che tu probabilmente
non usi un font di visualizzazione che ha tutti
i caratteri di dimensione uguale.
Quindi probabilmente per te uno spazio (un blank)
e' piu' piccolo di un asterisco.
Io per abitudine e sanita' mentale utilizzo
prinpalmente il courier in modo di poter
incolonnare facilmente le cose.
Per me ad esempio questo e' un albero
centrato, come puoi controllare impostando
la tua visualizzazione con un fixed font.
   *
  ***
*****
ciao,
g.


Si e il compilatore è Dev C++ 4.9.9.2 aggiornato, ho provato anche con
Lcc-win32 e Ming studio.
:(((
Allora tutte le volte che ho provato e che mi veniva o tutto a dx o tutto a
sx poteva essere giusto ?
Che sfiga....
bhooo riproverò.


Ho capito l'errore...
Praticamente nel post iniziale č stato disegnato male l'albero di 
natale. A me risulta completamente a destra quindi con una linea 
verticale a destra. E su quel disegno mi son basato per scrivere il 
codice C.
L'autore intendeva sicuramente un albero di questo tipo:
      *
     ***
    *****
   *******
  *********
***********
mentre nel post iniziale veniva disegnato cosě:
           *
         ***
       *****
     *******
   *********
***********
e siccome diceva "una specie di albero di natale" ho pensato che fosse 
corretto cosě.
Solo ora ho capito tutto :)

 ha
scritto nel messaggio news:nemue.17097$D7.4...@twister1.libero.it...

esatto, cmq io vedo pochissima differenza tra il primo disegno e l' altro,
sto Outlook express fa schifo, praticamente deve essere un triangolo
equilatero formato da tanti *
Ciao Morpheus