Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Printf и графический output.


Автор: junior 21.1.2005, 00:21
привет всем!
если у кого будет время, помогите решить такую задачку, please.
декларируются две переменные, которые соответствуют ширине и длине соответственно. В данном случае их значения 11 и 9, хотя желательно что бы работало для любых значений. На выходе нужно получить следующее:

***********
***********
***********
***********
***********
***********
***********
***********
***********
And:

***********
* *
* *
* *
* *
* *
* *
* *
***********
And:

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

В форуме фигуры изображаются искаженно. Вот картинка, там все фигуры: прямоугольник заполненный звездочками, прямоугольник не заполненный и правильный ромб.
http://www.geocities.com/al_mcchar/perl1.JPG
Я так понимаю, нужно использовать , printf and loops, но у меня рисуется толькл часть фигур.
smile У кого будут идеи, поделитесь пожалуйста.
Спасибо!

Автор: korob2001 21.1.2005, 03:18
Может есть способы и лучше, просто времени в обрез. Вот тебе 3 ответа, на 3 твоих вопроса. Коментировать не стал, думаю и так разберёшься, но если всё же возникнут трудности, пиши, тогда поясню каждую строку.
Код

#!/usr/bin/perl -w
use strict;
my $width = 11;
my $height = 9;
print "*" x $width, "\n"  for (1..$height);


Код

#!/usr/bin/perl -w
use strict;
my $width = 11;
my $height = 9;
for (1..$height) {
    unless ( $_ == 1 or $_ == $height ) {
         print "*";
         print " " x ($width - 2), "*\n";
         next;
    }
    print "*" x $width, "\n";
}


Код

#!/usr/bin/perl -w
my( $width, $height );
$width = $height = 41;
$width = $height++ unless $width % 2;
my $star = 1;
my $back = 0;
for (1..($height * 2)) {
    exit(0) if $star <= 0;
    my $blank = ($width - $star) / 2;
    print " " x $blank, "*" x $star, " " x $blank, "\n";
    if ($back) {
       $star -= 2;
    } else {
        $star += 2;
       if ($star >= $height) {
          $back = 1 if $star >= $width;
       }
    }
}

Только в последнем коде, значения переменных $width и $height должны быть одинаковы. Глаза слипаются, если что завтра ещё подумаю.

Удачи.

Автор: junior 21.1.2005, 10:12
Спасибо, korob2001 !!! smile
Над ромбом еще поработаю, может получится все три фигуры привязать к единым значениям, задаваемым на входе в одной программе. В любом случае, сейчас мне намного проще будет разобраться после твоих идей, за что тебе огромное СПАСИБО!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)