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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2012, 09:22   #1
Mik2012
 
Регистрация: 31.10.2012
Сообщений: 5
Вопрос Не могу разобраться со структурой...

Определить структуру, что описывает равнобедренный прямоугольный треугольник с катетами, параллельными осям координат, и нижним левым прямым углом. Написать и протестировать функцию, что возвращает указатель на новый треугольник – область пересечения двух заданных. Если пересечения нет – возвращается NULL.
Mik2012 вне форума Ответить с цитированием
Старый 09.11.2012, 10:41   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

К примеру, структура может хранить координаты нижнего левого угла и длину катета. Или координаты верхнего угла и длину катета. Или координаты верхнего угла и правого угла. Или ещё как-нибудь, на Ваш выбор.
Abstraction вне форума Ответить с цитированием
Старый 11.11.2012, 22:36   #3
Mik2012
 
Регистрация: 31.10.2012
Сообщений: 5
По умолчанию

Abstraction, А как тогда определить есть ли пересечение?
Mik2012 вне форума Ответить с цитированием
Старый 12.11.2012, 18:55   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

(Предыдущий вариант поста съеден хреновой связью, поэтому будет кратко)
Если у треугольника верхняя вершина (x1,y1), левая нижняя (x1, y2), то точка (x,y) принадлежит треугольнику если и только если (x1<x) И (y<y2) И (x-y<x1-y1).
Треугольники (1) и (2) пересекаются если и только если хотя бы одна вершина (1) принадлежит (2) либо произвольная вершина (2) принадлежит (1).
Abstraction вне форума Ответить с цитированием
Старый 14.11.2012, 21:16   #5
Mik2012
 
Регистрация: 31.10.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
(Предыдущий вариант поста съеден хреновой связью, поэтому будет кратко)
Если у треугольника верхняя вершина (x1,y1), левая нижняя (x1, y2), то точка (x,y) принадлежит треугольнику если и только если (x1<x) И (y<y2) И (x-y<x1-y1).
Треугольники (1) и (2) пересекаются если и только если хотя бы одна вершина (1) принадлежит (2) либо произвольная вершина (2) принадлежит (1).
Написал вот такой код, но все равно программа работает не совсем правильно.
Код:
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream>

using namespace std;


struct TRYC 
 {
  char nazv[3];
  int x;
  int y;
  int dlina;      
 } tryc1, tryc2 ;

int main ()
{
    setlocale(LC_ALL,"RUSSIAN");
    
    {cout <<"Введите название первого треугольника:"<<endl;
    for(int i=0; i<3; i++)
       scanf("%c", &tryc1.nazv[i]); 
    cout <<"Введите координату х нижнего левого угла первого треугольника:"<<endl;
    cin >>tryc1.x;
    cout <<"Введите координату у нижнего левого угла первого треугольника:"<<endl; 
    cin >>tryc1.y;
    cout <<"Введите длину катета первого треугольника:"<<endl;
    cin >>tryc1.dlina;}
     cin.sync();
    system("cls");
    
    {cout <<"Введите название второго треугольника:"<<endl;
    for(int j=0; j<3; j++)
    scanf("%c", &tryc2.nazv[j]); 
    cout <<"Введите координату х нижнего левого угла второго треугольника:"<<endl;
    scanf("%d", &tryc2.x);
    cout <<"Введите координату у нижнего левого угла второго треугольника:"<<endl; 
    cin >>tryc2.y;
    cout <<"Введите длину катета второго треугольника:"<<endl;
    cin >>tryc2.dlina;}
    int rast;
    rast=sqrt(pow((tryc2.x-tryc1.x),2)+pow((tryc2.y-tryc1.y),2));
    
    if ( tryc1.x<tryc2.x && tryc1.y<tryc2.y && tryc2.x-tryc2.y<=tryc1.x-tryc1.y && tryc2.dlina>=(int)rast  )
       
       cout <<"Треугольники "<<tryc1.nazv<< " и "<<tryc2.nazv<<  " пересекаются"<<endl;
    else
       cout <<"Треугольники "<<tryc1.nazv<< " и "<<tryc2.nazv<<" не пересекаются"<<endl;   
    
    system("PAUSE");}
Подскажите что нужно исправить.
Mik2012 вне форума Ответить с цитированием
Старый 14.11.2012, 22:43   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Условие пересечения описано мной выше. Вы его не захотели реализовывать. Ваше условие некорректно: достаточно, чтобы вершина при прямом угле второго треугольника была левее аналогичной вершины первого, чтобы программа решила, что треугольники не пересекаются; как нетрудно догадаться, они вполне могут пересекаться при таком условии.
Abstraction вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с БД Wladimir33 Microsoft Office Access 7 02.11.2012 11:41
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
помогите плиз...со структурой разобраться.... olegnoscov Общие вопросы C/C++ 3 29.12.2009 17:54