powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определить кол-во ям на пути - C (Си)
6 сообщений из 6, страница 1 из 1
Определить кол-во ям на пути - C (Си)
    #39267256
95Roman6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток друзья, пришёл на форум за помощью с задачей по Си.
Задача
На наблюдаемой местности расположено 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
Определить кол-во ям на пути - C (Си)
    #39267267
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ямы друг-друга не перекрывают, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
итого = 0
while(1) {
   ... твой поиск одной ямы
   if(ям не найдено) break;
   итого++;
   перемещаем точку Е на край найденной ямы
}
...
Рейтинг: 0 / 0
Определить кол-во ям на пути - C (Си)
    #39267277
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все проще, у тебя перебор ям в цикле. Убери return 0 и добавь счетчик ям.
...
Рейтинг: 0 / 0
Определить кол-во ям на пути - C (Си)
    #39267279
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
95Roman6Проблема в том что цикл проходит всего 1 раз

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


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