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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2008, 11:36   #1
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию Геометрическая задача С++

Верно ли, что точки пересечения параболы y=ax^2 и прямой px+qy+2=0 лежат в квадрате со сторонами паралельными осям координат, с центром (0;0) и длинной равной 26?
хелп...=(

Как задать параболу? оси координат?
bloo[d] вне форума Ответить с цитированием
Старый 27.01.2008, 12:13   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

С чего вы взяли, что это геометрическая задача? По-моему элементарная алгебра. Решаете ситему приведенных выше уравнений, получаете координаты точек пересечения(если они есть), Проверяете, входят ли данные координаты в итервал [-13,13] по обеим осям.
puporev вне форума Ответить с цитированием
Старый 29.01.2008, 21:37   #3
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию

аглгебраическая) понял уже...а теперь вот не могу понять в чем ошибка...
Цитата:
#include <iostream.h>
#include <conio.h>
main()
{
double r,t;
float q,w,e;
cout<<"Vvedite 1 element ";
cin>>q;
cout<<"Vvedite 2 element ";
cin>>w;
cout<<"Vvedite 3 element ";
cin>>e;
for ( float x=-13;x<13;x=x+0,1)
r=-(w*x+2)/e*q*x*x;

for (float y=-13;y<13;y=y+0,1);
t=q*((e*y+2)/w)*((e*y+2)/w)/y;
if(t == 0 && r == 0)
cout<<"Perese4enie v kvadrate" ;
else
cout<<"perese4eni9 net ili za ramkami kvadrata "<<endl;
getch();
return 0;
}
bloo[d] вне форума Ответить с цитированием
Старый 29.01.2008, 22:27   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
аглгебраическая) понял уже
Видимо не до конца, потому что в тексте программы нет правильного алгебраического решения, а оно не очень быстрое. Кроме того, чтобы можно было понять, что ты написал, надо вводить переменные те же, что и в задании: a,p,q. Если прямая и парабола пересекаются, то a*x^2=-(p*x+2)/q;или q*a*x^2+p*x+2=0. Решаем это квадратное уравнение.
1.Если D(дискриминант)<0, то прямая и парабола не пересекаются.
2.Если D=0, прямая касается параболы. x=-p/(2*a*q); y=p^2/(3*a^2*q^2). Определяешь, входит ли данная точка в заданный прямоугольник.
3.Усли D>0, есть две точки пересечения. Решаешь уравнение, находишь х1 и х2, потом у1 и у2, определяешь, входят ли данные точки в заданный прямоугольник.
puporev вне форума Ответить с цитированием
Старый 30.01.2008, 00:37   #5
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию

2 puporev
вот оно горе-творение)) но куча ошибок...
Цитата:
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
double x,y,x1,x2,y1,y2;
float a,p,q;
cout<<"Vvedite a:";
cin>>a;
cout<<"Vvedite p:";
cin>>p;
cout<<"Vvedite q:";
cin>>q;
//q*a*(x*x)+p*x+2=0 условие пересечения, найдем дискриминант D
{
double D;
D=(p*(x*x)-4*(q*a*(x*x))*2);
if D<0
cout<<"ne peresekaytsya";
{
if D=0 //прямая касается параболы
x=-p/(2*a*q); //находим координаты точки
y=(p*p)/3*(a*a)*(q*q); //находим координаты точки
if (х>=-13 && x<=13 && y<=13 && y>=-13)
cout<<"pr9ma9 kasaets9 paraboli"<<endl;
{
if D>0 //есть две точки пересечения, находим их
x1=-p+sqrt(D)/2*q*a;
x2=-p-sqrt(D)/2*q*a;
y1=a*(x1*x1);
y2=a*(x2*x2);
{
if (х1>=-13 && x2<=13 && y1<=13 && y2>=-13)
}
cout<<"Perese4enie v kvadrate"<<endl;
}
}
}
return 0;
}
bloo[d] вне форума Ответить с цитированием
Старый 30.01.2008, 01:00   #6
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию

ааа блин...тупо считать D=(p*(x*x)-4*(q*a*(x*x))*2);, если значение х неизвестно =((((((((
bloo[d] вне форума Ответить с цитированием
Старый 30.01.2008, 07:19   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если вы даже не знаете, как считается дискриминант, то вам уже никто не поможет. Учите алгебру.
puporev вне форума Ответить с цитированием
Старый 30.01.2008, 10:36   #8
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию

Цитата:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double x,y,D;
float a,p,q;
cout<<"Vvedite a:";
cin>>a;
cout<<"Vvedite p:";
cin>>p;
cout<<"Vvedite q:";
cin>>q;
D=(p*p)-(4*(q*a)*2);
cout<<"D: "<<D<<endl;
{
if (D<0) //не пересекаются
cout<<"ne peresekaytsya"<<endl;
}
{
if (D==0) //прямая касается параболы, находим одну точку
x=-p/2*a*q;
y=p*p/3*(a*a)*(q*q);
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
{
if (x>=-13 && x<=13 && y<=13 && y>=-13)
cout<<"to4ka v kvadrate";
else cout<<"ne v kvadrate";
}
{
double x1,x2,y1,y2;
if (D>0) //есть две точки пересечения
x1=-p+sqrt(D)/2*q*a;
x2=-p-sqrt(D)/2*q*a;
y1=a*(x1*x1);
y2=a*(x2*x2);
cout<<"(x1;y1)"<<x1<<y1<<'/n';
cout<<"(x2;y2)"<<x2<<y2<<'/n';
{
if (x1 >= -13 && x2 <= 13 && y1<=13 && y2>=-13)
cout<<"Perese4enie v kvadrate"<<endl;
}
}
return 0;
}
переделал...помогите исправить пожалуйста
bloo[d] вне форума Ответить с цитированием
Старый 30.01.2008, 12:04   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
y=p*p/3*(a*a)*(q*q);
не правильно нужно y=p*p/(4*a*q*q);
Цитата:
if (x1 >= -13 && x2 <= 13 && y1<=13 && y2>=-13)
cout<<"Perese4enie v kvadrate"<<endl;
Я на Си писать не умею, поэтому объясню словами. Нужно написать
если x1>=-13 + x1<=13 + x2>=-13 + x2<=13 + y1>=-13 + y1<=13 + y2>=-13 + y2<=13, т.е. описать обе координаты обоих пересечений, всего 8 условий, а не 4, как у тебя. Все остальное вроде правильно.
puporev вне форума Ответить с цитированием
Старый 30.01.2008, 18:27   #10
bloo[d]
Пользователь
 
Регистрация: 22.11.2007
Сообщений: 11
По умолчанию

все, спасибо огромное, в универе сам доделал с пересечениями...и надо было после каждого условия return 0; сделать.
bloo[d] вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Vitas1234 Паскаль, Turbo Pascal, PascalABC.NET 5 07.07.2008 12:10
Задача по ТП. GE076 Помощь студентам 11 07.12.2007 19:29
задача, SOS Exo Microsoft Office Excel 2 25.09.2007 14:04