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

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

Войти
Регистрация
Восстановить пароль
 
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
#1

Посчитать число точек, находящихся внутри круга - C++

30.03.2010, 16:54. Просмотров 1028. Ответов 9
Метки нет (Все метки)

Всем привет
Есть такое задание: посчитать число точек, находящиеся внутри круга радиусом r с центром в точке с координатами (1,1); координаты заданы массивами X(10), Y(10).

Все-бы то ничего, и задание понятно, но работа с классами... Что это я прочитал, толком ничего так и не понял, и как их правильно применять тоже.

Решил пока просто сделать прогу без классов, но и тут застрял....
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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
 
int main()
 
{
 
   int i , j, x[10], y[10];
rand();
    double r, k;
 
    for (i=0; i<10; i++)
    {
 
x[i] = rand() % 9;
}
        for (j=0; j<10; j++)
        {
 
 
            y[j] = rand() % 9;
 
      }
 
 
    k=sqrt(x[i]*x[i]+y[j]*y[j]);
 
    cout <<"Vveite radius r";
    cin >>r;
 
   for (i = 0; i < 10; i++)
    {
        for (j=0; j<10; j++)
        {
    if (k>r) cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" Za kolom ";
    if (k<r) cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" V koli ";
        }
    }
cout<<k;
 
 
    return (0);
    //SYSTEM "PAUSE";
}
Оно выводит циклом (ну я сам туда его загнал), а как сделать вывод только один раз - проблема... Если кому не сложно - помогите, пожалуйста. А потом уже за классы возьмусь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2010, 16:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитать число точек, находящихся внутри круга (C++):

Подсчитать число точек,находящихся внутри круга - C++
Задача: подсчитать число точек,находящихся внутри круга радиусом R с центром в начале координат; кординаты точек заданы масивами X(80),...

Найти число точек, находящихся внутри круга радиусом r с центром в заданной точке - C++
Нужно написать программу: Подсчитать число точек, находящихся внутри круга радиусом r с центром в точке с координатами (1, 1);...

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

Для заданных точек определите, лежат ли они внутри круга или на его границе - C++
Имя входного файла: input.txt Имя выходного файла: output.txt Ограничения по времени: 0,2с Ограничения по памяти: 64 мегабайта ...

Из множества точек на плоскости найти точки, образующие параллелограмм с наибольшим количеством точек внутри - C++
&quot;Даны N точек на плоскости. Найти среди них точки являющиеся вершинами фигуры, содержащей максимальное число заданных точек. Фигура -...

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

9
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
30.03.2010, 17:31 #2
я думаю должно быть как-то так: (код не проверял)
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
class Circule
{
   public:
     Circule()
     {
         initCircule(1,1,1);
     }
     Circule(int x, int y, int radius)
     {
        initCircule(x,y, radius);
     }
     bool isInCircule(int x, int y)
      {
        //делаем математику
         if()//точка поподает в круг 
          {
                 return true;
          }
           return false;
      }
   private:
   void initCircule(int x, int y)  
   {
       //инициализируем переменную (в вашем примере это "к"), в общем правельную формулу ставьте))
       val = sqrt(x*x+y*y)*radius; //повтарюсь - формула от балды!
   }
   int val;
}
 
void main()
{
   Circule c; //круг с началом координат 1.1 и радиусом 1
   Circule c1(10, 10, 5); // круг с началом координат 10.10 и радиусом 5  
   if(c.isInCircule(1,1))
   {
         //точка 1.1 - попадает в круг
   }
  else
   {
        //точка 1.1 не попадает в круг
   }
}
1
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
30.03.2010, 17:32  [ТС] #3
l_a_m, огромное спасибо, но я думал с начала свое до ума довести, а потом уже за классы хвататься...
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
30.03.2010, 17:37 #4
ну в Вашем варианте должно быть как-то так:

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
int main()
 
{
 
   int x[10], y[10];
   
rand();
    double r, k;
 
    for (int i=0; i<10; i++)
    {
 
x[i] = rand() % 9;
y[i] = rand() % 9;
 }
 
    k=sqrt(x[i]*x[i]+y[j]*y[j]);
 
    cout <<"Vveite radius r";
    cin >>r;
 
   for (i = 0; i < 10; i++)
    {
    if (k>r) 
   {
   cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" Za kolom "; 
   }
   else
   { 
      cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" V koli ";
   }
    }
cout<<k;
 
 
    return (0);
    //SYSTEM "PAUSE";
}
1
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
30.03.2010, 20:08  [ТС] #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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
 
int main()
 
{
 
int x[10], y[10], i;
 
rand();
double r, k;
 
for (int i=0; i<10; i++)
{
 
x[i] = rand() %5;
y[i] = rand() %5;
}
 
k=sqrt((x[i]-1)*(x[i]-1)+(y[i]-1)*(y[i]-1));
 
cout <<"Vveite radius r";
cin >>r;
 
if (k>r)
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" Za kolom ";
}
else
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" V koli ";
}
 
cout<<"\nVidstan' vid tsentru do to4ku "<<k;
 
return (0);
}
Вот так Работает, спасибо. Теперь за классы....

Добавлено через 1 час 40 минут
Поскольку завтра сдавать, то решил делать "в лоб". Но все равно 2 ошибки:

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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
 
 
class TPoint
{
    public:
    int x,y;
 
};
 
int main()
 
