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

задачи на основные темы, требующие как минимум присутствие логики - 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++
Задача:создать массив структур а,содержащий фамилию и 3 оценки.Найти студентов,чей средний балл выше среднего группы и упорядочить по алфавиту. Получить массив и вывести на экран. вышел такой код: #include <iostream> #include <string.h> #include <iomanip> #include <conio.h> using namespace std;
C++ Полное решение, классы!!! + проверь свой АНГЛ!!! http://www.cyberforum.ru/cpp-beginners/thread208266.html
необходимо полное решение с оформлением
C++ С++ Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них... 17)Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них и длины их сторон. Один прямоугольник назовём первым, другой вторым определить пересекаются ли эти прямоугольники. C++ Собственно в универе дали такую задачу да же не знаю как её вобще решить просто тупо на бумаге не то что в c++загнать. подробнее

Показать сообщение отдельно
Day
1154 / 959 / 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);
}
/*************/
Программу я не проверял - только на синтаксис. Если что не так - работай!
По поводу "возможности / невозможности", если считать полуплоскости с краями,
то задача разрешима ВСЕГДА.
Ежели без краев, надо в уравнение полученной прямой подставлять точки,
считать сколько с плюсом, сколько с минусом, и если не равно - Увы!
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru