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

Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) - C++

Восстановить пароль Регистрация
 
ExploiT
1 / 1 / 0
Регистрация: 15.10.2009
Сообщений: 16
27.05.2012, 10:36     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) #1
есть программа, проблема в передаче массива в функцию
a[номер точки][координата(0=x,1=y,2=z)]
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
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "stdafx.h"
float a[100][3],b[2][3],c[1][3],r,maxd1=0,mind1=16000,maxd2=0,n[100][3],m[100][3];
int size,i,j,k;
void d(float n[100][3],m[100][3])
{
sqrt((n[i][0]-n[j][0])*(n[i][0]-n[j][0])+(n[i][1]-n[j][1])*(n[i][1]-n[j][1])+(n[i][2]-n[j][2])*(n[i][2]-n[j][2]));
}
float rad(a[100][3])
{
r = sqrt((a[i][0]-c[1][0])*(a[i][0]-c[1][0])+(a[i][1]-c[1][1])*(a[i][1]-c[1][1])+(a[i][2]-c[1][2])*(a[i][2]-c[1][2]));
return r;
}
 
float main(void)
{
 
printf("vvedite kol-vo tochek");
scanf("%d",&size);
if(size == 1) printf("minimal radius: 0");
else {for(k=0;k<size;k++){
        for(i=0; i < size; i++) scanf("%d %d %d",a[i][0],a[i][1],a[i][2]);
        for(j=0; j < size; j++) scanf("%d %d %d",a[j][0],a[j][1],a[j][2]);
            if ((d(a[i][3],a[j][3])) > maxd1) {(d(a[i][3],a[j][3])=maxd1;}/*находим макс расст. между точками*/
        a[i][0]=b[0][0];/*переприсваеваем координаты точек, между которыми макс расст*/
        a[i][1]=b[0][1];
        a[i][2]=b[0][2];
        a[j][0]=b[1][0];
        a[j][1]=b[1][1];
        a[j][2]=b[1][2];
        a[2][0]=(b[1][0]-b[0][0])/2+b[0][0];/*находим точку посередине между максимально удал точками*/
        a[2][1]=(b[1][1]-b[0][1])/2+b[0][1];
        a[2][2]=(b[1][2]-b[0][2])/2+b[0][2];
        for(i=0; i < size; i++)
            if(d(a[i][3],a[j][3] < mind1) {d(&a[i][3],&a[j][3]) = mind1;}/*находим ближайшую точку из заданных*/
            a[i][0]=c[1][0];
            a[i][1]=c[1][1];
            a[i][2]=c[1][2];
        for(i=0; i < size; i++)
            if (rad(a[i][3]) > maxd2) {rad(a[i][3] = maxd2;}}}/*из точки находим наиболее удаленную от неё, это и будет радиус*/
            printf("minimal radius:%d",maxd2);}
Лог компилятора
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(17) : error C2061: синтаксическая ошибка: идентификатор "m"
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(22) : error C2448: rad: вероятно, инициализатор, использующий стиль функции, является определением функции
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(36) : error C2660: d: функция не принимает 2 аргументов
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(36) : error C2660: d: функция не принимает 2 аргументов
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(36) : error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(47) : error C2660: d: функция не принимает 2 аргументов
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(47) : error C2143: синтаксическая ошибка: отсутствие ")" перед "{"
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(47) : error C2660: d: функция не принимает 2 аргументов
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(52) : error C3861: rad: идентификатор не найден
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(52) : error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>f:\прога\okruzhnost'\okruzhnost'\ okruzhnost'.cpp(52) : error C3861: rad: идентификатор не найден
1>Журнал построения был сохранен в "file://f:\прога\Okruzhnost'\Okruzhnost'\De bug\BuildLog.htm"
1>Okruzhnost' - ошибок 11, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 10:36     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек)
Посмотрите здесь:

Определить радиус и центр окружности.... C++
Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек C++
Найдите центр и радиус окружности, проходящей через три заданные точки на плоскости. C++
C++ Определить радиус и центр наибольшей окружности в области заданных точек, внутри которой нет точек
C++ Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
27.05.2012, 12:56     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) #2
Сложно читать ошибки, где номерация строк не совпадает с номерацией строк в приведенном вами куске кода. Можете исправить?
ExploiT
1 / 1 / 0
Регистрация: 15.10.2009
Сообщений: 16
27.05.2012, 14:05  [ТС]     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) #3
с функциями я вроде разобрался
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
// Okruzhnost'.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "stdafx.h"
double a[100][3],b[2][3],c[1][3],vc[2][3];
int size,i,j,k,r,maxd1=0,mind1=16000,maxd2=0;
 
 
double d(double a[100][3], int i , int j)
{
return sqrt((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1])+(a[i][2]-a[j][2])*(a[i][2]-a[j][2]));
}
 
 
double rad(double a[100][3], int i ,vc[2][3])
{
return sqrt((a[i][0]-vc[j][0])*(a[i][0]-vc[j][0])+(a[i][1]-vc[j][1])*(a[i][1]-vc[j][1])+(a[i][2]-vc[j][2])*(a[i][2]-vc[j][2]));
}
 
