Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите написать небольшую програмку

Автор: Acer 18.05.2007 15:35

Буду очень благодарен, если вы хоть как-то мне поможете с написанием данной программы:

задача:"Шахматная Доска"
Целочисленный массив K размером m x n заполнить нулями и единицами, расположив их в шахматном порядке.
(смысл: при запуске проги в окне должны появиться строчки с чередованием единиц и нулей
10101010
01010101
и т.д.
причем, количество строк и столбцов все время меняется и ограничено десятью).


Заранее всем благодарен!

Автор: klem4 18.05.2007 15:37

Поиском не пробовал воспользоваться ? Задача решалась ...

Автор: volvo 18.05.2007 15:39

Так что-ли?

var
i, j, n: integer;
start: integer;

begin
write('n = '); readln(n);
for i := 1 to n do begin
start := byte(odd(i));
for j := 1 to n do begin
write(start:2); start := 1 - start;
end;
writeln;
end;
end.



Добавлено через 1 мин.
P.S.
странно, вообще-то шахматная доска по-моему квадратная... Пойду проверю...

Автор: Acer 18.05.2007 15:48

klem4, спасибо, но я не совсем понял то, что в программе

volvo,Спасибо.
да, доска квадратная, но у нас не n x n, а m x n.
Тоесть главное, чтобы в шахматном порядке было.
и еще, как объяснил учитель и m и n должны быть в программе и задаваться random-ом от 1 до 10,
т.е может быть одна строчка чисел, две и т.д, то же самое и со столбцами.

Автор: volvo 18.05.2007 16:29

Тогда вот так:

var
i, j, n, m: integer;
start: integer;

begin
randomize;
m := random(10) + 1;
n := random(10) + 1;
for i := 1 to m do begin
start := byte(odd(i));
for j := 1 to n do begin
write(start:2); start := 1 - start;
end;
writeln;
end;
end.


Автор: Acer 18.05.2007 16:32

Спасибо!
З.Ы. только что такое odd?

Автор: volvo 18.05.2007 16:42

Функция такая... Вернет True, если ее аргумент - нечетный...

Автор: Acer 18.05.2007 16:43

Цитата
Функция такая... Вернет True, если ее аргумент - нечетный...

Хм....в смысле true?

Автор: volvo 18.05.2007 16:47

Чего, про тип Boolean никогда не слышал? Допустим, ты сравниваешь 2 числа:

If (a > b) then ...


Вот результат вычисления того, что в скобках - это какого типа? Логического, правда? Истина или Ложь, True или False в записи на Паскале...

Автор: Acer 18.05.2007 16:51

Ааа, понял.

Цитата
Чего, про тип Boolean никогда не слышал?

Сразу не врубился.

Огромное Спасибо, Владимир.
Респект!
Не ожидал, что так быстро поможете.
Еще раз Спасибо!

Автор: Acer 21.05.2007 23:28

Владимир, не могли бы вы мне еще помочь.
Можно ли сделать эту программу без odd и start, как можно более примитивно.
Заранее Спасибо.

Автор: volvo 22.05.2007 0:02

var
i, j, n, m: integer;

begin
randomize;
m := random(10) + 1;
n := random(10) + 1;
for i := 1 to m do begin

for j := 1 to n do
write(((i + j + 1) mod 2):2);

writeln;
end;
end.

Главное - чтобы потом тебе не понадобилось сделать программу без циклов и Randomize...

Автор: Acer 22.05.2007 0:24

Спасиб.
А без циклов сложнее и длиннее будет?

Автор: Ozzя 22.05.2007 14:06

Проще:

a[1,1]:=1;
a[1,2]:=0;
...
a[1,n]:=0;
a[2,1]:=0;
...
a[2,1]:=1;
...
И так много раз, в зависимости от размера массива: Кол-во операторов = m*n






Добавлено через 2 мин.
Цитата(volvo @ 21.05.2007 21:02) *

Главное - чтобы потом тебе не понадобилось сделать программу без циклов и Randomize...

lol.gif rolleyes.gif lol.gif

Автор: Sto 22.05.2007 14:16

Цитата(Ozzя @ 22.05.2007 10:06) *

Проще:
a[1,1]:=1;
a[1,2]:=0;
...
a[1,n]:=0;
a[2,1]:=0;
...
a[2,1]:=1;
...
И так много раз, в зависимости от размера массива: Кол-во операторов = m*n
Добавлено через 2 мин.

lol.gif rolleyes.gif lol.gif

m и n задаются Randomize

Автор: Ozzя 22.05.2007 14:21

Sto
Я не об этом. no1.gif
Я об этом -

Цитата
Volvo
Главное - чтобы потом тебе не понадобилось сделать программу без циклов


Цитата
Acer
А без циклов сложнее и длиннее будет?

Автор: Sto 22.05.2007 14:48

Цитата(Ozzя @ 22.05.2007 10:21) *

Sto
Я не об этом. no1.gif
Я об этом -

А, ну тогда да!!!

Автор: Acer 22.05.2007 20:32

Подскажите, что такое mod?
write(((i + j + 1) mod 2):2);
Заранее Спасибо.

Автор: Sto 22.05.2007 20:43

Цитата(Acer @ 22.05.2007 16:32) *

Подскажите, что такое mod?
write(((i + j + 1) mod 2):2);
Заранее Спасибо.

Mod - вычисляет остаток, полученый при выполнении целочисленного деления.
Например:
10 mod 5 = 0; Потому что 10/5 = 2, нет остатка;
11 mod 5 = 1; Потому что 11/5 = 2.2, а ближайшее целое число которое делится на 5 без остатка, это 10 в
результате 11-10=1;
25 mod 10 = 5; Потому что 25/10 = 2.5, а ближайшее целое число которое делится на 10 без остатка, это 20, в
результате 25-20=5;

Автор: Acer 22.05.2007 21:45

Спасибо за объяснение. smile.gif

Автор: Acer 22.05.2007 22:15

Хз...тогда другой вопрос: смысл mod в этой проге?

Автор: compiler 22.05.2007 22:19

Цитата(Acer @ 22.05.2007 18:15) *
Хз...тогда другой вопрос: смысл mod в этой проге?
проверяем на четность число...

Автор: Acer 22.05.2007 22:28

Так у нас единицы и нули.
На четность столбцы и строки проверяют, да?

Автор: Sto 22.05.2007 22:48

Идет вывод 1 и 0

for i := 1 to m do begin

for j := 1 to n do
write(((i + j + 1) mod 2):2);

Например:
i = 1; j = 1
i + j + 1 = 1 + 1 + 1 = 3
3 mod 2 = 1 так как 3/2 = 1,5 тогда ближайшее число которое делится на 2 это 2, 3 - 2 = 1
Выводится 1

i = 1; j = 2
i + j + 1 = 1 + 2 + 1 = 4
4 mod 2 = 0 так как 4/2 = 2 тогда остачи нет
Выводится 0

i = 1; j = 3
i + j + 1 = 1 + 3 + 1 = 5
5 mod 2 = 1 так как 5/2 = 2,5 тогда ближайшее число которое делится на 2 это 4, 5 - 4 = 1
Выводится 1

и так дальше.....

Автор: Acer 22.05.2007 23:03

Потрясающе.
Я бы до такого не додумался.
Спасибо, ребята.
Наконец-то разобрался во всем!