Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить кол-во ям на пути - C (Си) / 6 сообщений из 6, страница 1 из 1
04.07.2016, 12:49
    #39267256
95Roman6
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
Доброго времени суток друзья, пришёл на форум за помощью с задачей по Си.
Задача
На наблюдаемой местности расположено N круглых ям с координатами (xi; ;yi), диаметрами di (i=0..N) Для объекта, движущегося в направлении вектора w=(a,b) из точки Е=Т(x,y);
г) Определить, какое количество ям встретится у него на пути.
Входные данные:
- целое положительное число N (N<50);
- N строк вида xi, yi, di, где xi , yi — координаты центра ямы, di – диаметр;
- Числа a и b — координаты направляющего вектора движения объекта, x, y- координаты точки отправления.
Выходные данные:
- Целое число K – количество ям, встречающихся на пути объекта.

Проблема в том что цикл проходит всего 1 раз и ищет только одну яму, а мне нужно чтобы он искал все ямы на пути отрезка ET
Код
Код: sql
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.
/*1.2*/
#include<math.h>
#include<stdio.h>
float line(float k, float x, float b);
main(){
  int n;
  float X1,X2,Y1,Y2;
    printf("Введите кол-во ям: ");
      scanf("%d",&n);
    if(n>50){
      printf("Кол-во ям не должно привышать 50\n");
  return 0;
    }
  int pit[n][3], i=0;   //массив для хранения информации о ямах (x,y,r)
    printf("Введите координаты для всех ям (x,y,r)\n");
      for(i=0; i<n; i++){
    printf("Яма #[%d]: ",i);
      scanf("%d%d%d", &pit[i][0], &pit[i][1], &pit[i][2]);  
      }
  int x1, y1;
    printf("Введите координаты точки E(x1,y1): ");
      scanf("%d%d",&x1,&y1);
  int x2,y2;
    printf("Введите координаты точки T(x2,y2): ");
      scanf("%d%d",&x2,&y2);
  float k = (y2 - y1)/(x2 - x1);
  float b = (y2*x1 - y1*x2)/(x1 - x2);
    for(i=0; i<n; i++){
      b += (k*pit[i][0] - pit[i][1]); 
      float D = pow(2*b*k,2) + 4*(1 + pow(k,2))*(pow(pit[i][2],2) - pow(b,2));
	if(0<=D){	//0 < D прямая пересекает круг
	  X1 = (-2*b*k - sqrt(D))/(-2*(1 + pow(k,2)));
	  Y1 = line(k,X1,b);
	    printf("1координаты точки пересечения Р1(%0.0f, %0.0f)\r\n",X1 + pit[i][0],Y1 + pit[i][1]);
	if(D==0)	//D == 0 прямая - касательная, точка пересечения одна
	  printf("\tкасательная\n");
	    else{
	      X2 = (-2*b*k + sqrt(D))/(-2*(1 + pow(k,2)));
	      Y2 = line(k,X2,b);
		printf("3координаты точки пересечения Р2(%0.0f, %0.0f)\n",X2 + pit[i][0],Y2 + pit[i][1]);
	    }
	}else 		//D < 0 прямая и круг не пересекаются
	      printf("На пути объекта нет ни одной ямы![%d]\n",i);
	return 0;
    }
}
float line(float k, float x, float b)
{
    return (k*x + b);
}


...
Рейтинг: 0 / 0
04.07.2016, 12:59
    #39267267
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
Если ямы друг-друга не перекрывают, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
итого = 0
while(1) {
   ... твой поиск одной ямы
   if(ям не найдено) break;
   итого++;
   перемещаем точку Е на край найденной ямы
}
...
Рейтинг: 0 / 0
04.07.2016, 13:05
    #39267277
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
Все проще, у тебя перебор ям в цикле. Убери return 0 и добавь счетчик ям.
...
Рейтинг: 0 / 0
04.07.2016, 13:08
    #39267279
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
95Roman6Проблема в том что цикл проходит всего 1 раз

Ну так какой-то чудак ему внутрь return засунул...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2016, 14:48
    #39267381
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
У меня какое-то дежавю.
...
Рейтинг: 0 / 0
05.07.2016, 09:54
    #39267778
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить кол-во ям на пути - C (Си)
mayton,
сессия называется.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить кол-во ям на пути - C (Си) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]