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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 14:14   #1
Liza Dalbek
 
Регистрация: 22.12.2010
Сообщений: 9
Радость Геометрическая задача

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

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <clocale>
#include <conio.h>
using namespace std;

class Priamoug
{
public:

double *X;
double *Y;

void Vvod(char x)
{
switch(x)
{
case 'y':
{

int i=0;
cout<<"Введите Х["<<++i<<"]: ";
cin>>X[0];
cout<<"Введите Y["<<i<<"]: ";
cin>>Y[0];
cout<<"Введите Х["<<++i<<"]: "<<X[0]<<"\n";
X[1]=X[0];
do{
cout<<"Введите Y["<<i<<"]: ";
cin>>Y[1];
}while(Y[1]<=Y[0]);
do{
cout<<"Введите Х["<<++i<<"]: ";
cin>>X[2];
}while(X[2]<=X[1]);
cout<<"Введите Y["<<i<<"]: "<<Y[1]<<"\n";
Y[2]=Y[1];
cout<<"Введите Х["<<++i<<"]: "<<X[2]<<"\n";
X[3]=X[2];
cout<<"Введите Y["<<i<<"]: "<<Y[0]<<"\n";
Y[3]=Y[0];
}
break;

case 'n':
{

int k,l;
cout<<"Введите пределы: \n";
cout<<"От: ";
cin>>k;
cout<<"До: ";
cin>>l;
X[0]=k+rand()%l;
Y[0]=k+rand()%l;
X[1]=X[0];
do{
Y[1]=k+rand()%l;
}while(Y[1]<=Y[0]);
do{
X[2]=k+rand()%l;
}while(X[2]<=X[1]);
Y[2]=Y[1];
X[3]=X[2];
Y[3]=Y[0];
}
break;
}
}
void vivod()
{

for(int i=0; i<4;++i){
cout<<"(X["<<i+1<<"],Y["<<i+1<<"])=("<<X[i]<<","<<Y[i]<<")\n";
}
}
double S()
{
double a;
if(X[3]<X[0]) a=X[0]-X[3];
else a=X[3]-X[0];

return a*(Y[1]-Y[0]);
}

};

int main()
{
setlocale(LC_ALL, "Russian");
Priamoug A,B;
char x;
A.X=new double[4];
A.Y=new double[4];
B.X=new double[4];
B.Y=new double[4];

do{
cout<<"Будете вводить элементы?\n";
cout<<"Ответ: ";
cin>>x;
}while((x!='y')&&(x!='n'));

cout<<"Прямоугольник А:\n";
A.Vvod(x);
cout<<"\nПрямоуголник В: \n";
B.Vvod(x);
cout<<"\nВывод А:\n";
A.vivod();
cout<<"\nВывод B:\n";
B.vivod();
cout<<"\nПлощадь А: "<<A.S()<<"\n";
cout<<"Площадь B: "<<B.S()<<"\n";

double sum=A.S()+B.S(), storona=pow(sum,0.5);
cout<<"\nОбщая площадь, занимаемая этими прямоугольниками: \n";
cout<<"Площадь: "<<sum;
cout<<"\nКоординаты: ";
cout<<"\n(X["<<1<<"],Y["<<1<<"])=("<<0<<","<<0<<")\n";
cout<<"(X["<<2<<"],Y["<<2<<"])=("<<0<<","<<storona<<")\n";
cout<<"(X["<<3<<"],Y["<<3<<"])=("<<storona<<","<<storona<<")\n" ;
cout<<"(X["<<4<<"],Y["<<4<<"])=("<<storona<<","<<0<<")\n";
getch();
return 0;
}

Проблема : выводит не те координаты.
есть соображения на тему того , что общую площадь пересечения нужно отнять от суммы площадей этих прямоугольников.
ПОМОГИТЕ ПОЖАЛУЙСТА!
Liza Dalbek вне форума Ответить с цитированием
Старый 22.12.2010, 16:57   #2
Liza Dalbek
 
Регистрация: 22.12.2010
Сообщений: 9
По умолчанию

Liza Dalbek вне форума Ответить с цитированием
Старый 22.12.2010, 19:48   #3
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Вы запутаетесь (вернее - уже запутались) в структурах, в С-шной индексации с нуля, на которых ещё сверху - развесистая логика. Решите сперва задачу для одной оси. Возьмите карандашик и нарисуйте два отрезочка, параллельных оси OX (5 раз, для пяти комбинаций их взаимного положения). А теперь - запрограммируйте все эти пять возможных случаев (безо всяких структур), для двух пар упорядоченных переменных x1Min, x1Max (первый отрезок), x2Min, x2Max (второй). А потом распространите это решение на плоскость. А потом уже - оформляйте структуры, класы etc, etc, ежели нравится. Ну а в самом конце - рисуйте...

Последний раз редактировалось Vago; 22.12.2010 в 19:56.
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ГЕОМЕТРИЧЕСКАЯ ЗАДАЧА С++ kochet-kov Помощь студентам 8 22.12.2010 18:39
Геометрическая задача в VS2010 С++ FEAREX Помощь студентам 7 17.12.2010 09:53
Геометрическая задача HackNick Общие вопросы C/C++ 5 02.09.2010 20:49
Олимиадная геометрическая задача по программированию zmiter Помощь студентам 3 04.06.2009 13:44
Геометрическая задача С++ bloo[d] Общие вопросы C/C++ 9 30.01.2008 18:27