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

Напишите программу на СИ! снова геометрия(((( - C++

Восстановить пароль Регистрация
 
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:26     Напишите программу на СИ! снова геометрия(((( #1
Нужно написать программу на си, которая это выполнит...

Задано множество точек на плоскости, не лежащих на одной прямой. Определить минимальное количество точек, после удаления которых остаются точки, лежащие на одной прямой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 15:26     Напишите программу на СИ! снова геометрия((((
Посмотрите здесь:

C++ Напишите пожалуйста программу
напишите программу C++
Напишите программу C++
C++ Напишите программу с if
C++ Напишите программу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
29.06.2011, 15:46     Напишите программу на СИ! снова геометрия(((( #2
Что конкретно непонятно? Попытки написания программы были?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:48  [ТС]     Напишите программу на СИ! снова геометрия(((( #3
нет, я не знаю как это написать вообще. для первокурсницы это задание просто убийственно!
.4rray
8 / 8 / 0
Регистрация: 15.12.2010
Сообщений: 41
29.06.2011, 21:14     Напишите программу на СИ! снова геометрия(((( #4
Найти уравнение прямой на плоскости. Вникнуть.
Задание по смыслу то же, что и найти макс. кол-во точек, лежащих на 1 прямой.

Метод в лоб:
1. Выбрать 2 точки и по ним построить ур-е прямой. Некоему счетчику присвоить 2.
2. Есть ли ещё точки.
- да: Текущий счётчик + 1.
- нет: Если новый счетчик > старого, присвоим старому = новый. Иначе пункт №1.
3. Проверить принадлежит ли она этому ур-ю.
- да : идем пункт №2
- нет: новый счётчик присвоить 2, идём пункт №1).

В последнем оставшемся счётчике будет макс. кол-во точек, лежащих на 1 прямой.
Отнимаем от общего кол-ва точек - макс.кол-во и получаем результат.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 20:55  [ТС]     Напишите программу на СИ! снова геометрия(((( #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
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 <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
// поиск прямой на которой лежит  максимальное число точек. 
#define X 0
#define Y 1
 
// y=kx+b
double Calc_K(double x1, double y1, double x2, double y2)
{       
        return (y1-y2)/(x1-x2);
}
 
// y=kx+b
double Calc_B(double x1, double y1, double x2, double y2)
{       
        return (y2*x1-y1*x2)/(x1-x2);
}
 
int main ()
{
 
        double k,b, finder[2][2];
        int counter, temp=-1, n;
 
        printf("Enter number points( n>2 ): ");
        scanf("%d", &n);
        if(n<=2) { 
        printf("Number points is little");  
        _getch();
        return 0;}
 
        double ** Points = (double**)malloc(n * sizeof(double*));
        for (int i=0; i<n; i++)
        {
                Points[i]= (double*)malloc(2 * sizeof(double));
                printf("Enter pair[%d]:\n x: ", i + 1); 
                scanf("%f", &Points[i][X]);
                printf("y: ");              
                scanf("%f", &Points[i][Y]);}
 
        for (int i=1; i<n; i++)
        {               
                //if(Points[i-1][X]==Points[i][X])  continue;
 
                k=Calc_K(Points[i-1][X], Points[i-1][Y], Points[i][X], Points[i][Y]);
                b=Calc_B(Points[i-1][X], Points[i-1][Y], Points[i][X], Points[i][Y]);
                counter=2;
                for (int j=i+1; j<n; j++)
                {
                        if(Points[j][Y]==k*Points[j][X]+b) ++counter;
                }
                
                if(counter>temp) 
                { 
                        temp=counter; 
                        finder[0][X]=Points[i-1][X]; 
                        finder[1][X]=Points[i][X];
                        finder[0][Y]=Points[i-1][Y]; 
                        finder[1][Y]=Points[i][Y];
                }
        } 
 
        printf("points: %d\n", temp);
        printf("line:: x1: %f y1: %f\nx2: %f y2: %f", finder[0][X], finder[0][Y], finder[1][X], finder[1][Y]);
        _getch();
        return 0;
}

А на С++ работает...

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
70
71
#include <iostream>
using namespace std;
 
 
// поиск прямой на которой лежит  максимальное число точек. 
#define X 0
#define Y 1
 
// y=kx+b
double Calc_K(double x1, double y1, double x2, double y2)
{       
        return (y1-y2)/(x1-x2);
}
 
// y=kx+b
double Calc_B(double x1, double y1, double x2, double y2)
{       
        return (y2*x1-y1*x2)/(x1-x2);
}
 
int main ()
{
 
        double k,b, finder[2][2];
        int counter, temp=-1, n;
 
        cout<<"Enter number points( n>2 ): ";
        cin>>n;
        if(n<=2) { 
        cout<<"Number points is little";
        system("pause");  
        return 0;}
 
        double ** Points = new  double* [n];
        for (int i=0; i<n; i++)
        {
                Points[i]= new double [2];
                cout<<"Enter pair["<<i+1<<"]:\nx: "; 
                cin>>Points[i][X];
                cout<<"y: ";
                cin>>Points[i][Y];             
        } 
              
        for (int i=1; i<n; i++)
        {               
                //if(Points[i-1][X]==Points[i][X])  continue;
 
                k=Calc_K(Points[i-1][X], Points[i-1][Y], Points[i][X], Points[i][Y]);
                b=Calc_B(Points[i-1][X], Points[i-1][Y], Points[i][X], Points[i][Y]);
                counter=2;
                for (int j=i+1; j<n; j++)
                {
                        if(Points[j][Y]==k*Points[j][X]+b) ++counter;
                }
                
                
                if(counter>temp) 
                { 
                        temp=counter; 
                        finder[0][X]=Points[i-1][X];
                        finder[1][X]=Points[i][X];
                        finder[0][Y]=Points[i-1][Y];
                        finder[1][Y]=Points[i][Y];
                }
        } // for (int i=1;
 
        cout<<"points: "<<temp<<"\n line:: x1: "<<finder[0][X]<<" y1: "<<finder[0][Y]
        <<"\n        x2: "<<finder[1][X]<<" y2: "<<finder[1][Y]<<endl;
        system("pause");
        return 0;
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
30.06.2011, 21:12     Напишите программу на СИ! снова геометрия(((( #6
Цитата Сообщение от Protected_fleur Посмотреть сообщение
for (int i
В языке С, переменные должны объявлятся в начале функции как в Pascal-e.
C
1
2
  double k,b, finder[2][2];
  int counter, temp=-1, n, i; // вот сюда из циклов for перенеси, чтобы было так for(i = 0;
На будущее всегда динамическую память нужно зачищать для C++ new/delete, C malloc, calloc, realloc/free.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.06.2011, 21:26     Напишите программу на СИ! снова геометрия(((( #7
Цитата Сообщение от xAtom Посмотреть сообщение
В языке С, переменные должны объявлятся в начале функции как в Pascal-e.
В С89, в С99 можно и так.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 21:27  [ТС]     Напишите программу на СИ! снова геометрия(((( #8
а как не крути, все равно не работает(((
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.06.2011, 21:28     Напишите программу на СИ! снова геометрия(((( #9
Цитата Сообщение от Protected_fleur Посмотреть сообщение
а как не крути, все равно не работает(((
какие ошибки? в чем пишите?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
30.06.2011, 21:31  [ТС]     Напишите программу на СИ! снова геометрия(((( #10
Maxwe11, прога на С вот что выдает при любых точках:
points: 2
line:: x1: 0.000000 y1: 0.000000
x2: 0.000000 y2: 0.000000
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 16:46     Напишите программу на СИ! снова геометрия((((
Еще ссылки по теме:

Напишите программу (массивы) C++
C++ Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?

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

Или воспользуйтесь поиском по форуму:
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 16:46  [ТС]     Напишите программу на СИ! снова геометрия(((( #11
К счастью, я разобралась сама))))
Yandex
Объявления
02.07.2011, 16:46     Напишите программу на СИ! снова геометрия((((
Ответ Создать тему
Опции темы

Текущее время: 01:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru