С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

задачи на основные темы, требующие как минимум присутствие логики - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структура http://www.cyberforum.ru/cpp-beginners/thread208286.html
Написать структуру 4 4 Ivanov 51 2 Zuckerberg 99.1 3 Mendelson 99.0 1 Ivanova 55.1 i 2 1 Ivanova 55.1 4 Ivanov 51
C++ В квадратный числовой массив записаны целые числа в диапазоне от -99 до 99. Определить, имеются ли такие квадратные подмассивы, сумма элементов которы В квадратный числовой массив записаны целые числа в диапазоне от -99 до 99. Определить, имеются ли такие квадратные подмассивы, сумма элементов которых равна P. Если таковые имеются, то вывести эти... http://www.cyberforum.ru/cpp-beginners/thread208277.html
Функция+binary + АНГЛ!!! C++
3 задачи! Официальным языком форума является русский язык. Будьте так добры, потрудитесь и переведите тексты заданий
Заполнение массива по спирали C++
Дано число n. Создайте массив A и заполните его по спирали, начиная с числа 0 в центральной клетке A. Спираль выходит вверх, далее закручивается против часовой стрелки. очень нужно помагите
C++ Массив структур http://www.cyberforum.ru/cpp-beginners/thread208267.html
Задача:создать массив структур а,содержащий фамилию и 3 оценки.Найти студентов,чей средний балл выше среднего группы и упорядочить по алфавиту. Получить массив и вывести на экран. вышел такой...
C++ Полное решение, классы!!! + проверь свой АНГЛ!!! необходимо полное решение с оформлением подробнее

Показать сообщение отдельно
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
24.12.2010, 22:19
ПолинаФ
Чтож, если сказал А, приходится и Б говорить
В твоих кодах я разбираться не стал, не потому что они не хороши, а просто
легче самому все сделать, чем пытаться понять, чего хочет твой собеседница
Тем более, что алгоритм я переделал, несколько упростил, тут мне моя собачка
помогла, гуляли мы с ним по легкому морозцу...
Ему - отдельное от тебя спасибо, кстати, зовут его - Байт.

Нам же надо чего? Найти прямую, которая не будет параллельна ни одному из
векторов, проведенных меж двумя нашими точками. Таких прямых много -
континуум. А нам всего-то одну найти.
Значит, считаем все эти вектора, и среди бесконечного множества других
векторов ищем с ними не совпадающий. А потом думаем, куда б его поместить.
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
65
66
67
68
69
// #include <stdlib.h>
#include <alloc.h>
#include <stdio.h>
#include <string.h>
 
cm(double *T1, double *T2)  // Функция сортировки
{
  if (*(T1+2) < *(T2+2)) return(-1);
  if (*(T1+2) > *(T2+2)) return(1);
  return(0);
}
/***********/
main()
{
  double *T, *V, vx, vy, d, A, x0, y0; FILE *f;
  char b[100]; // Буфер для ввода строк из файла
  int N, i, j, k; char *p;
 
  f = fopen("x.dat", "r"); // Файл с данными
  if (f==NULL) return;
  fgets(b, 10, f);
  N = atoi(b);  // Кол-во точек
  T = malloc(N*3*sizeof(double));  // Такая у него структура:
                         // T[3*i] - X точки, T[3*i+1] - ее Y
                         // T[3*i+2] - там потом будет расстояние до прямой
  for(i=0; i<N; i++) { // Вводим координаты точек
    fgets(b, 99, f);
    T[3*i] = atoi(b);
    p = strchr(b, ' ');
    T[3*i+1] = atoi(p);
  }   // В файле первая координата прижата влево, вторая - в той хе строчке через пробел
  fclose(f);
  V = malloc(N*(N-1)*sizeof(double)/2); // А это будут вектора
  for(i=0, k=0; i<N; i++) {
    for(j=i+1; j<N; j++, k++) {
       vx = T[3*i] - T[3*j];
       vy = T[3*i+1] - T[3*j+1];
       if (vx!=0) d = vy / vx;
       else       d = 0; // Это значит, что вектор || oY, но нас это не волнует
       V[k] = d;
    }
  }
  A = 0.1;
  while(1) { // Ищем неиспользованное направление. Найдем навярняка.
             // У нас в запасе - бесконечность!
    for(i=0; i<N*(N-1)/2; i++) if (A==V[i]) break;
    if (i==N*(N-1)/2) A += 0.1;
    else break;
  }
    // Прямая A*x - y = 0 не параллельна ни одному из векторов
  for(i=0; i<N; i++) {
    d = A*T[3*i] - T[3*i+1];  // Расстояние от точки до этой прямой
    T[3*i+2] = d;
  }
  qsort(T, N, 3*sizeof(double), cm); // Сортировка
  if (N%2) {    // N - нечетное. x0, y0 - средняя точка
    k = N/2 + 1;
    x0 = T[3*k];
    y0 = T[3*k+1];
  }
  else {  // N - четное. x0, y0 - Точка между двумя средними
    k = N/2;
    x0 = (T[3*k] + T[3*k-3])/2;
    y0 = (T[3*k+1] + T[3*k-2])/2;
  }
  printf("Уравнение прямой\n");
  printf("Y-%f = %f(X-%f)\n", y0, A, x0);
}
/*************/
Программу я не проверял - только на синтаксис. Если что не так - работай!
По поводу "возможности / невозможности", если считать полуплоскости с краями,
то задача разрешима ВСЕГДА.
Ежели без краев, надо в уравнение полученной прямой подставлять точки,
считать сколько с плюсом, сколько с минусом, и если не равно - Увы!
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.