Помощь - Поиск - Пользователи - Календарь
Полная версия: Создать изображение в виде "1" и "0"
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Gl00M
Как уже Volvo подсказал, задача "Заполнить массив n на n по следующей схеме:"
Цитата
1111111
0111110
0011100
0001000
0011100
0111110
1111111
решается давольно таки легко...
а как решить задачу по схеме:
Цитата
111101111
111000111
110000011
100000001
000111000
100000001
110000011
111000111
111101111


P.S. Вот что подсказал по поводу первой:
Код
function min(a, b: integer): integer;
begin
  min := a; if b < a then min := b;
end;
function max(a, b: integer): integer;
begin
  max := a; if b > a then max := b;
end;
begin
  ...
  For i:=1 to n do begin
    for j := min(1 + i - 1, n - i + 1) to max(1 + i - 1, n - i + 1) do
      a[i, j] := 1;
  end;
  { ... и печатай матрицу ... }
  ...
end.

За что ему спасибо! smile.gif

И, кто поможет мне, тоже отдельная благодарностЬ! smile.gif)))
volvo
Gl00M
Я тебе уже и по этому поводу подсказал, обнови страницу smile.gif
Gl00M
О! Точно! Еще раз спасибо!
Но, для кого интересно, вот что подсказал Volvo (а вдруг кому-нить понадобиться):
Код

var T: integer;
...
  T := (n div 2) + (n mod 2);
  for i := 1 to n do begin
    for j := 1 to n do begin
      if i <> T then begin
        if (j < ( T - (i-1)) ) or (j > ( T + (i-1)) ) then begin
          a[i, j] := 1; a[n - i + 1, j] := 1;
        end
      end
      else begin
        { Здесь проставь сколько тебе нужно единиц в средней строке (добавится еще одно условие) }
      end
    end;
  end;
klem4
У меня вот что вышло :

uses crt;

const

n = 9;

type

TMx = array[1..n, 1..n] of byte;

function GetMatrix: TMx;
var
i, j: Integer;
r: TMx;
begin

FillChar(r, sizeof( r ), 1);

for i := 1 to n div 2 + 1 do
for j := (n div 2 + 1) - pred(i) to (n div 2 + 1) + pred(i)
do r[i, j] := 0;

for i := n div 2 + 2 to n do
for j := i - n div 2 to n - ( i - n div 2 - 1)
do r[i, j] := 0;

GetMatrix := r;

end;

procedure Print(mx: TMx);
var
i, j: Integer;
begin
for i := 1 to n do begin
writeln;
for j := 1 to n do
write(mx[i, j]:2);
end;
end;

begin
clrscr;
Print(GetMatrix);
readln;
end.


Только в середину надо вставить единички, ибо как это в цикле сделать ума не приложу ...

что-то я припозднился unsure.gif
Gl00M
Мда.. вопрос был снят до того момента, как преподша не посмотрела... sad.gif
Вощем.. дала она задание сделать вот такой рисунок (ей все равно, как разных n он будет отображаться)..
вот:
Цитата

111111111
110000011
110000011
111111111
000011000
001011010
000111100
000011000
000011000

Знаю, что рисунок отличается от предыдущего (см. пост #1) незначительно, но я уже всю голову сломал над ним..
Хелп ми, Плиззз! smile.gif
volvo
Gl00M, я не понял, что происходит... На Винограде ты напечатал одно (см. внимательно третью строку картинки), у нас - другое... Какой вариант считать верным? blink.gif
Gl00M
Подправил. Извиняюсь за ошибку.
volvo
...
k: integer;
...

begin

for i := 1 to n do begin
if i <= n div 2 then
for j := 1 to n do begin
if (i = 1) or (i = (n div 2)) then a[i, j] := 1
else if (j < 3) or (j > n - 2) then a[i, j] := 1
end
else begin
for j := 0 to 1 do a[i, (n div 2) + j + 1] := 1;
k := i - (n div 2);
if (k > 1) and (k < 4) then begin
a[i, (n div 2) + (n mod 2) + (3 - k) + 2] := 1;
a[i, (n div 2) + (n mod 2) - (3 - k) - 1] := 1;
end;
end;
end;
...

?
Gl00M
Привет всем еще раз!
Вот, у меня опять не получается рисунок! sad.gif((
Надо: нарисовать сердечко! smile.gif

Заранее спасибо! ))))
мисс_граффити
можешь здесь нарисовать, какое?
а то я могу много вариантов придумать...
Gl00M
Да мне любой, но ща попробую.. smile.gif
Код

001000000000100
011110000011110
111111000111111
111111101111111
111111111111111
011111111111110
001111111111100
000111111111000
000011111110000
000001111100000
000000111000000
000000010000000

ну, вот как-то так.. smile.gif
Altair
Код, передал Volvo (у него временные проблемы с провайдером)

...

const
lines = 12;
n = 15;

var
a: array[1 .. lines, 1 .. n] of integer;
i, j, k: integer;

begin

for i := 1 to 5 do
for k := 1 to 2 * i do begin

if (3 - i) + k >= 1 then begin
a[i, (3 - i) + k] := 1;
a[i, n - ((2 - i) + k)] := 1;
end;

end;

for i := 2 to lines div 2 + 2 do
for j := i to n - i + 1 do a[4 + i, j] := 1;

for i := 1 to lines do begin
for j := 1 to n do write(a[i, j]);
writeln;
end;

end.


(С)Volvo
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.