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

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

Форум «Всё о Паскале» _ Задачи _ задачка на лампочки, имеющих два состояния

Автор: metallic 23.11.2008 3:06

Имеется n>= ламп. расположенных в ряд, каждая из которых может быть в одном или двух состояний -"вкл" или "выкл". Каждую секунду лампы одновременно меняют своё состояние по правилам если лампа и ее соседи (для первой и последней лампы - один сосед, для остальных - два) находятся в одинаковом состоянии, то она принимает состояние "выкл", иначе она принимает состояние "вкл''. В начальном положении все лампы находятся в состоянии "выкл", кроме самой левой лампы, имеющей состояние ''вкл'' . Экспериментально найдите ( не менее 5), для каких n все все лампы будут в состоянии '' выкл''.

Автор: Lapp 23.11.2008 9:59

М
Просьба привести название темы в соответствие с Правилами Форума (ссылка вверху страницы), п.4. В противном случае тема будет закрыта.


Автор: Lapp 23.11.2008 11:11

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

Решение есть. Готов обсуждать его после исправления названия темы..

Автор: Lapp 23.11.2008 18:57

Спасибо за название.

Как я уже сказал, если тебе интересно решение - давай пообсуждаем.
У тебя по поводу него какие мысли/заделы есть?

Автор: metallic 23.11.2008 19:24

Я решил ее , вот только не знаю правильно ли:

Program A1;
var i,k,n:integer;
BEGIN
writeln ('vvedite koli4estvo eksperimentov');
readln(k);
k:=k+1;
n:=0;
for i:=2 to k do
begin
if i mod 3=0 then
begin
n:=1;
writeln ('pri n=',n,' vse lampo4ki pogasnyt');
end;
end;
writeln ('pri n=2 vse lampo4ki pogasnyt');
readln;
END.

Автор: Lapp 23.11.2008 19:29

Цитата(metallic @ 23.11.2008 15:24) *
Я решил ее , вот только не знаю правильно ли:

Что-то я совсем не врубаюсь.. Поясни, при чем тут остаток по модулю 3?

Автор: metallic 23.11.2008 20:52

Все догадался)), вроде так:

Program Lamp;
var i,k:integer;
n:real;
BEGIN
writeln ('vvedite kol-vo opitov');
readln (k);
n:=2;
writeln ('vse lampi pogasnyt pri n=2');
for i:= 1 to k do
begin
n:=n+exp(i*ln(2));
writeln ('vse lampi pogasnyt pri n=',n);
end;
readln
END.

Автор: Lapp 23.11.2008 21:03

Что-то я вообще ничего не понимаю.. blink.gif Ты же просто считаешь степени двойки:

Цитата(metallic @ 23.11.2008 16:52) *

n:=n+exp(i*ln(2));
- да и все! Но ПОЧЕМУ? Как ты это вывел? Ты что ли основываешься на моем посте? Так это я тебе уже результат сказал. А ты просто делаешь прогу, чтоб она выводила то, что надо - и неважно, что внутри? так, что ли?
Ведь нужно-то ПРОВОДИТЬ эксперименты. Так? Или я чего-то не понимаю?
Отвечай поскорее, я собираюсь спать. Если нужен код - дам.

Автор: Lapp 23.11.2008 21:42

Ладно, бери код и разбирайся в нем.
Успехов!

const
m=26; // максимальное число ламп

var
n: integer;
L,L1: array [1..m] of boolean;

function On: boolean;
var
i: integer;
b: boolean;
begin
b:=false;
for i:=1 to n do begin
b:=b or L[i];
if b then Break
end;
On:=b
end;

procedure Show;
var
i: integer;
begin
for i:=1 to n do if L[i] then Write('0') else Write('-');
ReadLn
end;


var
i: integer;
j: LongInt;

begin
for n:=2 to m do begin
Write('Trying n=',n,' .. ');
L[1]:=true;
for i:=2 to n do L[i]:=false;
j:=0;
while On and(j<1 shl n) do begin
for i:=1 to n do
L1[i]:=(i>1)and(L[i] xor L[i-1])or(i<n)and(L[i] xor L[i+1]);
L:=L1;
Inc(j);
// Show;
end;
if On then WriteLn('Some On') else WriteLn('All Off');
end
end.

Если найдутся ошибки - не обессудь..
На вопросы, я думаю, тебе тут ответят. А я - спать..

Автор: metallic 24.11.2008 3:06

спасибо большое smile.gif

Автор: volvo 24.11.2008 17:22

Цитата
Если найдутся ошибки - не обессудь..
Найдутся, найдутся smile.gif Причем трудноуловимые для новичка: если эту программу откомпилировать 16-битным компилятором и запустить, то получим не совсем то, чего ожидаем:
Цитата
Trying n=2 .. All Off
Trying n=3 .. Some On
Trying n=4 .. All Off
Trying n=5 .. Some On
Trying n=6 .. Some On
Trying n=7 .. Some On
Trying n=8 .. All Off
Trying n=9 .. Some On
Trying n=10 .. Some On
Trying n=11 .. Some On
Trying n=12 .. Some On
Trying n=13 .. Some On
Trying n=14 .. Some On
Trying n=15 .. Some On
Trying n=16 .. Some On
Trying n=17 .. Some On
Trying n=18 .. Some On
Trying n=19 .. Some On
Trying n=20 .. Some On
Trying n=21 .. Some On
Trying n=22 .. Some On
Trying n=23 .. Some On
Trying n=24 .. Some On
Trying n=25 .. Some On
Trying n=26 .. Some On
, потому как Integer-а не хватает для произведения операции 1 shl 16, надо сделать N "длинным целым" (LongInt)

Автор: Lapp 24.11.2008 17:46

Цитата(volvo @ 24.11.2008 13:22) *
Integer-а не хватает для произведения операции 1 shl 16, надо сделать N "длинным целым" (LongInt)

.. что, я, ессно, и сделал... но отправил, видимо, старую версию..
Спасибо, volvo

Автор: proscar order best on line pharm 28.08.2021 8:04

Diamox Buy No Prescription

Автор: where can i buy plaquenil withou 5.12.2021 9:32

Ibuprofen Amoxicillin