float main(void)
{
 
printf("vvedite kol-vo tochek");
scanf("%d",&size);
if(size == 1) printf("minimal radius: 0");
else {for(k=0;k<size;k++){
        for(i=0; i < size; i++) scanf("%d %d %d",a[i][0],a[i][1],a[i][2]);
        for(j=0; j < size; j++) scanf("%d %d %d",a[j][0],a[j][1],a[j][2]);
            if ((d(a,i,j) > maxd1) { maxd1=(d(a,i,j);}
        a[i][0]=b[0][0];
        a[i][1]=b[0][1];
        a[i][2]=b[0][2];
        a[j][0]=b[1][0];
        a[j][1]=b[1][1];
        a[j][2]=b[1][2];
        vc[1][0]=(b[1][0]-b[0][0])/2+b[0][0];/*vc точка посередине*/
        vc[1][1]=(b[1][1]-b[0][1])/2+b[0][1];
        vc[1][2]=(b[1][2]-b[0][2])/2+b[0][2];
        for(i=0; i < size; i++)
            if(rad(a,i) < mind1) {mind1 = rad(a,i);}
            a[i][0]=vc[1][0];
            a[i][1]=vc[1][1];
            a[i][2]=vc[1][2];
        for(i=0; i < size; i++)
            if (rad(a,i) > maxd2) {maxd2 = rad(a,i);}}}
            printf("minimal radius:%d",maxd2);
    }
Лог:1>------ Построение начато: проект: Okruzhnost', Конфигурация: Debug Win32 ------
1>Компиляция...
1>Okruzhnost'.cpp
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(25) : error C2061: синтаксическая ошибка: идентификатор "vc"
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(39) : error C2143: синтаксическая ошибка: отсутствие ")" перед "{"
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(39) : error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(39) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(50) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>f:\прога\okruzhnost'\okruzhnost'\okruzhnost'.cpp(55) : warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
1>Журнал построения был сохранен в "file://f:\прога\Okruzhnost'\Okruzhnost'\Debug\BuildLog.htm"
1>Okruzhnost' - ошибок 3, предупреждений 3
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
27.05.2012, 20:37     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) #4
Строка 25: Вы перед vc[2][3] не указали тип -- в данном случае это double. Впрочем, там вообще необязательно писать vc[2][3], это можно заменить любым удобным именем переменной, а уже в вызове (строки 50 и 55) использовать то, что нужно.
Строка 39: сразу после if у вас одна лишняя открывающая скобка.
Строки 50 и 55: у вас первый аргумент функции имеет тип double, а вы передаете имя массива, а это double**.
И ЗАЧЕМ вам main внутри _tMain ?
Yandex
Объявления
27.05.2012, 20:37     Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек)
Ответ Создать тему
Опции темы

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