Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
#1

Вписанные прямоугольники - C++

11.09.2011, 09:52. Просмотров 1103. Ответов 6
Метки нет (Все метки)

Даны 2 прямоугольника. Определить можно ли вписать один в другой.
Пример 1 10 вписать в 9 9 возможно.

Делал так: надо их диагонали найти, и точка пересечения одного должна совпадать со второй, но что-то не получается, мб исключения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 09:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вписанные прямоугольники (C++):

Равновеликие прямоугольники - C++
Привет ребята ) нужна помощь с заданием по с++ Найти все равновеликие прямоугольники, стороны которых выражены целыми числами a и b, а...

Задача на прямоугольники С++ - C++
Нужно создать класс Прямоугольник со стороной на оси ОХ. Нужно перегрузить бинарные операторы: пересечения прямоугольников(*),...

Раскрасить прямоугольники исходя из условия - C++
double x=2.5;//отступ от границы int y=20; const double a=x; RECT r;//массив прямоугольников int k=0; for(int...

Найти все прямоугольники заданной площади - C++
Найти все прямоугольники заданной площади.Считать, что длины сторон прямоугольников и площадь выражаются натуральными числами.

Составить программу, определяющую, пересекаются ли данные прямоугольники, - C++
Всем привет ,подскажите пожалуйста с задачками: 1)Эту задачу надо перевести в С++, ниже написано ее условие если нужно uses crt; ...

Разбить окно на случайного размера прямоугольники разных цветов - C++
Здравствуйте! Необходимо разбить окно на случайного размера прямоугольники разных цветов. Примерно так, как на картинке. Я собираюсь делать...

6
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
11.09.2011, 09:55 #2
Стороны первого попарно меньше либо равны сторонам второго - первый можно вписать во второй.
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
11.09.2011, 10:46  [ТС] #3
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
 int a,b,c,d;
 cin >> a >> b >> c >> d;
 cout << ( ((a*a+b*b)<=(c*c+d*d)) ? "Possible" : "Impossible" ) << endl;
 return 0;
}

Nameless One, не совсем верно, можно под углом же делать, надо ещё же диагонали сравнивать

Добавлено через 6 минут
Кроме диагоналей что-то ещё надо сравнивать, стороны не пойму как, они больше могут быть, соотношения нужны

Добавлено через 32 минуты
Попробовал так! 2 теста не проходит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
 double a,b,c,d,tp;
 cin >> a >> b >> c >> d;
 if (a>b) { tp=a; a=b; b=tp; }
 if (c>d) { tp=c; c=d; d=tp; }
 if (a<=c && b<=d) { cout << "Possible" << endl; return 0; }
 if (a>c && b>d) { cout << "Impossible" << endl; return 0; }
 if (c*c+d*d>=a*a+b*b+2*a*b) { cout << "Possible" << endl; return 0; }
 cout << "Impossible" << endl;
 return 0;
}
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 10:47 #4
AvengerAlive, эта ?
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.09.2011, 12:54 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <algorithm>
#include <cmath>
#include <limits>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
bool  rectangle_ab_can_be_inscribed_in_rectangle_AB
    (
        double  a,
        double  b,
        double  A,
        double  B
    )
{
    if(a > b)
    {
        std::swap(a, b);
    }
 
    if(A > B)
    {
        std::swap(A, B);
    }
 
    if(a <= A && b <= B)
    {
        return true;
    }
 
    double  a_b_diag_sqr  = a * a + b * b;
    double  sin_alpha     = ( a * A + b * sqrt(a_b_diag_sqr - A * A) ) / a_b_diag_sqr;
    double  cos_alpha     = sqrt(1 - sin_alpha * sin_alpha); 
    double  val           = b * sin_alpha + a * cos_alpha;
    
    return  val < B * ( 1 + std::numeric_limits<double>::epsilon() );          
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
 
    std::cout << "Введите стороны письма:"
              << std::endl
              << "a = ";
 
    double  a = 0;
    std::cin >> a;
    
    std::cout << "b = ";
    int  b = 0; 
    std::cin >> b;
 
    std::cout << std::endl
              << "Введите стороны конверта:"
              << std::endl
              << "A = ";
 
    double  A = 0;
    std::cin >> A;
    
    std::cout << "B = ";
    int  B = 0; 
    std::cin >> B;
 
    std::cout << "Письмо "
              << (rectangle_ab_can_be_inscribed_in_rectangle_AB(a, b, A, B) ? "можно" : "нельзя")
              << " вложить в конверт."
              << std::endl;
}
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.09.2011, 21:23 #6
AvengerAlive, очень рекомендую скачать книгу Федора Меньшикова "Олимпиадные задачи по программированию". В этой книге есть задача 3D и разбор к ней, а также много других задач с разборами (лучше чем там описано никто Вам про эти задачи не объяснит, ну или почти никто...)
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
12.09.2011, 21:51  [ТС] #7
Dani, ага
0
12.09.2011, 21:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 21:51
Привет! Вот еще темы с ответами:

Определить, пересекаются ли прямоугольники, заданные координатами своих углов - C++
Нужна еще помощь, буду благодарен. На с++ обязательно Два прямоугольника, расположенные в первом квадранте, со сторонами,...

Найти минимальный по площади прямоугольник, покрывающий все заданные прямоугольники - C++
На листке бумаги в клеточку нарисовали K прямоугольников так, что их стороны лежат на линиях сетки, а вершины имеют известные целочисленные...

даны стороны двух прямоугольников. определить, будут ли эти прямоугольники равновеликими, т.е имеют ли они равные площади. - C++
программирование алгоритмов разветляющейся структуры. (для программирования ветвящихся алгоритмов применятся условный оператор (оператор...

Создать классы, описывающий прямоугольники и класс-наследник, описывающий прямоугольные параллепипеды - C++
Создать классы, описывающий прямоугольники. Найти площадь прямоугольника. Создать класс-наследник, описывающий прямоугольные параллепипеды....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.