[ blanka @ 10.08.2003. 22:02 ] @
Problem je sledeci: Napisati program sa 2 varijable, height and width sa vrijednostima 11 i 9. Koristeci ove varijable program treba generisati sledeci output:


*
***
*****
*******
***********
*******
*****
***
*

Kode treba biti takav da vrijednosti varijabli nisu fiksne, tj. da kode radi i sa drugim neparnim vrijednostima, npr. 15 i 13 itd. Ovdje je kode koji printa pola ovog 'dijamanta'.

for ($height = 0; $height <= 6; $height++) # print first 6 rows, increamenting
{
for ($width = $height; $width >= 1; $width--) # print columns, decreamenting
{
print "*";
}
print "\n"; # print new lines
}
for ($height = 5; $height >= 1; $height--) # print last five rows
{
for ($width = 1; $width <= $height; $width++) # print columns
{
print "*";
}
print "\n"; #print new line
}

Da li neko ima ideju kako isprintati cijeli 'dijamant' sa vrijednostima za height i width, koje nisu fiksne.

blanka
[ alkal @ 13.08.2003. 17:48 ] @
Može ovako:
Code:


crtaj_dijamant(13, 15);

sub crtaj_dijamant
{
    ($sirina, $visina) = @_;

    $x_sredina = int($sirina / 2);
    $y_sredina = int($visina / 2);

    $k1 = ($y_sredina - 0) / (0 - $x_sredina);
    $k4 = $k1;
    $k3 = $k2 = -$k1;

    # Pomak po y osi prave paralelne datoj (rastojanje izmedju njih je 0,5):
    $pomak = 0.5 * sqrt(1 + $k2*$k2);
    $n1 = 0 - $k1 * $x_sredina - $pomak;
    $n2 = 0 - $k2 * $x_sredina - $pomak;
    $n3 = $visina-1 - $k3 * $x_sredina + $pomak;
    $n4 = $visina-1 - $k4 * $x_sredina + $pomak;

    for ($y=0; $y<$visina; $y++) {
        for ($x=0; $x<$sirina; $x++) {
            if ( ( $y >= $k1 * $x + $n1 ) &&
                 ( $y >= $k2 * $x + $n2 ) &&
                 ( $y <= $k3 * $x + $n3 ) &&
                 ( $y <= $k4 * $x + $n4 )   ) {
                print "*";
            } else {
                print " ";
            }
        }
        print "\n";
    }
}


Budući da je problem bio u algoritmu mislim da ova tema više odgovara forumu "Art of Programming".
[ blanka @ 16.08.2003. 23:48 ] @
Aleksandar,

zahvaljujem na odgovoru. Ovaj forum je odlican.

blanka
[ alkal @ 17.08.2003. 14:50 ] @
Citat:
Ovaj forum je odlican.

Da znaš da jeste.

Evo i ilustracije za slučaj širina=7, visina=5: