Буду очень благодарен, если вы хоть как-то мне поможете с написанием данной программы:
задача:"Шахматная Доска"
Целочисленный массив K размером m x n заполнить
нулями и
единицами, расположив их в шахматном порядке.
(смысл: при запуске проги в окне должны появиться строчки с чередованием единиц и нулей
1010101001010101
и т.д.
причем, количество строк и столбцов все время меняется и ограничено десятью).
Заранее всем благодарен!
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 := 1to n dobegin
start := byte(odd(i));
for j := 1to n dobegin
write(start:2); start := 1 - start;
end;
writeln;
end;
end.
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 := 1to m dobegin
start := byte(odd(i));
for j := 1to n dobegin
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 := 1to m dobeginfor j := 1to n do
write(((i + j + 1) mod2):2);
writeln;
end;
end.
Главное - чтобы потом тебе не понадобилось сделать программу без циклов и Randomize...
И так много раз, в зависимости от размера массива: Кол-во операторов = m*n Добавлено через 2 мин.
m и n задаются Randomize
Ozzя
22.05.2007 14:21
Sto Я не об этом. Я об этом -
Цитата
Volvo Главное - чтобы потом тебе не понадобилось сделать программу без циклов
Цитата
Acer А без циклов сложнее и длиннее будет?
Sto
22.05.2007 14:48
Цитата(Ozzя @ 22.05.2007 10:21)
Sto Я не об этом. Я об этом -
А, ну тогда да!!!
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
Спасибо за объяснение.
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 := 1to m dobeginfor j := 1to n do
write(((i + j + 1) mod2):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
Потрясающе. Я бы до такого не додумался. Спасибо, ребята. Наконец-то разобрался во всем!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.