2014 dxdy logo

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

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




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


18/01/11
78
Задача заключается в следующем:

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

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

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


24/05/09

2054
Используется синтаксис 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 
Аватара пользователя


18/10/08
454
Омск
Можно и честно написать
Код:
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 


18/01/11
78
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 
Аватара пользователя


18/10/08
454
Омск
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 


18/01/11
78
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 
Аватара пользователя


18/10/08
454
Омск
Пишем:

Код:
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 


16/02/10
258
F:=(X>0)xor(Y>0)xor(Z>0)

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


27/01/09
814
Уфа
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 


18/01/11
78
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 
Аватара пользователя


27/01/09
814
Уфа
VPro в сообщении #522228 писал(а):
F:=(X>0)xor(Y>0)xor(Z>0)
1 xor 1 xor 1 = 1.

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


16/02/10
258
Да, ошибся.

 Профиль  
                  
 
 Re: Есть такой логический оператор сравнения --- исключающее или
Сообщение02.01.2012, 16:52 
Аватара пользователя


27/01/09
814
Уфа
VPro в сообщении #522251 писал(а):
Да, ошибся.
Можно дополнительное условие ввести, например if 1 and 1 and 1 then 0.

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


16/02/10
258
Тогда так:
F:=((X>0)and(Y>0)and(Z>0))xor(X>0)xor(Y>0)xor(Z>0);
Это выражение я проверил. Работает.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group