Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2006, 16:00   #1
n0x
 
Регистрация: 27.11.2006
Сообщений: 5
По умолчанию помогите разобраться с задачкой

Помогите плиз разобраться с задачкой:
Даны целые a1, b1, c1, a2, b2, c2, отличные от нуля. Определить, существуют ли какие-нибудь вещественные x, y , для которых:

a1*x + b1*y + c1 >= 0
a1*x + b2*y + c2 >= 0

Как я понимаю,это два уравнения прямой. Но на большее меня не хватает
n0x вне форума Ответить с цитированием
Старый 27.11.2006, 16:24   #2
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Цитата:
Определить, существуют ли какие-нибудь вещественные x, y...
Вещественные значения - это переменные типа real. B и у этой задачи в любом случае будет решение. Уточни вопрос.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 27.11.2006, 16:36   #3
n0x
 
Регистрация: 27.11.2006
Сообщений: 5
По умолчанию

а уточнения нет. как я понял, нужно написать о том что есть, и вычислить любые X и Y, которые удолетворяют этому неравенству
n0x вне форума Ответить с цитированием
Старый 27.11.2006, 17:33   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Вот готовое решение. Реализовано через real, но по сути ответ будет в integer так как random возвращает целое число.

Код:
var a,b,c,i,x,y:real;
begin
Writeln('Формула: A*X+B*Y+C >= 0');
Writeln('Введите значения A B C');
readln(a, b, c);
i:=0;
while i<1 do
 begin
 randomize;
 x:=random(198);
 x:=x-99;
 y:=random(198);
 y:=y-99;
 if a*x+b*y+c>=0 then
  begin
  Writeln('X=',x:4:2,' Y=',Y:4:2);
  i:=1;
  end;
 end;
readln;
end.
Подбор ответа выпоняется в промедутке, задаваемом строками:

x:=random(198);
x:=x-99;
y:=random(198);
y:=y-99;


В данном случае это промежуток от -99 до 99.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 27.11.2006 в 17:48.
AVer вне форума Ответить с цитированием
Старый 27.11.2006, 18:49   #5
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

AVer, ты немного не понял задачу.... Даны целые числа a1, b1, c1, a2, b2, c2, отличные от нуля.
И здесь система линейных неравенств!
a1*x + b1*y + c1 >= 0
a2*x + b2*y + c2 >= 0 // В этой строке была ошибка

Нужно запрашивать шесть чисел, а не три.
Код:
var
z,z2: smallint;
Buf1, Buf2, a1, a2, b1, b2, c1, c2: integer;
x,y: real;
begin
Writeln('Формула: A1*X+B1*Y+C1 >= 0');
Writeln('Введите значения A1 B1 C1');
readln(a1, b1, c1);
Writeln('Формула: A2*X+B2*Y+C2 >= 0');
Writeln('Введите значения A2 B2 C2');
readln(a2, b2, c2);
Далее идет один из способов решения системы линейных неравенств. Я выбрал способ суммирования:
Код:
z:=-1;
// процедура вычисления наименьшего общего кратного
if a1<0 then begin z:=1; Buf1:=a1*(-1) end else Buf:=a1;
if a2<0 then begin z:=z*(-1); Buf2:=a2*(-1) end else Buf2:=a2;
while Buf1<>Buf2 do
      if Buf1>Buf2 then Buf1:=Buf1-Buf2 else Buf1:=Buf2-Buf1;
Buf1:=(a1 div Buf1)*(a2 div Buf1)*Buf1;
// И все остальное...
if a2<0 then z2:=-1; if b1<0 then z2:=1;
B1:=Buf1*B1; C1:=Buf1*C1;
B2:=Buf1*B2*z; C2:=Buf1*C2*z;
 
y:=(-C1-C2)/(B1+B2);
x:=(-B1*y-C1)/A1;
Write('Значения функций верны при X ');
if a1>0 then write('>= ') else write('<= ');
writeln(x:4:2);
Write('и Y ')
if z2=1 then write('>= ') else write('<= ');
writeln(y:4:2);
Лично пример не проверял, но должен работать. Еще можешь приписать защиту от ввода ноля и других ненужных символов.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 27.11.2006, 19:08   #6
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Сорри. Я правда не понял. Тока в листинге 2 ошибки: Write('и Y '); и if a1<0 then begin z:=1; Buf1:=a1*(-1) end else Buf1:=a1;
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 27.11.2006, 19:23   #7
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

ну это уже мелочи - с ними можно в процессе прогонки разобраться, но спасибо за исправление.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 28.11.2006, 01:21   #8
n0x
 
Регистрация: 27.11.2006
Сообщений: 5
По умолчанию

огромное спасибо. теперь я разобрался с задачкой =)
n0x вне форума Ответить с цитированием
Старый 28.11.2006, 13:18   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

мне кажется, методом гауса было бы проще. но этот - тоже вариант.
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачкой по СИ pliz Общие вопросы C/C++ 7 10.12.2007 20:08
Помогите с задачкой Saniok Помощь студентам 4 29.09.2007 20:34
помогите с задачкой.. plz Diller Помощь студентам 3 28.09.2007 20:03
ПОМОГИТЕ С ЗАДАЧКОЙ!!!! Solny6ko YasnoE Помощь студентам 6 22.06.2007 09:09
Помогите с задачкой Sour Помощь студентам 9 08.05.2007 20:56