Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Привет всем . Задали дз по информатике (10 класс), нуждаюсь в помощи. Кажется, здесь много программистов, для вас это должно быть легко ^_^

Написать функцию, принимающую три переменных a, b, c типа Boolean, которая возвращает !a, !b, !c в виде массива или каким-нибудь другим способом. Можно использовать не более двух логических отрицаний и неограниченное количество присваиваний, новых переменных типа Boolean, операций and и or. Запрещено использовать все остальное (циклы, if-конструкции, другие логические операции и т. д.).

Можно использовать любой язык программирования.

Спойлер:

Это возможно, инфа 100% 

Буду признателенBlessRNG.png

MaslinuPoimal

Пользователь

Регистрация: 04.09.2017

Сообщения: 9

Рейтинг: 118

MaslinuPoimal

Регистрация: 04.09.2017

Сообщения: 9

Рейтинг: 118

Если ты не можешь в 10 классе сам разобраться с Паскалем, то лучше тебе кодить где-нибудь в кфс, у них там специальные телевизоры такие стоят, к тебе заказчик подоходит, а ты кодишь на нем, там есть переменные типо "Чикен Брикен" или "Пати Баскет", для тебя как раз сойдет этот язык программирования для начала, лет на 20 ближайших.

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

MaslinuPoimal сказал(а):

Если ты не можешь в 10 классе сам разобраться с Паскалем, то лучше тебе кодить где-нибудь в кфс, у них там специальные телевизоры такие стоят, к тебе заказчик подоходит, а ты кодишь на нем, там есть переменные типо "Чикен Брикен" или "Пати Баскет", для тебя как раз сойдет этот язык программирования для начала, лет на 20 ближайших.

Нажмите, чтобы раскрыть...

Спасибо за совет, но лучше бы предложил решение, кстати, задача не привязана к какому-то конкретному языку

Legatus Legionis

Пользователь

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Legatus Legionis

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Как задаются a, b и c? Просто в коде так инициализированы? Ну забей на c, оно все равно от a не отличаетсяroflanLico.png

P.S. Без внятного ТЗ и результат хз.

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Legatus Legionis сказал(а):

Как задаются a, b и c? Просто в коде так инициализированы? Ну забей на c, оно все равно от a не отличаетсяroflanLico.png

Нажмите, чтобы раскрыть...

Там любые могут быть, чтобы не париться с вводом с клавиатуры (в этой теме пока особо не разбирались), так написал.

Legatus Legionis сказал(а):

Просто в коде так инициализированы?

Нажмите, чтобы раскрыть...

Под спойлером как пример взяты

Vadteaz

Пользователь

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

Vadteaz

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

пропиши два каких-либо отрицание, а 3е пропиши черезor



v3lgto

Пользователь

Регистрация: 25.08.2015

Сообщения: 429

Рейтинг: 159

v3lgto

Регистрация: 25.08.2015

Сообщения: 429

Рейтинг: 159

MaslinuPoimal сказал(а):

Если ты не можешь в 10 классе сам разобраться с Паскалем, то лучше тебе кодить где-нибудь в кфс, у них там специальные телевизоры такие стоят, к тебе заказчик подоходит, а ты кодишь на нем, там есть переменные типо "Чикен Брикен" или "Пати Баскет", для тебя как раз сойдет этот язык программирования для начала, лет на 20 ближайших.

Нажмите, чтобы раскрыть...

Заорал на всю хату.

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Vadteaz сказал(а):

3е пропиши черезor

Нажмите, чтобы раскрыть...

Как это, можешь написать, если несложно?

Vadteaz

Пользователь

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

Vadteaz

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= a or c;
ne_b:= not b;
ne_c:= a and c;
end.


мб так?

roamingLoneDruid

Пользователь

Регистрация: 27.07.2015

Сообщения: 8420

Рейтинг: 8931

roamingLoneDruid

Регистрация: 27.07.2015

Сообщения: 8420

Рейтинг: 8931

img

ну так сделай 2 отрицание а в 3 просто укажи что b=c например

Vadteaz

Пользователь

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

Vadteaz

Регистрация: 28.03.2015

Сообщения: 234

Рейтинг: 209

Vadteaz сказал(а):

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= a or c;
ne_b:= not b;
ne_c:= a and c;
end.


мб так?

Нажмите, чтобы раскрыть...

исходил из этого

0=true

1=false

Legatus Legionis

Пользователь

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Legatus Legionis

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Mooneater сказал(а):

