2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 01:01 
Задача заключается в следующем:

if (только одно из чисел X, Y, Z является положительным) then F:=true else F:=false;

где: X, Y, Z:integer; F:boolean;
Как поставить условие одного положительного числа из трёх?
Заранее благодарен за ответ.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 08:12 
Используется синтаксис Pascal
A = 0

if(X > 0) A = A + 1
if(Y > 0) A = A + 1
if(Z > 0) A = A + 1

if(A = 1) ... ваши действия ...
 

Идея я думаю понятна, синтаксис под паскалевский исправите сами.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 09:36 
Аватара пользователя
Можно и честно написать
Код:
if ((X > 0) and (Y <= 0) and (Z <= 0)) or ((X <= 0) and (Y > 0) and (Z <= 0)) or ((X <= 0) and (Y <= 0) and (Z > 0)) then...

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 13:54 
mkot в сообщении #522146 писал(а):
Можно и честно написать
Код:
if ((X > 0) and (Y <= 0) and (Z <= 0)) or ((X <= 0) and (Y > 0) and (Z <= 0)) or ((X <= 0) and (Y <= 0) and (Z > 0)) then...

Я тоже так делал, но данное условие выдаёт значение TRUE, если присутствует ХОТЯ БЫ один положительный элемент, а не ТОЛЬКО один положительный элемент.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 14:13 
Аватара пользователя
acme в сообщении #522185 писал(а):
mkot в сообщении #522146 писал(а):
Можно и честно написать
Код:
if ((X > 0) and (Y <= 0) and (Z <= 0)) or ((X <= 0) and (Y > 0) and (Z <= 0)) or ((X <= 0) and (Y <= 0) and (Z > 0)) then...

Я тоже так делал, но данное условие выдаёт значение TRUE, если присутствует ХОТЯ БЫ один положительный элемент, а не ТОЛЬКО один положительный элемент.


Такого быть не может. Условие явно описывает, что только один положительный элемент должен быть.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 15:42 
mkot в сообщении #522190 писал(а):
acme в сообщении #522185 писал(а):
mkot в сообщении #522146 писал(а):
Можно и честно написать
Код:
if ((X > 0) and (Y <= 0) and (Z <= 0)) or ((X <= 0) and (Y > 0) and (Z <= 0)) or ((X <= 0) and (Y <= 0) and (Z > 0)) then...

Я тоже так делал, но данное условие выдаёт значение TRUE, если присутствует ХОТЯ БЫ один положительный элемент, а не ТОЛЬКО один положительный элемент.


Такого быть не может. Условие явно описывает, что только один положительный элемент должен быть.

Если проверить в программе, то ЯВНО МОЖЕТ.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 16:04 
Аватара пользователя
Пишем:

Код:
function Test(X, Y, Z: Integer): Boolean;
begin
        Test := ((X > 0) and (Y <= 0) and (Z <= 0))
                or ((X <= 0) and (Y > 0) and (Z <= 0))
                or ((X <= 0) and (Y <= 0) and (Z > 0))
end;

begin
        WriteLn(' 1,  1,  1 --> ', Test( 1,  1,  1));
        WriteLn('-1,  1,  1 --> ', Test(-1,  1,  1));
        WriteLn(' 1, -1,  1 --> ', Test( 1, -1,  1));
        WriteLn('-1, -1,  1 --> ', Test(-1, -1,  1));
        WriteLn(' 1,  1, -1 --> ', Test( 1,  1, -1));
        WriteLn('-1,  1, -1 --> ', Test(-1,  1, -1));
        WriteLn(' 1, -1, -1 --> ', Test( 1, -1, -1));
        WriteLn('-1, -1, -1 --> ', Test(-1, -1, -1))
end.


и получаем:

Код:
1,  1,  1 --> FALSE
-1,  1,  1 --> FALSE
1, -1,  1 --> FALSE
-1, -1,  1 --> TRUE
1,  1, -1 --> FALSE
-1,  1, -1 --> TRUE
1, -1, -1 --> TRUE
-1, -1, -1 --> FALSE


Что не так?

 
 
 
 Есть такой логический оператор сравнения --- исключающее или
Сообщение02.01.2012, 16:06 
F:=(X>0)xor(Y>0)xor(Z>0)

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 16:10 
Аватара пользователя
acme в сообщении #522215 писал(а):
Если проверить в программе, то ЯВНО МОЖЕТ.
Проверте, всё работает (здесь true если положительно, без определения знака нуля), значит вы не так сделали.
Код:
var x,y,z,r:boolean;
function test(x,y,z:boolean):boolean;
begin
if (x and not y and not z) or
    (not x and y and not z) or
    (not x and not y and z)
then test:=true else test:=false;
end;
begin
for x:=false to true do
for y:=false to true do
for z:=false to true do
begin
  r:=test(x,y,z);
  writeln;
  writeln(x,#9,y,#9,z,#9,r);
end;
end.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 16:12 
mkot в сообщении #522226 писал(а):
Пишем:

Код:
function Test(X, Y, Z: Integer): Boolean;
begin
        Test := ((X > 0) and (Y <= 0) and (Z <= 0))
                or ((X <= 0) and (Y > 0) and (Z <= 0))
                or ((X <= 0) and (Y <= 0) and (Z > 0))
end;

begin
        WriteLn(' 1,  1,  1 --> ', Test( 1,  1,  1));
        WriteLn('-1,  1,  1 --> ', Test(-1,  1,  1));
        WriteLn(' 1, -1,  1 --> ', Test( 1, -1,  1));
        WriteLn('-1, -1,  1 --> ', Test(-1, -1,  1));
        WriteLn(' 1,  1, -1 --> ', Test( 1,  1, -1));
        WriteLn('-1,  1, -1 --> ', Test(-1,  1, -1));
        WriteLn(' 1, -1, -1 --> ', Test( 1, -1, -1));
        WriteLn('-1, -1, -1 --> ', Test(-1, -1, -1))
end.


и получаем:

Код:
1,  1,  1 --> FALSE
-1,  1,  1 --> FALSE
1, -1,  1 --> FALSE
-1, -1,  1 --> TRUE
1,  1, -1 --> FALSE
-1,  1, -1 --> TRUE
1, -1, -1 --> TRUE
-1, -1, -1 --> FALSE


Что не так?


[QUOTE=WebMax 2.0;2349211]kandagar,[/QUOTE]

Прошу прощения, просто моя версия TurboPascal, видимо, с ошибками.

 
 
 
 Re: Есть такой логический оператор сравнения --- исключающее или
Сообщение02.01.2012, 16:39 
Аватара пользователя
VPro в сообщении #522228 писал(а):
F:=(X>0)xor(Y>0)xor(Z>0)
1 xor 1 xor 1 = 1.

 
 
 
 Re: Есть такой логический оператор сравнения --- исключающее или
Сообщение02.01.2012, 16:43 
Да, ошибся.

 
 
 
 Re: Есть такой логический оператор сравнения --- исключающее или
Сообщение02.01.2012, 16:52 
Аватара пользователя
VPro в сообщении #522251 писал(а):
Да, ошибся.
Можно дополнительное условие ввести, например if 1 and 1 and 1 then 0.

 
 
 
 Re: Алгоритм условия для программы на Turbo Pascal
Сообщение02.01.2012, 17:06 
Тогда так:
F:=((X>0)and(Y>0)and(Z>0))xor(X>0)xor(Y>0)xor(Z>0);
Это выражение я проверил. Работает.

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group