Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
1

Логическая проверка попадания точки в заданную область

22.04.2015, 23:27. Просмотров 3736. Ответов 21
Метки нет (Все метки)


Здравствуйте,Помогите решить пожалуйста(
Задано N точек в виде двумерного или двух одномерных массивов координат. Разработать программу,для подсчета кол-во точек,попавших в заданную область,формирования массива из координат точек,попавших в заданную область
0
Миниатюры
Логическая проверка попадания точки в заданную область  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2015, 23:27
Ответы с готовыми решениями:

Логическая проверка попадания точки в заданную область
Посмотрите скриншот, пожалуйста.

Логическая проверка попадания точки в заданную область
Задано N точек в виде двумерного или двух одномерных массивов координат. Разработать программу,для...

Логическая проверка попадания точки в заданную область(закрашенную)
Помогите решить задачу: Задано N точек на плоскости в виде одного двумерного или двух одно-...

Проверка попадания точки в заданную область
Плиз, помогите, никак не могу понять, как написать программу.

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
21
18 / 18 / 10
Регистрация: 20.04.2015
Сообщений: 108
23.04.2015, 13:19 2
делаем цикл поиска и инструкцию if при нахождении точек...
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include <locale>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    int itog[10][2];
    bool mass[10][10];// представляем массив пустыми ячейками(0) и точками (1)
    int iy=0,kolvo=0,x,y,
    oblx=5, //задание ширины области
    obly=6; // задание высоты области (отсчет начинается с 0)
 
    for(x=0;y<obly;x++)
    {
 
        if(mass[y][x])
        {
        kolvo++; // счетчик количества точек
        itog[iy][0]=x;//запись кординаты x
        itog[iy][1]=y;//запись кординаты y
        iy++;  // переключение на след строку массива itog;
        }
         if(x==(oblx-1)){y++;x=-1;}//если достигнут конец строки при поиске то переключение на след строку
 
    }
 
}
1
Эксперт C
25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,719
23.04.2015, 13:58 3
Fliiz, Условие попадания точки в область
C++
1
if (x*x + y*y <=4 || (xy>0 && -2<=x && x<=2 && -2<= y && y<=2)) ...
1
45 / 45 / 23
Регистрация: 14.04.2013
Сообщений: 188
23.04.2015, 17:55 4
Iridiscent, y не инициализирована.