Там любые могут быть, чтобы не париться с вводом с клавиатуры (в этой теме пока особо не разбирались), так написал.

Под спойлером как пример взяты

Нажмите, чтобы раскрыть...

Отрицание не выражается через дизъюнкцию и конъюнкцию, иначе бы последние две функции образовывали полную систему булевых функций, а это не так (см. Критерий Поста).Ты чего-то не договариваешь. Ну или препод рофлит над вамиhmmm.png

Mamoru

Пользователь

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mamoru

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mooneater сказал(а):

Привет всем . Задали дз по информатике (10 класс), нуждаюсь в помощи. Кажется, здесь много программистов, для вас это должно быть легко ^_^
Нужно написать процедуру (часть программы), в ней есть три переменные типа Boolean a, b, c, программа должна превратить их в не a, не b и не c. Суть в том, что можно использовать только два отрицания.
Нельзя использовать циклы, условия и подобные вещи (мы их еще не проходили). Можно использовать любое количество новых булевых переменных, операций and и or.

Должно получиться что-то вроде такого, только здесь у меня три отрицания, а должно быть не более двух.

Спойлер:

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= not a;
ne_b:= not b;
ne_c:= not c;
end.

Другими словами, одно отрицание нужно заменить на логическую комбинацию И и ИЛИ (или не одно хз).

Спойлер:

Это возможно, инфа 100% 

Буду признателенBlessRNG.png

Ps. Забыл добавить, что вы можете использовать любой язык программирования (желательно не сложный), если не знаете или не приемлете паскаль, я как-нибудь с гуглом перепишу.

Нажмите, чтобы раскрыть...

Какую именно операцию использовать (and, or, xor) нужно решить исходя из того каких значений твои перменные a и b. Вот таблица(что бы легче разобраться перепиши на листик заменив False на 0, а True на 1). Либо поищи в гугл картинках: таблица истинности в булевой алгебре.

Спойлер: "Таблица"

 


Кстати никого не смущает то что дата реги на форуме у ТСа 2012 год, а он в 10 классе?roflanLico.png

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Vadteaz сказал(а):

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= a or c;
ne_b:= not b;
ne_c:= a and c;
end.


мб так?

Нажмите, чтобы раскрыть...

Ну если все три переменные истины, то получится, a - истина, b - ложь, c - истина (должно быть ложь, ложь, ложь).


Mamoru сказал(а):

Какую именно операцию использовать (and, or, xor)

Нажмите, чтобы раскрыть...

xor нельзя использовать

Legatus Legionis сказал(а):

Отрицание не выражается через дизъюнкцию и конъюнкцию, иначе бы последние две функции образовывали полную систему булевых функций, а это не так (см. Критерий Поста).

Нажмите, чтобы раскрыть...

Ты довольно сложно изъясняешься, но это разве с учетом того, что монжно использовать новые переменные? Мне кажется, нет.

Legatus Legionis сказал(а):

препод

Нажмите, чтобы раскрыть...

*учительница

Legatus Legionis

Пользователь

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Legatus Legionis

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Mooneater сказал(а):

Ты довольно сложно изъясняешься, но это разве с учетом того, что монжно использовать новые переменные? Мне кажется, нет.

*учительница

Нажмите, чтобы раскрыть...

А я уверен, что да. Это основы дискретной математики.

Mamoru

Пользователь

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mamoru

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mooneater сказал(а):

xor нельзя использовать

Нажмите, чтобы раскрыть...

Не проблема, можно обойтись только and и or


Mamoru

Пользователь

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mamoru

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

В таком случае код будет таков:

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= not a;
ne_b:=a or c;(будет True)( ор вернет истинну если хотя бы одна из переменных истинна)
ne_c:= not c;
end.

Master M

Пользователь

Регистрация: 03.02.2016

Сообщения: 1865

Рейтинг: 2340

Master M

Регистрация: 03.02.2016

Сообщения: 1865

Рейтинг: 2340

вы че дискретку приписали в 10 классе...мда,напиши внятно условие, а то ничего не ясно

Legatus Legionis

Пользователь

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Legatus Legionis

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Mamoru сказал(а):

В таком случае код будет таков:

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true;
b:= false;
c:= true;
ne_a:= not a;
ne_b:=a or c;(будет True)( ор вернет истинну если хотя бы одна из переменных истинна)
ne_c:= not c;
end.

Нажмите, чтобы раскрыть...