{
TPoint Points[10];
int x[10], y[10], i;
 
rand();
double r,k;
 
 
 
for (int i=0; i<10; i++)
{
 
x[i] = rand() %10;
y[i] = rand() %10;
 
}
 
Points[0].x=x[i]; Points[0].y=y[i];
 
 
 
 
cout <<"Vveite radius r= ";
cin >>r;
 
for (i=0; i<10; i++)
{
  x=Points[i].x[i];
  y=Points[i].y[i];
 
k=sqrt((x[i]-1)*(x[i]-1)+(y[i]-1)*(y[i]-1));
}
if (k>r)
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" Za kolom ";
}
else
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" V koli ";
}
 
cout<<"\nVidstan' vid tsentru do to4ku= "<<k<<"\n";
 
system("PAUSE");
return (0);
}
ему не нравится x=Points[i].x[i];
y=Points[i].y[i];
И чего ему надо?
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
31.03.2010, 09:50 #6
всё правильно :-) у Вас же

C++
1
2
3
4
5
class TPoint
{
    public:
    int x,y;
};
это переменные, а не массив переменных. т.е. Вы не можете обращаться так: x=Points[i].x[i]; а правильное обращение будет выглядеть так: x=Points[i].x; но это не совсем правильный вариант :-) Лучше опешите класс круг, который будет принимать структуру точка - это будет более красиво выглядеть :-)
а ещё мне кажется что у Вас ошибка в коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i=0; i<10; i++)
{
  x=Points[i].x[i];
  y=Points[i].y[i];
 
k=sqrt((x[i]-1)*(x[i]-1)+(y[i]-1)*(y[i]-1)); 
/* здесь у вас значение "к" - берётся  только для последней точки. 
Если я правильно помню, то Вам нужно пересчитывать значение 
"к" для каждой точки, а не только для 9-й. 
Ещё заметил, возможно Вы хотели сделать так: k=sqrt((x[i-1])*(x[i-1])+(y[i-1])*(y[i-1]));
это Вы ссылаетесь на i-1-й элемент массива, а когда вы делаете y[i]-1, то вы от значения 
в массиве y[i] вычитаете 1*/
}
1
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
31.03.2010, 20:10  [ТС] #7
l_a_m, огромное спасибо, еще внес поправки. И немного переделал, чтоб пока считало только для 1-й, то есть убрал цикл в конце. Но все-равно ему еще что-то не нравится, и именно в
x = Points[i].x[i];
y = Points[i].y[i];

Вот код:
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
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
 
 
class TPoint
{
    public:
    int x,y;
 
};
 
int main()
 
{
TPoint Points[10];
int x[10], y[10], i;
 
rand();
double r,k;
 
 
 
for (int i=0; i<10; i++)
{
 
x[i] = rand() %10;
y[i] = rand() %10;
 
}
 
Points[i].x; Points[i].y;
 
 
 
 
cout <<"Vveite radius r= ";
cin >>r;
 
for (i=0; i<10; i++)
{
  x = Points[i].x[i];
  y = Points[i].y[i];
 
 
  k=sqrt((x[i-1])*(x[i-1])+(y[i-1])*(y[i-1]));
 
}
 
if (k>r)
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" Za kolom ";
}
else
{
cout <<" \nTo4ka z koord x= "<< x[i] <<" y= "<< y[i] <<" V koli ";
}
 
cout<<"\nVidstan' vid tsentru do to4ku= "<<k<<"\n";
 
system("PAUSE");
return (0);
}
Конечно, корректнее было бы описать круг, но у меня уже нету сил... Сдавать срочно надо. И мне еще кровь из носу, но на пятницу надо сделать то же самое (прогу), только со структурами или списками. Лучше списками.
0
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
01.04.2010, 23:47  [ТС] #8
Ну неужели никто не знает?
0
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
02.04.2010, 10:31 #9
Повторюсь, у Вас объект класса Points содержит переменные x и y, а не массив переменных x[] и y[]; т.е. Вы не можете обращаться к переменной, как к массиву переменных. Правильный вариант Points[i].x !!!(без ни каких скобок возле x и y)!!! и ещё не понятна строка 33, в ней нет ни какого смысла - удалите её, да бы глаза не муляла :-)
1
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 115
02.04.2010, 10:55  [ТС] #10
Цитата Сообщение от l_a_m Посмотреть сообщение
Повторюсь, у Вас объект класса Points содержит переменные x и y, а не массив переменных x[] и y[]; т.е. Вы не можете обращаться к переменной, как к массиву переменных. Правильный вариант Points[i].x !!!(без ни каких скобок возле x и y)!!! и ещё не понятна строка 33, в ней нет ни какого смысла - удалите её, да бы глаза не муляла :-)
Хорошо, спасибо. вечером еще покручу. и надо браться за списки, тут уже покруче будет... Или хотя-бы структуры.
0
02.04.2010, 10:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2010, 10:55
Привет! Вот еще темы с ответами:

Вычислить количество точек, находящихся в круге заданного радиуса - C++
Помогите Вычислить количество точек с целочисленными координа*тами, находящихся в круге радиуса R (R&gt;0).

Нарисовать 4 круга внутри которых узоры - C++
нарисовать 4 круга внутри которых узоры, круги должны быть как на картинке

В одномерном массиве посчитать сумму элементов, находящихся в четных позициях - C++
Ребят как можно проще напишите плиз) 1)В одномерном массиве посчитать сумму элементов, находящихся в четных позициях. 2)Текст в файле:...

В одномерном массиве посчитать сумму элементов,находящихся в четных позициях и т.д - C++
Помогите пожалуйста написать эту программу.. Желательно на TURBO C++ то есть (bc), т.к другие мы ещё не изучали Задание 1 (Одна...


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

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

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