Newsgroup: it.comp.programmare
Titolo: Disegnare un diamante con asterischi

Ciao a tutti,
Devo disegnare un diamante con quello giu' con 
2 for loops. Mi son bloccato, e non riesco a pensare
all'algoritmo al momento. Lo disegna come una clessidra.
C'e' qualcuno che mi potrebbe indirizzare sulla 
strada giusta.
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
grazie,
Giovanni

Ti andrebbe di farci vedere come hai pensato di realizzare
l'algoritmo, anche se funziona male?

     *
Mah, cosi` su due piedi io direi una cosa del genere, in C:
void PrintClepsydra( unsigned char bMax )
{
   int i, j, sp, st;
   if( bMax )
      bMax = ( bMax / 2 ) * 2 + 1;
   for( i = 0; i < bMax; ++i )
   {
      sp = abs( bMax / 2 - i ) + 1;
      printf( "% *c", sp, '*' );
      st = ( bMax - abs( i * 2 - bMax + 1 ) - 1 );
      for( j = 0; j < st; ++j )
         printf( "*" );
      printf( "\n" );
   }
}
dove abs e` il modulo del argomento...
Ovviamente questa e` un esercizio che si potra` fare in 10000 modi
diversi...
invece di 2 for se ne  possono usare 3 op 4... si puo` non usare il modulo e
cosi` via...

strada giusta.
Ti serve un criterio per decidere quando un punto e' "dentro" al
diamante e quando no. Potresti dividere il quadratone in quattro
quadranti e usare una versione semplificata dell'algoritmo della
retta.
Questo, ti da' sempre i lati a 45 gradi (il rapporto dei due abs
e' 1), per cui vedi sempre una "fetta" di diamante (se W > H hai
una specie di esagono smozzicato):
#include <stdio.h>
#define H       11
#define W       11
int main()
{
        int x, y;
        for (y = 0; y < H; y++)
        {
                for (x=0; x < W; x++)
                        if (abs(W/2-x)+abs(H/2-y) > ((W+H)/4))
                                putchar(' ');
                        else
                                putchar('*');
                putchar('\n');
        }
}
Leonardo
-- 
Nach doiligh domhsa mo chailin a mholadh
'S ni he amhain mar bhi si or
Bhi si mar gath greine a dhul in eadan na gloinne
Is bhi sceimh mhna na finne le mo cailin or

 ha scritto nel messaggio
news:3kper0h1a1vdrfr9u...@L.Serni...


 ha scritto nel messaggio
news:rHJud.281811$b5.13...@news3.tin.it...


 ops mi sono sbagliato questo disegna un rombo scusate!
?!?
Non ho capito era una battuta? Nel caso conviene mettere uno smile...
P.S.
Comunque, visto che ce ne` l'occasione, voglio ripostare la mia un po'
perfezionata e piu` leggibile di prima ;-)
void PrintClepsydra( unsigned char bMax )
{
    int i, j, sp, st;
    bMax = ( bMax & 0xFE ) | 0x01;
    for( i = 0; i < bMax; ++i )
    {
        sp = abs( bMax / 2 - i ) /*+ ( 80 - bMax ) / 2*/;
        for( j = 0; j < sp; ++j )
            putchar( ' ' );
        st = bMax - abs( i * 2 - bMax + 1 );
        for( j = 0; j < st; ++j )


 ha scritto nel messaggio
news:PBcvd.286547$b5.13...@news3.tin.it...


 Saluti ciao.(non è una presa in giro).
Mi domandavo se lo era, perche` tu hai detto:
< ops mi sono sbagliato questo disegna un rombo scusate! >
e la cosa sa di battuta infelice!?!
Ciao

> void PrintClepsydra( unsigned char bMax )
OPS, dovrebbe essere:
void PrintDiamond( unsigned char bMax )

Grazie a tutti per aver risposto.