a, b, c - любые, мы их не знаем заранее. ТС сверху писал.

То есть эта программа очевидно неправильно сработает при a, b и c изначально равных true.

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Mamoru сказал(а):

a:= true;
b:= false;
c:= true;
ne_a:= not a;
ne_b:= not b;
ne_c:= a and b

Нажмите, чтобы раскрыть...

При истинных a, b, c вместо трех ложных переменных будут две ложных и одна истинная.

Mamoru сказал(а):

Какую именно операцию использовать (and, or, xor) нужно решить исходя из того каких значений твои перменные a и b. Вот таблица(что бы легче разобраться перепиши на листик заменив False на 0, а True на 1). Либо поищи в гугл картинках: таблица истинности в булевой алгебре

Нажмите, чтобы раскрыть...

Я уже пять листиков исписал эти формулами, послденяя надежда на вас

Legatus Legionis сказал(а):

А я уверен, что да. Это основы дискретной математики.

Нажмите, чтобы раскрыть...

Смотри, если я сделал ne_a:= not a; то потом могу использовать ne_a. Таким образом, можно сократить число отрицаний (которых может много при полной записи с повторениями) до не более чем двух. Повторюсь, что задача имеет решение.

Mamoru

Пользователь

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mamoru

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Legatus Legionis сказал(а):

a, b, c - любые, мы их не знаем заранее. ТС сверху писал.

Нажмите, чтобы раскрыть...

ну тогда лол тут нужны условия, а их юзать нельзя

Mamoru

Пользователь

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Mamoru

Регистрация: 09.10.2012

Сообщения: 173

Рейтинг: 147

Legatus Legionis сказал(а):

a, b, c - любые, мы их не знаем заранее. ТС сверху писал.

Нажмите, чтобы раскрыть...

ну тогда лол тут нужны условия, а их юзать нельзя

Legatus Legionis

Пользователь

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Legatus Legionis

Регистрация: 28.07.2013

Сообщения: 24535

Рейтинг: 17542

Нарушения: 15

Mooneater сказал(а):

Смотри, если я сделал ne_a:= not a; то потом могу использовать ne_a. Таким образом, можно сократить число отрицаний (которых может много при полной записи с повторениями) до не более чем двух. Повторюсь, что задача имеет решение.

Нажмите, чтобы раскрыть...

Переменные независимы, значит при выражении отрицания, скажем, b, прочие переменные (a, не_a, с, не_с) вообще не нужны.

Тут нет решения, не дезинформируй форумчан, вдруг они реально искатьформулы начнутWutFace.png

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4614

Рейтинг: 8630

Legatus Legionis сказал(а):

Тут нет решения, не дезинформируй форумчан, вдруг они реально искатьформулы начнут

Нажмите, чтобы раскрыть...

Повторюсь, есть решение, отвечаю своей вайфу.

Давали подсказку, что в решении нужны временные булевые переменные

kotyra

Пользователь

Регистрация: 22.09.2013

Сообщения: 2010

Рейтинг: 624

kotyra

Регистрация: 22.09.2013

Сообщения: 2010

Рейтинг: 624

Mooneater сказал(а):

Привет всем . Задали дз по информатике (10 класс), нуждаюсь в помощи. Кажется, здесь много программистов, для вас это должно быть легко ^_^
Нужно написать процедуру (часть программы), в ней есть три переменные типа Boolean a, b, c, программа должна превратить их в не a, не b и не c. Суть в том, что можно использовать только два отрицания.
Нельзя использовать циклы, условия и подобные вещи (мы их еще не проходили). Можно использовать любое количество новых булевых переменных, операций and и or.

Должно получиться что-то вроде такого, только здесь у меня три отрицания, а должно быть не более двух.

Спойлер:

Program z1;
var a, b, c, ne_a, ne_b, ne_c: boolean;
begin
a:= true; // это просто пример
b:= false; // считайте, что a, b, c могут иметь любые значения
c:= true;
ne_a:= not a;
ne_b:= not b;
ne_c:= not c;
end.

Другими словами, одно отрицание нужно заменить на логическую комбинацию И и ИЛИ (или не одно хз).

Спойлер:

Это возможно, инфа 100% 

Буду признателенBlessRNG.png

Ps. Забыл добавить, что вы можете использовать любой язык программирования (желательно не сложный), если не знаете или не приемлете паскаль, я как-нибудь с гуглом перепишу.

Нажмите, чтобы раскрыть...

Без внятного ТЗ сложно чем-то помочь