C++
1
2
3
4
5
6
7
8
9
{
int iy=0,kolvo=0,x,y,
    oblx=5, //задание ширины области
    obly=6; // задание высоты области (отсчет начинается с 0)
 
    for(x=0;y<obly;x++)
    {
 
        if(mass[y][x])
0
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:09  [ТС] 5
Походу условие не правильное...xy>0 не совсем понял
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:16 6
Цитата Сообщение от Байт Посмотреть сообщение
if (x*x + y*y <=4 || (xy>0 && -2<=x && x<=2 && -2<= y && y<=2))
знак умножить забыл, получилась новая переменная
и точка 0,0 не попадет
C++
1
if (x*x + y*y <=4 || (x*y>=0 && -2<=x && x<=2 && -2<= y && y<=2))
а почему x*y<=4 не ввел? излишняя проверка?
я бы проверил сначала переменные в диапазоне
C++
1
if(max(abs(x),abs(y))<=2 &&( x*x + y*y <=4 || (xy>=0 && x*y<=4)))
Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
и точка 0,0 не попадет
попадет я не врубился сначала
она вот здесь
Цитата Сообщение от Байт Посмотреть сообщение
x*x + y*y <=4
отработает
1
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:19  [ТС] 7
Помогите найти тут ошибку
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
#include <iostream>
#define n 4
 
using namespace std;
 
int main()
{
    int i,k=0;
    double x,y;
    double massiv_A [2][n];
    for(i=0;i<n;i++)
    {
        cout<<"  x"<<i+1<<"="; cin>>x;
        cout<<"  y"<<i+1<<"="; cin>>y;
        if (x*x + y*y <=4 || (x*y>0 && -2<=x && x<=2 && -2<= y && y<=2))
        {
            massiv_A[1][k]=x; massiv_A[2][k]=y; k++;
        }
 
        cout<<"\n";
 
    }
 
    cout<<"\n\n Kol-vo popavshih tochek: "<<k;
    cout<<"\n  Popavshie tochki:\n";
    for(i=0;i<n;i++) cout<<"  "<< massiv_A [1][i]<<"  "<< massiv_A [2][i]<<"\n";
 
    return 1;
}
0
Эксперт C
25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,719
23.04.2015, 18:25 8
Цитата Сообщение от ValeryS Посмотреть сообщение
знак умножить забыл
Мой грех...

Добавлено через 2 минуты
Цитата Сообщение от Fliiz Посмотреть сообщение
Помогите найти тут ошибку
Массивы в Си(++) нумеруются с нуля

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
а почему x*y<=4 не ввел? излишняя проверка?
Смысл? Это же гипербола. Чего ей здесь делать?
0
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:26  [ТС] 9
а где у меня не так?(
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:28 10
Цитата Сообщение от Fliiz Посмотреть сообщение
for(i=0;i<n;i++) cout<<" "<< massiv_A [1][i]<<" "<< massiv_A [2][i]<<"\n";
C++
1
for(i=0;i<k;i++) cout<<" "<< massiv_A [1][i]<<" "<< massiv_A [2][i]<<"\n";
Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Смысл? Это же гипербола. Чего ей здесь делать?
я считал как смесь квадрата и вписанного круга
0
Эксперт C
25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,719
23.04.2015, 18:28 11
Цитата Сообщение от Fliiz Посмотреть сообщение
а где у меня не так?(
Цитата Сообщение от Fliiz Посмотреть сообщение
massiv_A[2][n];...
massiv_A[2][k]=y;
Залез в чужую память.
1
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:30  [ТС] 12
Попробуйте у себя запустить,он почему то массив не правильно строит,когда одни единицы,то всё ок
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
#include <iostream>
#include<cmath>
#define n 4
 
using namespace std;
 
int main()
{
    int i,k=0;
    double x,y;
    double massiv_A [2][n];
    for(i=0;i<n;i++)
    {
        cout<<"  x"<<i+1<<"="; cin>>x;
        cout<<"  y"<<i+1<<"="; cin>>y;
        if (max(abs(x),abs(y))<=2 &&( x*x + y*y <=4 || (x*y>=0 && x*y<=4)))
 
        {
            massiv_A[1][k]=x; massiv_A[2][k]=y; k++;
        }
 
        cout<<"\n";
 
    }
 
    cout<<"\n\n Kol-vo popavshih tochek: "<<k;
    cout<<"\n  Popavshie tochki:\n";
    for(i=0;i<k;i++) cout<<"  "<< massiv_A [1][i]<<"  "<< massiv_A [2][i]<<"\n";
 
    return 0;
}
0
Эксперт C
25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,719
23.04.2015, 18:30 13
Fliiz, Тэги кода не забывай!
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:32 14
Цитата Сообщение от Байт Посмотреть сообщение
Залез в чужую память.
не а у него k изначально равно 0 и увеличивается если есть попадание, так что больше 3 не может быть
4 если все точки попали, но это уже после записи
а вот вывод всего массива, записали точки или нет, все равно выводим
Fliiz, выделяй листинг тегами, написал програмку выделил мышкой и нажал сверху кнопочку c++
1
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:36  [ТС] 15
А как сделать так,чтобы он выводил массив только из тех точек,которые попали в область? А то он рандомные числа вставляет

Добавлено через 1 минуту
Извините,я просто нуб
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:38 16
Цитата Сообщение от Fliiz Посмотреть сообщение
А как сделать так,чтобы он выводил массив
дай новый листинг, а то у тебя каждые 2 минуты он меняется, не знаешь на что ориентироваться
вставь условия Байта,с моими поправками, а потом если пойдет,проверь мое
1
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:40  [ТС] 17
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
#include <iostream>
#include<cmath>
#define n 4
 
using namespace std;
 
int main()
{
    int i,k=0;
    double x,y;
    double massiv_A [2][n];
    for(i=0;i<n;i++)
    {
        cout<<"  x"<<i+1<<"="; cin>>x;
        cout<<"  y"<<i+1<<"="; cin>>y;
        if (max(abs(x),abs(y))<=2 &&( x*x + y*y <=4 || (x*y>=0 && x*y<=4)))
 
        {
            massiv_A[1][k]=x; massiv_A[2][k]=y; k++;
        }
 
        cout<<"\n";
 
    }
 
    cout<<"\n\n Kol-vo popavshih tochek: "<<k;
    cout<<"\n  Popavshie tochki:\n";
    for(i=0;i<n;i++) cout<<"  "<< massiv_A [1][i]<<"  "<< massiv_A [2][i]<<"\n";
 
    return 0;
}
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:42 18
Цитата Сообщение от Fliiz Посмотреть сообщение
что за листинг?
Код программы так называется
1
0 / 0 / 1
Регистрация: 22.04.2015
Сообщений: 42
23.04.2015, 18:46  [ТС] 19
Ну,всё сделал) Так, как сделать так,чтобы он выводил массив только из тех точек,которые попали в область? А то он рандомные числа вставляет
0
Модератор
Эксперт по электронике
8369 / 6214 / 835
Регистрация: 14.02.2011
Сообщений: 21,577
23.04.2015, 18:52 20
Цитата Сообщение от Fliiz Посмотреть сообщение
C++
1
2
3
4
5
        if (max(abs(x),abs(y))<=2 &&( x*x + y*y <=4 || (x*y>=0 && x*y<=4)))
 
        {
            massiv_A[1][k]=x; massiv_A[2][k]=y; k++;
        }
C++
1
2
3
4
5
       if (max(abs(x),abs(y))<=2 &&( x*x + y*y <=4 || (x*y>=0 && x*y<=4)))
 
        {
            massiv_A[0][k]=x; massiv_A[1][k]=y; k++;
        }
Цитата Сообщение от Fliiz Посмотреть сообщение
C++
1
    for(i=0;i<n;i++) cout<<"  "<< massiv_A [1][i]<<"  "<< massiv_A [2][i]<<"\n";
C++
1
    for(i=0;i<k;i++) cout<<"  "<< massiv_A [0][i]<<"  "<< massiv_A [1][i]<<"\n";
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2015, 18:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Проверка попадания точки в заданную область
Здравствуйте, помогите плиз с заданием. Вот его задание и условие

проверка попадания точки в заданную область (вопрос)
Задание: 1.Записать логическое выражение,соответствующее заданной области истинности 2.Составить...

Вычисление значения функции, проверка попадания точки в область на плоскости
Дано вещественное число а. Для функции y=f(x), график которой приведен ниже вычислить f(а)....

Проверка попадания точки в заданную область
Проверка попадания точки в заданную область Python Задано N точек на плоскости. 1. Записать...


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

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

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